UNPKG

1.07 MBJavaScriptView Raw
1/* Sinon.JS 15.0.2, 2023-03-12, @license BSD-3 */let sinon;(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
2"use strict";
3// eslint-disable-next-line no-undef
4sinon = require("./sinon");
5
6},{"./sinon":2}],2:[function(require,module,exports){
7"use strict";
8
9var behavior = require("./sinon/behavior");
10var createSandbox = require("./sinon/create-sandbox");
11var extend = require("./sinon/util/core/extend");
12var fakeTimers = require("./sinon/util/fake-timers");
13var nise = require("nise");
14var Sandbox = require("./sinon/sandbox");
15var stub = require("./sinon/stub");
16var promise = require("./sinon/promise");
17
18var apiMethods = {
19 createSandbox: createSandbox,
20 assert: require("./sinon/assert"),
21 match: require("@sinonjs/samsam").createMatcher,
22 restoreObject: require("./sinon/restore-object"),
23
24 expectation: require("./sinon/mock-expectation"),
25 defaultConfig: require("./sinon/util/core/default-config"),
26
27 // fake timers
28 timers: fakeTimers.timers,
29
30 // fake XHR
31 xhr: nise.fakeXhr.xhr,
32 FakeXMLHttpRequest: nise.fakeXhr.FakeXMLHttpRequest,
33
34 // fake server
35 fakeServer: nise.fakeServer,
36 fakeServerWithClock: nise.fakeServerWithClock,
37 createFakeServer: nise.fakeServer.create.bind(nise.fakeServer),
38 createFakeServerWithClock: nise.fakeServerWithClock.create.bind(
39 nise.fakeServerWithClock
40 ),
41
42 addBehavior: function (name, fn) {
43 behavior.addBehavior(stub, name, fn);
44 },
45
46 // fake promise
47 promise: promise,
48};
49
50var sandbox = new Sandbox();
51
52var api = extend(sandbox, apiMethods);
53
54module.exports = api;
55
56},{"./sinon/assert":3,"./sinon/behavior":4,"./sinon/create-sandbox":7,"./sinon/mock-expectation":10,"./sinon/promise":12,"./sinon/restore-object":17,"./sinon/sandbox":18,"./sinon/stub":21,"./sinon/util/core/default-config":23,"./sinon/util/core/extend":25,"./sinon/util/fake-timers":39,"@sinonjs/samsam":105,"nise":145}],3:[function(require,module,exports){
57"use strict";
58
59var arrayProto = require("@sinonjs/commons").prototypes.array;
60var calledInOrder = require("@sinonjs/commons").calledInOrder;
61var createMatcher = require("@sinonjs/samsam").createMatcher;
62var orderByFirstCall = require("@sinonjs/commons").orderByFirstCall;
63var timesInWords = require("./util/core/times-in-words");
64var inspect = require("util").inspect;
65var stringSlice = require("@sinonjs/commons").prototypes.string.slice;
66var globalObject = require("@sinonjs/commons").global;
67
68var arraySlice = arrayProto.slice;
69var concat = arrayProto.concat;
70var forEach = arrayProto.forEach;
71var join = arrayProto.join;
72var splice = arrayProto.splice;
73
74function createAssertObject() {
75 var assert;
76
77 function verifyIsStub() {
78 var args = arraySlice(arguments);
79
80 forEach(args, function (method) {
81 if (!method) {
82 assert.fail("fake is not a spy");
83 }
84
85 if (method.proxy && method.proxy.isSinonProxy) {
86 verifyIsStub(method.proxy);
87 } else {
88 if (typeof method !== "function") {
89 assert.fail(`${method} is not a function`);
90 }
91
92 if (typeof method.getCall !== "function") {
93 assert.fail(`${method} is not stubbed`);
94 }
95 }
96 });
97 }
98
99 function verifyIsValidAssertion(assertionMethod, assertionArgs) {
100 switch (assertionMethod) {
101 case "notCalled":
102 case "called":
103 case "calledOnce":
104 case "calledTwice":
105 case "calledThrice":
106 if (assertionArgs.length !== 0) {
107 assert.fail(
108 `${assertionMethod} takes 1 argument but was called with ${
109 assertionArgs.length + 1
110 } arguments`
111 );
112 }
113 break;
114 default:
115 break;
116 }
117 }
118
119 function failAssertion(object, msg) {
120 var obj = object || globalObject;
121 var failMethod = obj.fail || assert.fail;
122 failMethod.call(obj, msg);
123 }
124
125 function mirrorPropAsAssertion(name, method, message) {
126 var msg = message;
127 var meth = method;
128 if (arguments.length === 2) {
129 msg = method;
130 meth = name;
131 }
132
133 assert[name] = function (fake) {
134 verifyIsStub(fake);
135
136 var args = arraySlice(arguments, 1);
137 var failed = false;
138
139 verifyIsValidAssertion(name, args);
140
141 if (typeof meth === "function") {
142 failed = !meth(fake);
143 } else {
144 failed =
145 typeof fake[meth] === "function"
146 ? !fake[meth].apply(fake, args)
147 : !fake[meth];
148 }
149
150 if (failed) {
151 failAssertion(
152 this,
153 (fake.printf || fake.proxy.printf).apply(
154 fake,
155 concat([msg], args)
156 )
157 );
158 } else {
159 assert.pass(name);
160 }
161 };
162 }
163
164 function exposedName(prefix, prop) {
165 return !prefix || /^fail/.test(prop)
166 ? prop
167 : prefix +
168 stringSlice(prop, 0, 1).toUpperCase() +
169 stringSlice(prop, 1);
170 }
171
172 assert = {
173 failException: "AssertError",
174
175 fail: function fail(message) {
176 var error = new Error(message);
177 error.name = this.failException || assert.failException;
178
179 throw error;
180 },
181
182 pass: function pass() {
183 return;
184 },
185
186 callOrder: function assertCallOrder() {
187 verifyIsStub.apply(null, arguments);
188 var expected = "";
189 var actual = "";
190
191 if (!calledInOrder(arguments)) {
192 try {
193 expected = join(arguments, ", ");
194 var calls = arraySlice(arguments);
195 var i = calls.length;
196 while (i) {
197 if (!calls[--i].called) {
198 splice(calls, i, 1);
199 }
200 }
201 actual = join(orderByFirstCall(calls), ", ");
202 } catch (e) {
203 // If this fails, we'll just fall back to the blank string
204 }
205
206 failAssertion(
207 this,
208 `expected ${expected} to be called in order but were called as ${actual}`
209 );
210 } else {
211 assert.pass("callOrder");
212 }
213 },
214
215 callCount: function assertCallCount(method, count) {
216 verifyIsStub(method);
217
218 var msg;
219 if (typeof count !== "number") {
220 msg =
221 `expected ${inspect(count)} to be a number ` +
222 `but was of type ${typeof count}`;
223 failAssertion(this, msg);
224 } else if (method.callCount !== count) {
225 msg =
226 `expected %n to be called ${timesInWords(count)} ` +
227 `but was called %c%C`;
228 failAssertion(this, method.printf(msg));
229 } else {
230 assert.pass("callCount");
231 }
232 },
233
234 expose: function expose(target, options) {
235 if (!target) {
236 throw new TypeError("target is null or undefined");
237 }
238
239 var o = options || {};
240 var prefix =
241 (typeof o.prefix === "undefined" && "assert") || o.prefix;
242 var includeFail =
243 typeof o.includeFail === "undefined" || Boolean(o.includeFail);
244 var instance = this;
245
246 forEach(Object.keys(instance), function (method) {
247 if (
248 method !== "expose" &&
249 (includeFail || !/^(fail)/.test(method))
250 ) {
251 target[exposedName(prefix, method)] = instance[method];
252 }
253 });
254
255 return target;
256 },
257
258 match: function match(actual, expectation) {
259 var matcher = createMatcher(expectation);
260 if (matcher.test(actual)) {
261 assert.pass("match");
262 } else {
263 var formatted = [
264 "expected value to match",
265 ` expected = ${inspect(expectation)}`,
266 ` actual = ${inspect(actual)}`,
267 ];
268
269 failAssertion(this, join(formatted, "\n"));
270 }
271 },
272 };
273
274 mirrorPropAsAssertion(
275 "called",
276 "expected %n to have been called at least once but was never called"
277 );
278 mirrorPropAsAssertion(
279 "notCalled",
280 function (spy) {
281 return !spy.called;
282 },
283 "expected %n to not have been called but was called %c%C"
284 );
285 mirrorPropAsAssertion(
286 "calledOnce",
287 "expected %n to be called once but was called %c%C"
288 );
289 mirrorPropAsAssertion(
290 "calledTwice",
291 "expected %n to be called twice but was called %c%C"
292 );
293 mirrorPropAsAssertion(
294 "calledThrice",
295 "expected %n to be called thrice but was called %c%C"
296 );
297 mirrorPropAsAssertion(
298 "calledOn",
299 "expected %n to be called with %1 as this but was called with %t"
300 );
301 mirrorPropAsAssertion(
302 "alwaysCalledOn",
303 "expected %n to always be called with %1 as this but was called with %t"
304 );
305 mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new");
306 mirrorPropAsAssertion(
307 "alwaysCalledWithNew",
308 "expected %n to always be called with new"
309 );
310 mirrorPropAsAssertion(
311 "calledWith",
312 "expected %n to be called with arguments %D"
313 );
314 mirrorPropAsAssertion(
315 "calledWithMatch",
316 "expected %n to be called with match %D"
317 );
318 mirrorPropAsAssertion(
319 "alwaysCalledWith",
320 "expected %n to always be called with arguments %D"
321 );
322 mirrorPropAsAssertion(
323 "alwaysCalledWithMatch",
324 "expected %n to always be called with match %D"
325 );
326 mirrorPropAsAssertion(
327 "calledWithExactly",
328 "expected %n to be called with exact arguments %D"
329 );
330 mirrorPropAsAssertion(
331 "calledOnceWithExactly",
332 "expected %n to be called once and with exact arguments %D"
333 );
334 mirrorPropAsAssertion(
335 "calledOnceWithMatch",
336 "expected %n to be called once and with match %D"
337 );
338 mirrorPropAsAssertion(
339 "alwaysCalledWithExactly",
340 "expected %n to always be called with exact arguments %D"
341 );
342 mirrorPropAsAssertion(
343 "neverCalledWith",
344 "expected %n to never be called with arguments %*%C"
345 );
346 mirrorPropAsAssertion(
347 "neverCalledWithMatch",
348 "expected %n to never be called with match %*%C"
349 );
350 mirrorPropAsAssertion("threw", "%n did not throw exception%C");
351 mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C");
352
353 return assert;
354}
355
356module.exports = createAssertObject();
357module.exports.createAssertObject = createAssertObject;
358
359},{"./util/core/times-in-words":34,"@sinonjs/commons":46,"@sinonjs/samsam":105,"util":130}],4:[function(require,module,exports){
360"use strict";
361
362var arrayProto = require("@sinonjs/commons").prototypes.array;
363var extend = require("./util/core/extend");
364var functionName = require("@sinonjs/commons").functionName;
365var nextTick = require("./util/core/next-tick");
366var valueToString = require("@sinonjs/commons").valueToString;
367var exportAsyncBehaviors = require("./util/core/export-async-behaviors");
368
369var concat = arrayProto.concat;
370var join = arrayProto.join;
371var reverse = arrayProto.reverse;
372var slice = arrayProto.slice;
373
374var useLeftMostCallback = -1;
375var useRightMostCallback = -2;
376
377function getCallback(behavior, args) {
378 var callArgAt = behavior.callArgAt;
379
380 if (callArgAt >= 0) {
381 return args[callArgAt];
382 }
383
384 var argumentList;
385
386 if (callArgAt === useLeftMostCallback) {
387 argumentList = args;
388 }
389
390 if (callArgAt === useRightMostCallback) {
391 argumentList = reverse(slice(args));
392 }
393
394 var callArgProp = behavior.callArgProp;
395
396 for (var i = 0, l = argumentList.length; i < l; ++i) {
397 if (!callArgProp && typeof argumentList[i] === "function") {
398 return argumentList[i];
399 }
400
401 if (
402 callArgProp &&
403 argumentList[i] &&
404 typeof argumentList[i][callArgProp] === "function"
405 ) {
406 return argumentList[i][callArgProp];
407 }
408 }
409
410 return null;
411}
412
413function getCallbackError(behavior, func, args) {
414 if (behavior.callArgAt < 0) {
415 var msg;
416
417 if (behavior.callArgProp) {
418 msg = `${functionName(
419 behavior.stub
420 )} expected to yield to '${valueToString(
421 behavior.callArgProp
422 )}', but no object with such a property was passed.`;
423 } else {
424 msg = `${functionName(
425 behavior.stub
426 )} expected to yield, but no callback was passed.`;
427 }
428
429 if (args.length > 0) {
430 msg += ` Received [${join(args, ", ")}]`;
431 }
432
433 return msg;
434 }
435
436 return `argument at index ${behavior.callArgAt} is not a function: ${func}`;
437}
438
439function ensureArgs(name, behavior, args) {
440 // map function name to internal property
441 // callsArg => callArgAt
442 var property = name.replace(/sArg/, "ArgAt");
443 var index = behavior[property];
444
445 if (index >= args.length) {
446 throw new TypeError(
447 `${name} failed: ${index + 1} arguments required but only ${
448 args.length
449 } present`
450 );
451 }
452}
453
454function callCallback(behavior, args) {
455 if (typeof behavior.callArgAt === "number") {
456 ensureArgs("callsArg", behavior, args);
457 var func = getCallback(behavior, args);
458
459 if (typeof func !== "function") {
460 throw new TypeError(getCallbackError(behavior, func, args));
461 }
462
463 if (behavior.callbackAsync) {
464 nextTick(function () {
465 func.apply(
466 behavior.callbackContext,
467 behavior.callbackArguments
468 );
469 });
470 } else {
471 return func.apply(
472 behavior.callbackContext,
473 behavior.callbackArguments
474 );
475 }
476 }
477
478 return undefined;
479}
480
481var proto = {
482 create: function create(stub) {
483 var behavior = extend({}, proto);
484 delete behavior.create;
485 delete behavior.addBehavior;
486 delete behavior.createBehavior;
487 behavior.stub = stub;
488
489 if (stub.defaultBehavior && stub.defaultBehavior.promiseLibrary) {
490 behavior.promiseLibrary = stub.defaultBehavior.promiseLibrary;
491 }
492
493 return behavior;
494 },
495
496 isPresent: function isPresent() {
497 return (
498 typeof this.callArgAt === "number" ||
499 this.exception ||
500 this.exceptionCreator ||
501 typeof this.returnArgAt === "number" ||
502 this.returnThis ||
503 typeof this.resolveArgAt === "number" ||
504 this.resolveThis ||
505 typeof this.throwArgAt === "number" ||
506 this.fakeFn ||
507 this.returnValueDefined
508 );
509 },
510
511 /*eslint complexity: ["error", 20]*/
512 invoke: function invoke(context, args) {
513 /*
514 * callCallback (conditionally) calls ensureArgs
515 *
516 * Note: callCallback intentionally happens before
517 * everything else and cannot be moved lower
518 */
519 var returnValue = callCallback(this, args);
520
521 if (this.exception) {
522 throw this.exception;
523 } else if (this.exceptionCreator) {
524 this.exception = this.exceptionCreator();
525 this.exceptionCreator = undefined;
526 throw this.exception;
527 } else if (typeof this.returnArgAt === "number") {
528 ensureArgs("returnsArg", this, args);
529 return args[this.returnArgAt];
530 } else if (this.returnThis) {
531 return context;
532 } else if (typeof this.throwArgAt === "number") {
533 ensureArgs("throwsArg", this, args);
534 throw args[this.throwArgAt];
535 } else if (this.fakeFn) {
536 return this.fakeFn.apply(context, args);
537 } else if (typeof this.resolveArgAt === "number") {
538 ensureArgs("resolvesArg", this, args);
539 return (this.promiseLibrary || Promise).resolve(
540 args[this.resolveArgAt]
541 );
542 } else if (this.resolveThis) {
543 return (this.promiseLibrary || Promise).resolve(context);
544 } else if (this.resolve) {
545 return (this.promiseLibrary || Promise).resolve(this.returnValue);
546 } else if (this.reject) {
547 return (this.promiseLibrary || Promise).reject(this.returnValue);
548 } else if (this.callsThrough) {
549 var wrappedMethod = this.effectiveWrappedMethod();
550
551 return wrappedMethod.apply(context, args);
552 } else if (this.callsThroughWithNew) {
553 // Get the original method (assumed to be a constructor in this case)
554 var WrappedClass = this.effectiveWrappedMethod();
555 // Turn the arguments object into a normal array
556 var argsArray = slice(args);
557 // Call the constructor
558 var F = WrappedClass.bind.apply(
559 WrappedClass,
560 concat([null], argsArray)
561 );
562 return new F();
563 } else if (typeof this.returnValue !== "undefined") {
564 return this.returnValue;
565 } else if (typeof this.callArgAt === "number") {
566 return returnValue;
567 }
568
569 return this.returnValue;
570 },
571
572 effectiveWrappedMethod: function effectiveWrappedMethod() {
573 for (var stubb = this.stub; stubb; stubb = stubb.parent) {
574 if (stubb.wrappedMethod) {
575 return stubb.wrappedMethod;
576 }
577 }
578 throw new Error("Unable to find wrapped method");
579 },
580
581 onCall: function onCall(index) {
582 return this.stub.onCall(index);
583 },
584
585 onFirstCall: function onFirstCall() {
586 return this.stub.onFirstCall();
587 },
588
589 onSecondCall: function onSecondCall() {
590 return this.stub.onSecondCall();
591 },
592
593 onThirdCall: function onThirdCall() {
594 return this.stub.onThirdCall();
595 },
596
597 withArgs: function withArgs(/* arguments */) {
598 throw new Error(
599 'Defining a stub by invoking "stub.onCall(...).withArgs(...)" ' +
600 'is not supported. Use "stub.withArgs(...).onCall(...)" ' +
601 "to define sequential behavior for calls with certain arguments."
602 );
603 },
604};
605
606function createBehavior(behaviorMethod) {
607 return function () {
608 this.defaultBehavior = this.defaultBehavior || proto.create(this);
609 this.defaultBehavior[behaviorMethod].apply(
610 this.defaultBehavior,
611 arguments
612 );
613 return this;
614 };
615}
616
617function addBehavior(stub, name, fn) {
618 proto[name] = function () {
619 fn.apply(this, concat([this], slice(arguments)));
620 return this.stub || this;
621 };
622
623 stub[name] = createBehavior(name);
624}
625
626proto.addBehavior = addBehavior;
627proto.createBehavior = createBehavior;
628
629var asyncBehaviors = exportAsyncBehaviors(proto);
630
631module.exports = extend.nonEnum({}, proto, asyncBehaviors);
632
633},{"./util/core/export-async-behaviors":24,"./util/core/extend":25,"./util/core/next-tick":33,"@sinonjs/commons":46}],5:[function(require,module,exports){
634"use strict";
635
636var walk = require("./util/core/walk");
637var getPropertyDescriptor = require("./util/core/get-property-descriptor");
638var hasOwnProperty =
639 require("@sinonjs/commons").prototypes.object.hasOwnProperty;
640var push = require("@sinonjs/commons").prototypes.array.push;
641
642function collectMethod(methods, object, prop, propOwner) {
643 if (
644 typeof getPropertyDescriptor(propOwner, prop).value === "function" &&
645 hasOwnProperty(object, prop)
646 ) {
647 push(methods, object[prop]);
648 }
649}
650
651// This function returns an array of all the own methods on the passed object
652function collectOwnMethods(object) {
653 var methods = [];
654
655 walk(object, collectMethod.bind(null, methods, object));
656
657 return methods;
658}
659
660module.exports = collectOwnMethods;
661
662},{"./util/core/get-property-descriptor":28,"./util/core/walk":37,"@sinonjs/commons":46}],6:[function(require,module,exports){
663"use strict";
664
665var supportsColor = require("supports-color");
666
667function colorize(str, color) {
668 if (supportsColor.stdout === false) {
669 return str;
670 }
671
672 return `\x1b[${color}m${str}\x1b[0m`;
673}
674
675exports.red = function (str) {
676 return colorize(str, 31);
677};
678
679exports.green = function (str) {
680 return colorize(str, 32);
681};
682
683exports.cyan = function (str) {
684 return colorize(str, 96);
685};
686
687exports.white = function (str) {
688 return colorize(str, 39);
689};
690
691exports.bold = function (str) {
692 return colorize(str, 1);
693};
694
695},{"supports-color":167}],7:[function(require,module,exports){
696"use strict";
697
698var arrayProto = require("@sinonjs/commons").prototypes.array;
699var Sandbox = require("./sandbox");
700
701var forEach = arrayProto.forEach;
702var push = arrayProto.push;
703
704function prepareSandboxFromConfig(config) {
705 var sandbox = new Sandbox();
706
707 if (config.useFakeServer) {
708 if (typeof config.useFakeServer === "object") {
709 sandbox.serverPrototype = config.useFakeServer;
710 }
711
712 sandbox.useFakeServer();
713 }
714
715 if (config.useFakeTimers) {
716 if (typeof config.useFakeTimers === "object") {
717 sandbox.useFakeTimers(config.useFakeTimers);
718 } else {
719 sandbox.useFakeTimers();
720 }
721 }
722
723 return sandbox;
724}
725
726function exposeValue(sandbox, config, key, value) {
727 if (!value) {
728 return;
729 }
730
731 if (config.injectInto && !(key in config.injectInto)) {
732 config.injectInto[key] = value;
733 push(sandbox.injectedKeys, key);
734 } else {
735 push(sandbox.args, value);
736 }
737}
738
739function createSandbox(config) {
740 if (!config) {
741 return new Sandbox();
742 }
743
744 var configuredSandbox = prepareSandboxFromConfig(config);
745 configuredSandbox.args = configuredSandbox.args || [];
746 configuredSandbox.injectedKeys = [];
747 configuredSandbox.injectInto = config.injectInto;
748 var exposed = configuredSandbox.inject({});
749
750 if (config.properties) {
751 forEach(config.properties, function (prop) {
752 var value =
753 exposed[prop] || (prop === "sandbox" && configuredSandbox);
754 exposeValue(configuredSandbox, config, prop, value);
755 });
756 } else {
757 exposeValue(configuredSandbox, config, "sandbox");
758 }
759
760 return configuredSandbox;
761}
762
763module.exports = createSandbox;
764
765},{"./sandbox":18,"@sinonjs/commons":46}],8:[function(require,module,exports){
766"use strict";
767
768var arrayProto = require("@sinonjs/commons").prototypes.array;
769var isPropertyConfigurable = require("./util/core/is-property-configurable");
770var exportAsyncBehaviors = require("./util/core/export-async-behaviors");
771var extend = require("./util/core/extend");
772
773var slice = arrayProto.slice;
774
775var useLeftMostCallback = -1;
776var useRightMostCallback = -2;
777
778function throwsException(fake, error, message) {
779 if (typeof error === "function") {
780 fake.exceptionCreator = error;
781 } else if (typeof error === "string") {
782 fake.exceptionCreator = function () {
783 var newException = new Error(message || "");
784 newException.name = error;
785 return newException;
786 };
787 } else if (!error) {
788 fake.exceptionCreator = function () {
789 return new Error("Error");
790 };
791 } else {
792 fake.exception = error;
793 }
794}
795
796var defaultBehaviors = {
797 callsFake: function callsFake(fake, fn) {
798 fake.fakeFn = fn;
799 fake.exception = undefined;
800 fake.exceptionCreator = undefined;
801 },
802
803 callsArg: function callsArg(fake, index) {
804 if (typeof index !== "number") {
805 throw new TypeError("argument index is not number");
806 }
807
808 fake.callArgAt = index;
809 fake.callbackArguments = [];
810 fake.callbackContext = undefined;
811 fake.callArgProp = undefined;
812 fake.callbackAsync = false;
813 },
814
815 callsArgOn: function callsArgOn(fake, index, context) {
816 if (typeof index !== "number") {
817 throw new TypeError("argument index is not number");
818 }
819
820 fake.callArgAt = index;
821 fake.callbackArguments = [];
822 fake.callbackContext = context;
823 fake.callArgProp = undefined;
824 fake.callbackAsync = false;
825 },
826
827 callsArgWith: function callsArgWith(fake, index) {
828 if (typeof index !== "number") {
829 throw new TypeError("argument index is not number");
830 }
831
832 fake.callArgAt = index;
833 fake.callbackArguments = slice(arguments, 2);
834 fake.callbackContext = undefined;
835 fake.callArgProp = undefined;
836 fake.callbackAsync = false;
837 },
838
839 callsArgOnWith: function callsArgWith(fake, index, context) {
840 if (typeof index !== "number") {
841 throw new TypeError("argument index is not number");
842 }
843
844 fake.callArgAt = index;
845 fake.callbackArguments = slice(arguments, 3);
846 fake.callbackContext = context;
847 fake.callArgProp = undefined;
848 fake.callbackAsync = false;
849 },
850
851 usingPromise: function usingPromise(fake, promiseLibrary) {
852 fake.promiseLibrary = promiseLibrary;
853 },
854
855 yields: function (fake) {
856 fake.callArgAt = useLeftMostCallback;
857 fake.callbackArguments = slice(arguments, 1);
858 fake.callbackContext = undefined;
859 fake.callArgProp = undefined;
860 fake.callbackAsync = false;
861 fake.fakeFn = undefined;
862 },
863
864 yieldsRight: function (fake) {
865 fake.callArgAt = useRightMostCallback;
866 fake.callbackArguments = slice(arguments, 1);
867 fake.callbackContext = undefined;
868 fake.callArgProp = undefined;
869 fake.callbackAsync = false;
870 fake.fakeFn = undefined;
871 },
872
873 yieldsOn: function (fake, context) {
874 fake.callArgAt = useLeftMostCallback;
875 fake.callbackArguments = slice(arguments, 2);
876 fake.callbackContext = context;
877 fake.callArgProp = undefined;
878 fake.callbackAsync = false;
879 fake.fakeFn = undefined;
880 },
881
882 yieldsTo: function (fake, prop) {
883 fake.callArgAt = useLeftMostCallback;
884 fake.callbackArguments = slice(arguments, 2);
885 fake.callbackContext = undefined;
886 fake.callArgProp = prop;
887 fake.callbackAsync = false;
888 fake.fakeFn = undefined;
889 },
890
891 yieldsToOn: function (fake, prop, context) {
892 fake.callArgAt = useLeftMostCallback;
893 fake.callbackArguments = slice(arguments, 3);
894 fake.callbackContext = context;
895 fake.callArgProp = prop;
896 fake.callbackAsync = false;
897 fake.fakeFn = undefined;
898 },
899
900 throws: throwsException,
901 throwsException: throwsException,
902
903 returns: function returns(fake, value) {
904 fake.returnValue = value;
905 fake.resolve = false;
906 fake.reject = false;
907 fake.returnValueDefined = true;
908 fake.exception = undefined;
909 fake.exceptionCreator = undefined;
910 fake.fakeFn = undefined;
911 },
912
913 returnsArg: function returnsArg(fake, index) {
914 if (typeof index !== "number") {
915 throw new TypeError("argument index is not number");
916 }
917
918 fake.returnArgAt = index;
919 },
920
921 throwsArg: function throwsArg(fake, index) {
922 if (typeof index !== "number") {
923 throw new TypeError("argument index is not number");
924 }
925
926 fake.throwArgAt = index;
927 },
928
929 returnsThis: function returnsThis(fake) {
930 fake.returnThis = true;
931 },
932
933 resolves: function resolves(fake, value) {
934 fake.returnValue = value;
935 fake.resolve = true;
936 fake.resolveThis = false;
937 fake.reject = false;
938 fake.returnValueDefined = true;
939 fake.exception = undefined;
940 fake.exceptionCreator = undefined;
941 fake.fakeFn = undefined;
942 },
943
944 resolvesArg: function resolvesArg(fake, index) {
945 if (typeof index !== "number") {
946 throw new TypeError("argument index is not number");
947 }
948 fake.resolveArgAt = index;
949 fake.returnValue = undefined;
950 fake.resolve = true;
951 fake.resolveThis = false;
952 fake.reject = false;
953 fake.returnValueDefined = false;
954 fake.exception = undefined;
955 fake.exceptionCreator = undefined;
956 fake.fakeFn = undefined;
957 },
958
959 rejects: function rejects(fake, error, message) {
960 var reason;
961 if (typeof error === "string") {
962 reason = new Error(message || "");
963 reason.name = error;
964 } else if (!error) {
965 reason = new Error("Error");
966 } else {
967 reason = error;
968 }
969 fake.returnValue = reason;
970 fake.resolve = false;
971 fake.resolveThis = false;
972 fake.reject = true;
973 fake.returnValueDefined = true;
974 fake.exception = undefined;
975 fake.exceptionCreator = undefined;
976 fake.fakeFn = undefined;
977
978 return fake;
979 },
980
981 resolvesThis: function resolvesThis(fake) {
982 fake.returnValue = undefined;
983 fake.resolve = false;
984 fake.resolveThis = true;
985 fake.reject = false;
986 fake.returnValueDefined = false;
987 fake.exception = undefined;
988 fake.exceptionCreator = undefined;
989 fake.fakeFn = undefined;
990 },
991
992 callThrough: function callThrough(fake) {
993 fake.callsThrough = true;
994 },
995
996 callThroughWithNew: function callThroughWithNew(fake) {
997 fake.callsThroughWithNew = true;
998 },
999
1000 get: function get(fake, getterFunction) {
1001 var rootStub = fake.stub || fake;
1002
1003 Object.defineProperty(rootStub.rootObj, rootStub.propName, {
1004 get: getterFunction,
1005 configurable: isPropertyConfigurable(
1006 rootStub.rootObj,
1007 rootStub.propName
1008 ),
1009 });
1010
1011 return fake;
1012 },
1013
1014 set: function set(fake, setterFunction) {
1015 var rootStub = fake.stub || fake;
1016
1017 Object.defineProperty(
1018 rootStub.rootObj,
1019 rootStub.propName,
1020 // eslint-disable-next-line accessor-pairs
1021 {
1022 set: setterFunction,
1023 configurable: isPropertyConfigurable(
1024 rootStub.rootObj,
1025 rootStub.propName
1026 ),
1027 }
1028 );
1029
1030 return fake;
1031 },
1032
1033 value: function value(fake, newVal) {
1034 var rootStub = fake.stub || fake;
1035
1036 Object.defineProperty(rootStub.rootObj, rootStub.propName, {
1037 value: newVal,
1038 enumerable: true,
1039 writable: true,
1040 configurable:
1041 rootStub.shadowsPropOnPrototype ||
1042 isPropertyConfigurable(rootStub.rootObj, rootStub.propName),
1043 });
1044
1045 return fake;
1046 },
1047};
1048
1049var asyncBehaviors = exportAsyncBehaviors(defaultBehaviors);
1050
1051module.exports = extend({}, defaultBehaviors, asyncBehaviors);
1052
1053},{"./util/core/export-async-behaviors":24,"./util/core/extend":25,"./util/core/is-property-configurable":31,"@sinonjs/commons":46}],9:[function(require,module,exports){
1054"use strict";
1055
1056var arrayProto = require("@sinonjs/commons").prototypes.array;
1057var createProxy = require("./proxy");
1058var nextTick = require("./util/core/next-tick");
1059
1060var slice = arrayProto.slice;
1061var promiseLib = Promise;
1062
1063module.exports = fake;
1064
1065/**
1066 * Returns a `fake` that records all calls, arguments and return values.
1067 *
1068 * When an `f` argument is supplied, this implementation will be used.
1069 *
1070 * @example
1071 * // create an empty fake
1072 * var f1 = sinon.fake();
1073 *
1074 * f1();
1075 *
1076 * f1.calledOnce()
1077 * // true
1078 *
1079 * @example
1080 * function greet(greeting) {
1081 * console.log(`Hello ${greeting}`);
1082 * }
1083 *
1084 * // create a fake with implementation
1085 * var f2 = sinon.fake(greet);
1086 *
1087 * // Hello world
1088 * f2("world");
1089 *
1090 * f2.calledWith("world");
1091 * // true
1092 *
1093 * @param {Function|undefined} f
1094 * @returns {Function}
1095 * @namespace
1096 */
1097function fake(f) {
1098 if (arguments.length > 0 && typeof f !== "function") {
1099 throw new TypeError("Expected f argument to be a Function");
1100 }
1101
1102 return wrapFunc(f);
1103}
1104
1105/**
1106 * Creates a `fake` that returns the provided `value`, as well as recording all
1107 * calls, arguments and return values.
1108 *
1109 * @example
1110 * var f1 = sinon.fake.returns(42);
1111 *
1112 * f1();
1113 * // 42
1114 *
1115 * @memberof fake
1116 * @param {*} value
1117 * @returns {Function}
1118 */
1119fake.returns = function returns(value) {
1120 // eslint-disable-next-line jsdoc/require-jsdoc
1121 function f() {
1122 return value;
1123 }
1124
1125 return wrapFunc(f);
1126};
1127
1128/**
1129 * Creates a `fake` that throws an Error.
1130 * If the `value` argument does not have Error in its prototype chain, it will
1131 * be used for creating a new error.
1132 *
1133 * @example
1134 * var f1 = sinon.fake.throws("hello");
1135 *
1136 * f1();
1137 * // Uncaught Error: hello
1138 *
1139 * @example
1140 * var f2 = sinon.fake.throws(new TypeError("Invalid argument"));
1141 *
1142 * f2();
1143 * // Uncaught TypeError: Invalid argument
1144 *
1145 * @memberof fake
1146 * @param {*|Error} value
1147 * @returns {Function}
1148 */
1149fake.throws = function throws(value) {
1150 // eslint-disable-next-line jsdoc/require-jsdoc
1151 function f() {
1152 throw getError(value);
1153 }
1154
1155 return wrapFunc(f);
1156};
1157
1158/**
1159 * Creates a `fake` that returns a promise that resolves to the passed `value`
1160 * argument.
1161 *
1162 * @example
1163 * var f1 = sinon.fake.resolves("apple pie");
1164 *
1165 * await f1();
1166 * // "apple pie"
1167 *
1168 * @memberof fake
1169 * @param {*} value
1170 * @returns {Function}
1171 */
1172fake.resolves = function resolves(value) {
1173 // eslint-disable-next-line jsdoc/require-jsdoc
1174 function f() {
1175 return promiseLib.resolve(value);
1176 }
1177
1178 return wrapFunc(f);
1179};
1180
1181/**
1182 * Creates a `fake` that returns a promise that rejects to the passed `value`
1183 * argument. When `value` does not have Error in its prototype chain, it will be
1184 * wrapped in an Error.
1185 *
1186 * @example
1187 * var f1 = sinon.fake.rejects(":(");
1188 *
1189 * try {
1190 * await ft();
1191 * } catch (error) {
1192 * console.log(error);
1193 * // ":("
1194 * }
1195 *
1196 * @memberof fake
1197 * @param {*} value
1198 * @returns {Function}
1199 */
1200fake.rejects = function rejects(value) {
1201 // eslint-disable-next-line jsdoc/require-jsdoc
1202 function f() {
1203 return promiseLib.reject(getError(value));
1204 }
1205
1206 return wrapFunc(f);
1207};
1208
1209/**
1210 * Causes `fake` to use a custom Promise implementation, instead of the native
1211 * Promise implementation.
1212 *
1213 * @example
1214 * const bluebird = require("bluebird");
1215 * sinon.fake.usingPromise(bluebird);
1216 *
1217 * @memberof fake
1218 * @param {*} promiseLibrary
1219 * @returns {Function}
1220 */
1221fake.usingPromise = function usingPromise(promiseLibrary) {
1222 promiseLib = promiseLibrary;
1223 return fake;
1224};
1225
1226/**
1227 * Returns a `fake` that calls the callback with the defined arguments.
1228 *
1229 * @example
1230 * function callback() {
1231 * console.log(arguments.join("*"));
1232 * }
1233 *
1234 * const f1 = sinon.fake.yields("apple", "pie");
1235 *
1236 * f1(callback);
1237 * // "apple*pie"
1238 *
1239 * @memberof fake
1240 * @returns {Function}
1241 */
1242fake.yields = function yields() {
1243 var values = slice(arguments);
1244
1245 // eslint-disable-next-line jsdoc/require-jsdoc
1246 function f() {
1247 var callback = arguments[arguments.length - 1];
1248 if (typeof callback !== "function") {
1249 throw new TypeError("Expected last argument to be a function");
1250 }
1251
1252 callback.apply(null, values);
1253 }
1254
1255 return wrapFunc(f);
1256};
1257
1258/**
1259 * Returns a `fake` that calls the callback **asynchronously** with the
1260 * defined arguments.
1261 *
1262 * @example
1263 * function callback() {
1264 * console.log(arguments.join("*"));
1265 * }
1266 *
1267 * const f1 = sinon.fake.yields("apple", "pie");
1268 *
1269 * f1(callback);
1270 *
1271 * setTimeout(() => {
1272 * // "apple*pie"
1273 * });
1274 *
1275 * @memberof fake
1276 * @returns {Function}
1277 */
1278fake.yieldsAsync = function yieldsAsync() {
1279 var values = slice(arguments);
1280
1281 // eslint-disable-next-line jsdoc/require-jsdoc
1282 function f() {
1283 var callback = arguments[arguments.length - 1];
1284 if (typeof callback !== "function") {
1285 throw new TypeError("Expected last argument to be a function");
1286 }
1287 nextTick(function () {
1288 callback.apply(null, values);
1289 });
1290 }
1291
1292 return wrapFunc(f);
1293};
1294
1295var uuid = 0;
1296/**
1297 * Creates a proxy (sinon concept) from the passed function.
1298 *
1299 * @private
1300 * @param {Function} f
1301 * @returns {Function}
1302 */
1303function wrapFunc(f) {
1304 var proxy;
1305 var fakeInstance = function () {
1306 var firstArg, lastArg;
1307
1308 if (arguments.length > 0) {
1309 firstArg = arguments[0];
1310 lastArg = arguments[arguments.length - 1];
1311 }
1312
1313 var callback =
1314 lastArg && typeof lastArg === "function" ? lastArg : undefined;
1315
1316 proxy.firstArg = firstArg;
1317 proxy.lastArg = lastArg;
1318 proxy.callback = callback;
1319
1320 return f && f.apply(this, arguments);
1321 };
1322 proxy = createProxy(fakeInstance, f || fakeInstance);
1323
1324 proxy.displayName = "fake";
1325 proxy.id = `fake#${uuid++}`;
1326
1327 return proxy;
1328}
1329
1330/**
1331 * Returns an Error instance from the passed value, if the value is not
1332 * already an Error instance.
1333 *
1334 * @private
1335 * @param {*} value [description]
1336 * @returns {Error} [description]
1337 */
1338function getError(value) {
1339 return value instanceof Error ? value : new Error(value);
1340}
1341
1342},{"./proxy":16,"./util/core/next-tick":33,"@sinonjs/commons":46}],10:[function(require,module,exports){
1343"use strict";
1344
1345var arrayProto = require("@sinonjs/commons").prototypes.array;
1346var proxyInvoke = require("./proxy-invoke");
1347var proxyCallToString = require("./proxy-call").toString;
1348var timesInWords = require("./util/core/times-in-words");
1349var extend = require("./util/core/extend");
1350var match = require("@sinonjs/samsam").createMatcher;
1351var stub = require("./stub");
1352var assert = require("./assert");
1353var deepEqual = require("@sinonjs/samsam").deepEqual;
1354var inspect = require("util").inspect;
1355var valueToString = require("@sinonjs/commons").valueToString;
1356
1357var every = arrayProto.every;
1358var forEach = arrayProto.forEach;
1359var push = arrayProto.push;
1360var slice = arrayProto.slice;
1361
1362function callCountInWords(callCount) {
1363 if (callCount === 0) {
1364 return "never called";
1365 }
1366
1367 return `called ${timesInWords(callCount)}`;
1368}
1369
1370function expectedCallCountInWords(expectation) {
1371 var min = expectation.minCalls;
1372 var max = expectation.maxCalls;
1373
1374 if (typeof min === "number" && typeof max === "number") {
1375 var str = timesInWords(min);
1376
1377 if (min !== max) {
1378 str = `at least ${str} and at most ${timesInWords(max)}`;
1379 }
1380
1381 return str;
1382 }
1383
1384 if (typeof min === "number") {
1385 return `at least ${timesInWords(min)}`;
1386 }
1387
1388 return `at most ${timesInWords(max)}`;
1389}
1390
1391function receivedMinCalls(expectation) {
1392 var hasMinLimit = typeof expectation.minCalls === "number";
1393 return !hasMinLimit || expectation.callCount >= expectation.minCalls;
1394}
1395
1396function receivedMaxCalls(expectation) {
1397 if (typeof expectation.maxCalls !== "number") {
1398 return false;
1399 }
1400
1401 return expectation.callCount === expectation.maxCalls;
1402}
1403
1404function verifyMatcher(possibleMatcher, arg) {
1405 var isMatcher = match.isMatcher(possibleMatcher);
1406
1407 return (isMatcher && possibleMatcher.test(arg)) || true;
1408}
1409
1410var mockExpectation = {
1411 minCalls: 1,
1412 maxCalls: 1,
1413
1414 create: function create(methodName) {
1415 var expectation = extend.nonEnum(stub(), mockExpectation);
1416 delete expectation.create;
1417 expectation.method = methodName;
1418
1419 return expectation;
1420 },
1421
1422 invoke: function invoke(func, thisValue, args) {
1423 this.verifyCallAllowed(thisValue, args);
1424
1425 return proxyInvoke.apply(this, arguments);
1426 },
1427
1428 atLeast: function atLeast(num) {
1429 if (typeof num !== "number") {
1430 throw new TypeError(`'${valueToString(num)}' is not number`);
1431 }
1432
1433 if (!this.limitsSet) {
1434 this.maxCalls = null;
1435 this.limitsSet = true;
1436 }
1437
1438 this.minCalls = num;
1439
1440 return this;
1441 },
1442
1443 atMost: function atMost(num) {
1444 if (typeof num !== "number") {
1445 throw new TypeError(`'${valueToString(num)}' is not number`);
1446 }
1447
1448 if (!this.limitsSet) {
1449 this.minCalls = null;
1450 this.limitsSet = true;
1451 }
1452
1453 this.maxCalls = num;
1454
1455 return this;
1456 },
1457
1458 never: function never() {
1459 return this.exactly(0);
1460 },
1461
1462 once: function once() {
1463 return this.exactly(1);
1464 },
1465
1466 twice: function twice() {
1467 return this.exactly(2);
1468 },
1469
1470 thrice: function thrice() {
1471 return this.exactly(3);
1472 },
1473
1474 exactly: function exactly(num) {
1475 if (typeof num !== "number") {
1476 throw new TypeError(`'${valueToString(num)}' is not a number`);
1477 }
1478
1479 this.atLeast(num);
1480 return this.atMost(num);
1481 },
1482
1483 met: function met() {
1484 return !this.failed && receivedMinCalls(this);
1485 },
1486
1487 verifyCallAllowed: function verifyCallAllowed(thisValue, args) {
1488 var expectedArguments = this.expectedArguments;
1489
1490 if (receivedMaxCalls(this)) {
1491 this.failed = true;
1492 mockExpectation.fail(
1493 `${this.method} already called ${timesInWords(this.maxCalls)}`
1494 );
1495 }
1496
1497 if ("expectedThis" in this && this.expectedThis !== thisValue) {
1498 mockExpectation.fail(
1499 `${this.method} called with ${valueToString(
1500 thisValue
1501 )} as thisValue, expected ${valueToString(this.expectedThis)}`
1502 );
1503 }
1504
1505 if (!("expectedArguments" in this)) {
1506 return;
1507 }
1508
1509 if (!args) {
1510 mockExpectation.fail(
1511 `${this.method} received no arguments, expected ${inspect(
1512 expectedArguments
1513 )}`
1514 );
1515 }
1516
1517 if (args.length < expectedArguments.length) {
1518 mockExpectation.fail(
1519 `${this.method} received too few arguments (${inspect(
1520 args
1521 )}), expected ${inspect(expectedArguments)}`
1522 );
1523 }
1524
1525 if (
1526 this.expectsExactArgCount &&
1527 args.length !== expectedArguments.length
1528 ) {
1529 mockExpectation.fail(
1530 `${this.method} received too many arguments (${inspect(
1531 args
1532 )}), expected ${inspect(expectedArguments)}`
1533 );
1534 }
1535
1536 forEach(
1537 expectedArguments,
1538 function (expectedArgument, i) {
1539 if (!verifyMatcher(expectedArgument, args[i])) {
1540 mockExpectation.fail(
1541 `${this.method} received wrong arguments ${inspect(
1542 args
1543 )}, didn't match ${String(expectedArguments)}`
1544 );
1545 }
1546
1547 if (!deepEqual(args[i], expectedArgument)) {
1548 mockExpectation.fail(
1549 `${this.method} received wrong arguments ${inspect(
1550 args
1551 )}, expected ${inspect(expectedArguments)}`
1552 );
1553 }
1554 },
1555 this
1556 );
1557 },
1558
1559 allowsCall: function allowsCall(thisValue, args) {
1560 var expectedArguments = this.expectedArguments;
1561
1562 if (this.met() && receivedMaxCalls(this)) {
1563 return false;
1564 }
1565
1566 if ("expectedThis" in this && this.expectedThis !== thisValue) {
1567 return false;
1568 }
1569
1570 if (!("expectedArguments" in this)) {
1571 return true;
1572 }
1573
1574 // eslint-disable-next-line no-underscore-dangle
1575 var _args = args || [];
1576
1577 if (_args.length < expectedArguments.length) {
1578 return false;
1579 }
1580
1581 if (
1582 this.expectsExactArgCount &&
1583 _args.length !== expectedArguments.length
1584 ) {
1585 return false;
1586 }
1587
1588 return every(expectedArguments, function (expectedArgument, i) {
1589 if (!verifyMatcher(expectedArgument, _args[i])) {
1590 return false;
1591 }
1592
1593 if (!deepEqual(_args[i], expectedArgument)) {
1594 return false;
1595 }
1596
1597 return true;
1598 });
1599 },
1600
1601 withArgs: function withArgs() {
1602 this.expectedArguments = slice(arguments);
1603 return this;
1604 },
1605
1606 withExactArgs: function withExactArgs() {
1607 this.withArgs.apply(this, arguments);
1608 this.expectsExactArgCount = true;
1609 return this;
1610 },
1611
1612 on: function on(thisValue) {
1613 this.expectedThis = thisValue;
1614 return this;
1615 },
1616
1617 toString: function () {
1618 var args = slice(this.expectedArguments || []);
1619
1620 if (!this.expectsExactArgCount) {
1621 push(args, "[...]");
1622 }
1623
1624 var callStr = proxyCallToString.call({
1625 proxy: this.method || "anonymous mock expectation",
1626 args: args,
1627 });
1628
1629 var message = `${callStr.replace(
1630 ", [...",
1631 "[, ..."
1632 )} ${expectedCallCountInWords(this)}`;
1633
1634 if (this.met()) {
1635 return `Expectation met: ${message}`;
1636 }
1637
1638 return `Expected ${message} (${callCountInWords(this.callCount)})`;
1639 },
1640
1641 verify: function verify() {
1642 if (!this.met()) {
1643 mockExpectation.fail(String(this));
1644 } else {
1645 mockExpectation.pass(String(this));
1646 }
1647
1648 return true;
1649 },
1650
1651 pass: function pass(message) {
1652 assert.pass(message);
1653 },
1654
1655 fail: function fail(message) {
1656 var exception = new Error(message);
1657 exception.name = "ExpectationError";
1658
1659 throw exception;
1660 },
1661};
1662
1663module.exports = mockExpectation;
1664
1665},{"./assert":3,"./proxy-call":14,"./proxy-invoke":15,"./stub":21,"./util/core/extend":25,"./util/core/times-in-words":34,"@sinonjs/commons":46,"@sinonjs/samsam":105,"util":130}],11:[function(require,module,exports){
1666"use strict";
1667
1668var arrayProto = require("@sinonjs/commons").prototypes.array;
1669var mockExpectation = require("./mock-expectation");
1670var proxyCallToString = require("./proxy-call").toString;
1671var extend = require("./util/core/extend");
1672var deepEqual = require("@sinonjs/samsam").deepEqual;
1673var wrapMethod = require("./util/core/wrap-method");
1674var usePromiseLibrary = require("./util/core/use-promise-library");
1675
1676var concat = arrayProto.concat;
1677var filter = arrayProto.filter;
1678var forEach = arrayProto.forEach;
1679var every = arrayProto.every;
1680var join = arrayProto.join;
1681var push = arrayProto.push;
1682var slice = arrayProto.slice;
1683var unshift = arrayProto.unshift;
1684
1685function mock(object) {
1686 if (!object || typeof object === "string") {
1687 return mockExpectation.create(object ? object : "Anonymous mock");
1688 }
1689
1690 return mock.create(object);
1691}
1692
1693function each(collection, callback) {
1694 var col = collection || [];
1695
1696 forEach(col, callback);
1697}
1698
1699function arrayEquals(arr1, arr2, compareLength) {
1700 if (compareLength && arr1.length !== arr2.length) {
1701 return false;
1702 }
1703
1704 return every(arr1, function (element, i) {
1705 return deepEqual(arr2[i], element);
1706 });
1707}
1708
1709extend(mock, {
1710 create: function create(object) {
1711 if (!object) {
1712 throw new TypeError("object is null");
1713 }
1714
1715 var mockObject = extend.nonEnum({}, mock, { object: object });
1716 delete mockObject.create;
1717
1718 return mockObject;
1719 },
1720
1721 expects: function expects(method) {
1722 if (!method) {
1723 throw new TypeError("method is falsy");
1724 }
1725
1726 if (!this.expectations) {
1727 this.expectations = {};
1728 this.proxies = [];
1729 this.failures = [];
1730 }
1731
1732 if (!this.expectations[method]) {
1733 this.expectations[method] = [];
1734 var mockObject = this;
1735
1736 wrapMethod(this.object, method, function () {
1737 return mockObject.invokeMethod(method, this, arguments);
1738 });
1739
1740 push(this.proxies, method);
1741 }
1742
1743 var expectation = mockExpectation.create(method);
1744 expectation.wrappedMethod = this.object[method].wrappedMethod;
1745 push(this.expectations[method], expectation);
1746 usePromiseLibrary(this.promiseLibrary, expectation);
1747
1748 return expectation;
1749 },
1750
1751 restore: function restore() {
1752 var object = this.object;
1753
1754 each(this.proxies, function (proxy) {
1755 if (typeof object[proxy].restore === "function") {
1756 object[proxy].restore();
1757 }
1758 });
1759 },
1760
1761 verify: function verify() {
1762 var expectations = this.expectations || {};
1763 var messages = this.failures ? slice(this.failures) : [];
1764 var met = [];
1765
1766 each(this.proxies, function (proxy) {
1767 each(expectations[proxy], function (expectation) {
1768 if (!expectation.met()) {
1769 push(messages, String(expectation));
1770 } else {
1771 push(met, String(expectation));
1772 }
1773 });
1774 });
1775
1776 this.restore();
1777
1778 if (messages.length > 0) {
1779 mockExpectation.fail(join(concat(messages, met), "\n"));
1780 } else if (met.length > 0) {
1781 mockExpectation.pass(join(concat(messages, met), "\n"));
1782 }
1783
1784 return true;
1785 },
1786
1787 usingPromise: function usingPromise(promiseLibrary) {
1788 this.promiseLibrary = promiseLibrary;
1789
1790 return this;
1791 },
1792
1793 invokeMethod: function invokeMethod(method, thisValue, args) {
1794 /* if we cannot find any matching files we will explicitly call mockExpection#fail with error messages */
1795 /* eslint consistent-return: "off" */
1796 var expectations =
1797 this.expectations && this.expectations[method]
1798 ? this.expectations[method]
1799 : [];
1800 var currentArgs = args || [];
1801 var available;
1802
1803 var expectationsWithMatchingArgs = filter(
1804 expectations,
1805 function (expectation) {
1806 var expectedArgs = expectation.expectedArguments || [];
1807
1808 return arrayEquals(
1809 expectedArgs,
1810 currentArgs,
1811 expectation.expectsExactArgCount
1812 );
1813 }
1814 );
1815
1816 var expectationsToApply = filter(
1817 expectationsWithMatchingArgs,
1818 function (expectation) {
1819 return (
1820 !expectation.met() &&
1821 expectation.allowsCall(thisValue, args)
1822 );
1823 }
1824 );
1825
1826 if (expectationsToApply.length > 0) {
1827 return expectationsToApply[0].apply(thisValue, args);
1828 }
1829
1830 var messages = [];
1831 var exhausted = 0;
1832
1833 forEach(expectationsWithMatchingArgs, function (expectation) {
1834 if (expectation.allowsCall(thisValue, args)) {
1835 available = available || expectation;
1836 } else {
1837 exhausted += 1;
1838 }
1839 });
1840
1841 if (available && exhausted === 0) {
1842 return available.apply(thisValue, args);
1843 }
1844
1845 forEach(expectations, function (expectation) {
1846 push(messages, ` ${String(expectation)}`);
1847 });
1848
1849 unshift(
1850 messages,
1851 `Unexpected call: ${proxyCallToString.call({
1852 proxy: method,
1853 args: args,
1854 })}`
1855 );
1856
1857 var err = new Error();
1858 if (!err.stack) {
1859 // PhantomJS does not serialize the stack trace until the error has been thrown
1860 try {
1861 throw err;
1862 } catch (e) {
1863 /* empty */
1864 }
1865 }
1866 push(
1867 this.failures,
1868 `Unexpected call: ${proxyCallToString.call({
1869 proxy: method,
1870 args: args,
1871 stack: err.stack,
1872 })}`
1873 );
1874
1875 mockExpectation.fail(join(messages, "\n"));
1876 },
1877});
1878
1879module.exports = mock;
1880
1881},{"./mock-expectation":10,"./proxy-call":14,"./util/core/extend":25,"./util/core/use-promise-library":35,"./util/core/wrap-method":38,"@sinonjs/commons":46,"@sinonjs/samsam":105}],12:[function(require,module,exports){
1882"use strict";
1883
1884var fake = require("./fake");
1885var isRestorable = require("./util/core/is-restorable");
1886
1887var STATUS_PENDING = "pending";
1888var STATUS_RESOLVED = "resolved";
1889var STATUS_REJECTED = "rejected";
1890
1891/**
1892 * Returns a fake for a given function or undefined. If no function is given, a
1893 * new fake is returned. If the given function is already a fake, it is
1894 * returned as is. Otherwise the given function is wrapped in a new fake.
1895 *
1896 * @param {Function} [executor] The optional executor function.
1897 * @returns {Function}
1898 */
1899function getFakeExecutor(executor) {
1900 if (isRestorable(executor)) {
1901 return executor;
1902 }
1903 if (executor) {
1904 return fake(executor);
1905 }
1906 return fake();
1907}
1908
1909/**
1910 * Returns a new promise that exposes it's internal `status`, `resolvedValue`
1911 * and `rejectedValue` and can be resolved or rejected from the outside by
1912 * calling `resolve(value)` or `reject(reason)`.
1913 *
1914 * @param {Function} [executor] The optional executor function.
1915 * @returns {Promise}
1916 */
1917function promise(executor) {
1918 var fakeExecutor = getFakeExecutor(executor);
1919 var sinonPromise = new Promise(fakeExecutor);
1920
1921 sinonPromise.status = STATUS_PENDING;
1922 sinonPromise
1923 .then(function (value) {
1924 sinonPromise.status = STATUS_RESOLVED;
1925 sinonPromise.resolvedValue = value;
1926 })
1927 .catch(function (reason) {
1928 sinonPromise.status = STATUS_REJECTED;
1929 sinonPromise.rejectedValue = reason;
1930 });
1931
1932 /**
1933 * Resolves or rejects the promise with the given status and value.
1934 *
1935 * @param {string} status
1936 * @param {*} value
1937 * @param {Function} callback
1938 */
1939 function finalize(status, value, callback) {
1940 if (sinonPromise.status !== STATUS_PENDING) {
1941 throw new Error(`Promise already ${sinonPromise.status}`);
1942 }
1943
1944 sinonPromise.status = status;
1945 callback(value);
1946 }
1947
1948 sinonPromise.resolve = function (value) {
1949 finalize(STATUS_RESOLVED, value, fakeExecutor.firstCall.args[0]);
1950 // Return the promise so that callers can await it:
1951 return sinonPromise;
1952 };
1953 sinonPromise.reject = function (reason) {
1954 finalize(STATUS_REJECTED, reason, fakeExecutor.firstCall.args[1]);
1955 // Return a new promise that resolves when the sinon promise was
1956 // rejected, so that callers can await it:
1957 return new Promise(function (resolve) {
1958 sinonPromise.catch(() => resolve());
1959 });
1960 };
1961
1962 return sinonPromise;
1963}
1964
1965module.exports = promise;
1966
1967},{"./fake":9,"./util/core/is-restorable":32}],13:[function(require,module,exports){
1968"use strict";
1969
1970var push = require("@sinonjs/commons").prototypes.array.push;
1971
1972exports.incrementCallCount = function incrementCallCount(proxy) {
1973 proxy.called = true;
1974 proxy.callCount += 1;
1975 proxy.notCalled = false;
1976 proxy.calledOnce = proxy.callCount === 1;
1977 proxy.calledTwice = proxy.callCount === 2;
1978 proxy.calledThrice = proxy.callCount === 3;
1979};
1980
1981exports.createCallProperties = function createCallProperties(proxy) {
1982 proxy.firstCall = proxy.getCall(0);
1983 proxy.secondCall = proxy.getCall(1);
1984 proxy.thirdCall = proxy.getCall(2);
1985 proxy.lastCall = proxy.getCall(proxy.callCount - 1);
1986};
1987
1988exports.delegateToCalls = function delegateToCalls(
1989 proxy,
1990 method,
1991 matchAny,
1992 actual,
1993 returnsValues,
1994 notCalled,
1995 totalCallCount
1996) {
1997 proxy[method] = function () {
1998 if (!this.called) {
1999 if (notCalled) {
2000 return notCalled.apply(this, arguments);
2001 }
2002 return false;
2003 }
2004
2005 if (totalCallCount !== undefined && this.callCount !== totalCallCount) {
2006 return false;
2007 }
2008
2009 var currentCall;
2010 var matches = 0;
2011 var returnValues = [];
2012
2013 for (var i = 0, l = this.callCount; i < l; i += 1) {
2014 currentCall = this.getCall(i);
2015 var returnValue = currentCall[actual || method].apply(
2016 currentCall,
2017 arguments
2018 );
2019 push(returnValues, returnValue);
2020 if (returnValue) {
2021 matches += 1;
2022
2023 if (matchAny) {
2024 return true;
2025 }
2026 }
2027 }
2028
2029 if (returnsValues) {
2030 return returnValues;
2031 }
2032 return matches === this.callCount;
2033 };
2034};
2035
2036},{"@sinonjs/commons":46}],14:[function(require,module,exports){
2037"use strict";
2038
2039var arrayProto = require("@sinonjs/commons").prototypes.array;
2040var match = require("@sinonjs/samsam").createMatcher;
2041var deepEqual = require("@sinonjs/samsam").deepEqual;
2042var functionName = require("@sinonjs/commons").functionName;
2043var inspect = require("util").inspect;
2044var valueToString = require("@sinonjs/commons").valueToString;
2045
2046var concat = arrayProto.concat;
2047var filter = arrayProto.filter;
2048var join = arrayProto.join;
2049var map = arrayProto.map;
2050var reduce = arrayProto.reduce;
2051var slice = arrayProto.slice;
2052
2053/**
2054 * @param proxy
2055 * @param text
2056 * @param args
2057 */
2058function throwYieldError(proxy, text, args) {
2059 var msg = functionName(proxy) + text;
2060 if (args.length) {
2061 msg += ` Received [${join(slice(args), ", ")}]`;
2062 }
2063 throw new Error(msg);
2064}
2065
2066var callProto = {
2067 calledOn: function calledOn(thisValue) {
2068 if (match.isMatcher(thisValue)) {
2069 return thisValue.test(this.thisValue);
2070 }
2071 return this.thisValue === thisValue;
2072 },
2073
2074 calledWith: function calledWith() {
2075 var self = this;
2076 var calledWithArgs = slice(arguments);
2077
2078 if (calledWithArgs.length > self.args.length) {
2079 return false;
2080 }
2081
2082 return reduce(
2083 calledWithArgs,
2084 function (prev, arg, i) {
2085 return prev && deepEqual(self.args[i], arg);
2086 },
2087 true
2088 );
2089 },
2090
2091 calledWithMatch: function calledWithMatch() {
2092 var self = this;
2093 var calledWithMatchArgs = slice(arguments);
2094
2095 if (calledWithMatchArgs.length > self.args.length) {
2096 return false;
2097 }
2098
2099 return reduce(
2100 calledWithMatchArgs,
2101 function (prev, expectation, i) {
2102 var actual = self.args[i];
2103
2104 return prev && match(expectation).test(actual);
2105 },
2106 true
2107 );
2108 },
2109
2110 calledWithExactly: function calledWithExactly() {
2111 return (
2112 arguments.length === this.args.length &&
2113 this.calledWith.apply(this, arguments)
2114 );
2115 },
2116
2117 notCalledWith: function notCalledWith() {
2118 return !this.calledWith.apply(this, arguments);
2119 },
2120
2121 notCalledWithMatch: function notCalledWithMatch() {
2122 return !this.calledWithMatch.apply(this, arguments);
2123 },
2124
2125 returned: function returned(value) {
2126 return deepEqual(this.returnValue, value);
2127 },
2128
2129 threw: function threw(error) {
2130 if (typeof error === "undefined" || !this.exception) {
2131 return Boolean(this.exception);
2132 }
2133
2134 return this.exception === error || this.exception.name === error;
2135 },
2136
2137 calledWithNew: function calledWithNew() {
2138 return this.proxy.prototype && this.thisValue instanceof this.proxy;
2139 },
2140
2141 calledBefore: function (other) {
2142 return this.callId < other.callId;
2143 },
2144
2145 calledAfter: function (other) {
2146 return this.callId > other.callId;
2147 },
2148
2149 calledImmediatelyBefore: function (other) {
2150 return this.callId === other.callId - 1;
2151 },
2152
2153 calledImmediatelyAfter: function (other) {
2154 return this.callId === other.callId + 1;
2155 },
2156
2157 callArg: function (pos) {
2158 this.ensureArgIsAFunction(pos);
2159 return this.args[pos]();
2160 },
2161
2162 callArgOn: function (pos, thisValue) {
2163 this.ensureArgIsAFunction(pos);
2164 return this.args[pos].apply(thisValue);
2165 },
2166
2167 callArgWith: function (pos) {
2168 return this.callArgOnWith.apply(
2169 this,
2170 concat([pos, null], slice(arguments, 1))
2171 );
2172 },
2173
2174 callArgOnWith: function (pos, thisValue) {
2175 this.ensureArgIsAFunction(pos);
2176 var args = slice(arguments, 2);
2177 return this.args[pos].apply(thisValue, args);
2178 },
2179
2180 throwArg: function (pos) {
2181 if (pos > this.args.length) {
2182 throw new TypeError(
2183 `Not enough arguments: ${pos} required but only ${this.args.length} present`
2184 );
2185 }
2186
2187 throw this.args[pos];
2188 },
2189
2190 yield: function () {
2191 return this.yieldOn.apply(this, concat([null], slice(arguments, 0)));
2192 },
2193
2194 yieldOn: function (thisValue) {
2195 var args = slice(this.args);
2196 var yieldFn = filter(args, function (arg) {
2197 return typeof arg === "function";
2198 })[0];
2199
2200 if (!yieldFn) {
2201 throwYieldError(
2202 this.proxy,
2203 " cannot yield since no callback was passed.",
2204 args
2205 );
2206 }
2207
2208 return yieldFn.apply(thisValue, slice(arguments, 1));
2209 },
2210
2211 yieldTo: function (prop) {
2212 return this.yieldToOn.apply(
2213 this,
2214 concat([prop, null], slice(arguments, 1))
2215 );
2216 },
2217
2218 yieldToOn: function (prop, thisValue) {
2219 var args = slice(this.args);
2220 var yieldArg = filter(args, function (arg) {
2221 return arg && typeof arg[prop] === "function";
2222 })[0];
2223 var yieldFn = yieldArg && yieldArg[prop];
2224
2225 if (!yieldFn) {
2226 throwYieldError(
2227 this.proxy,
2228 ` cannot yield to '${valueToString(
2229 prop
2230 )}' since no callback was passed.`,
2231 args
2232 );
2233 }
2234
2235 return yieldFn.apply(thisValue, slice(arguments, 2));
2236 },
2237
2238 toString: function () {
2239 var callStr = this.proxy ? `${String(this.proxy)}(` : "";
2240 var formattedArgs;
2241
2242 if (!this.args) {
2243 return ":(";
2244 }
2245
2246 formattedArgs = map(this.args, function (arg) {
2247 return inspect(arg);
2248 });
2249
2250 callStr = `${callStr + join(formattedArgs, ", ")})`;
2251
2252 if (typeof this.returnValue !== "undefined") {
2253 callStr += ` => ${inspect(this.returnValue)}`;
2254 }
2255
2256 if (this.exception) {
2257 callStr += ` !${this.exception.name}`;
2258
2259 if (this.exception.message) {
2260 callStr += `(${this.exception.message})`;
2261 }
2262 }
2263 if (this.stack) {
2264 // If we have a stack, add the first frame that's in end-user code
2265 // Skip the first two frames because they will refer to Sinon code
2266 callStr += (this.stack.split("\n")[3] || "unknown").replace(
2267 /^\s*(?:at\s+|@)?/,
2268 " at "
2269 );
2270 }
2271
2272 return callStr;
2273 },
2274
2275 ensureArgIsAFunction: function (pos) {
2276 if (typeof this.args[pos] !== "function") {
2277 throw new TypeError(
2278 `Expected argument at position ${pos} to be a Function, but was ${typeof this
2279 .args[pos]}`
2280 );
2281 }
2282 },
2283};
2284Object.defineProperty(callProto, "stack", {
2285 enumerable: true,
2286 configurable: true,
2287 get: function () {
2288 return (this.errorWithCallStack && this.errorWithCallStack.stack) || "";
2289 },
2290});
2291
2292callProto.invokeCallback = callProto.yield;
2293
2294/**
2295 * @param proxy
2296 * @param thisValue
2297 * @param args
2298 * @param returnValue
2299 * @param exception
2300 * @param id
2301 * @param errorWithCallStack
2302 */
2303function createProxyCall(
2304 proxy,
2305 thisValue,
2306 args,
2307 returnValue,
2308 exception,
2309 id,
2310 errorWithCallStack
2311) {
2312 if (typeof id !== "number") {
2313 throw new TypeError("Call id is not a number");
2314 }
2315
2316 var firstArg, lastArg;
2317
2318 if (args.length > 0) {
2319 firstArg = args[0];
2320 lastArg = args[args.length - 1];
2321 }
2322
2323 var proxyCall = Object.create(callProto);
2324 var callback =
2325 lastArg && typeof lastArg === "function" ? lastArg : undefined;
2326
2327 proxyCall.proxy = proxy;
2328 proxyCall.thisValue = thisValue;
2329 proxyCall.args = args;
2330 proxyCall.firstArg = firstArg;
2331 proxyCall.lastArg = lastArg;
2332 proxyCall.callback = callback;
2333 proxyCall.returnValue = returnValue;
2334 proxyCall.exception = exception;
2335 proxyCall.callId = id;
2336 proxyCall.errorWithCallStack = errorWithCallStack;
2337
2338 return proxyCall;
2339}
2340createProxyCall.toString = callProto.toString; // used by mocks
2341
2342module.exports = createProxyCall;
2343
2344},{"@sinonjs/commons":46,"@sinonjs/samsam":105,"util":130}],15:[function(require,module,exports){
2345"use strict";
2346
2347var arrayProto = require("@sinonjs/commons").prototypes.array;
2348var proxyCallUtil = require("./proxy-call-util");
2349
2350var push = arrayProto.push;
2351var forEach = arrayProto.forEach;
2352var concat = arrayProto.concat;
2353var ErrorConstructor = Error.prototype.constructor;
2354var bind = Function.prototype.bind;
2355
2356var callId = 0;
2357
2358module.exports = function invoke(func, thisValue, args) {
2359 var matchings = this.matchingFakes(args);
2360 var currentCallId = callId++;
2361 var exception, returnValue;
2362
2363 proxyCallUtil.incrementCallCount(this);
2364 push(this.thisValues, thisValue);
2365 push(this.args, args);
2366 push(this.callIds, currentCallId);
2367 forEach(matchings, function (matching) {
2368 proxyCallUtil.incrementCallCount(matching);
2369 push(matching.thisValues, thisValue);
2370 push(matching.args, args);
2371 push(matching.callIds, currentCallId);
2372 });
2373
2374 // Make call properties available from within the spied function:
2375 proxyCallUtil.createCallProperties(this);
2376 forEach(matchings, proxyCallUtil.createCallProperties);
2377
2378 try {
2379 this.invoking = true;
2380
2381 var thisCall = this.getCall(this.callCount - 1);
2382
2383 if (thisCall.calledWithNew()) {
2384 // Call through with `new`
2385 returnValue = new (bind.apply(
2386 this.func || func,
2387 concat([thisValue], args)
2388 ))();
2389
2390 if (typeof returnValue !== "object") {
2391 returnValue = thisValue;
2392 }
2393 } else {
2394 returnValue = (this.func || func).apply(thisValue, args);
2395 }
2396 } catch (e) {
2397 exception = e;
2398 } finally {
2399 delete this.invoking;
2400 }
2401
2402 push(this.exceptions, exception);
2403 push(this.returnValues, returnValue);
2404 forEach(matchings, function (matching) {
2405 push(matching.exceptions, exception);
2406 push(matching.returnValues, returnValue);
2407 });
2408
2409 var err = new ErrorConstructor();
2410 // 1. Please do not get stack at this point. It may be so very slow, and not actually used
2411 // 2. PhantomJS does not serialize the stack trace until the error has been thrown:
2412 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack
2413 try {
2414 throw err;
2415 } catch (e) {
2416 /* empty */
2417 }
2418 push(this.errorsWithCallStack, err);
2419 forEach(matchings, function (matching) {
2420 push(matching.errorsWithCallStack, err);
2421 });
2422
2423 // Make return value and exception available in the calls:
2424 proxyCallUtil.createCallProperties(this);
2425 forEach(matchings, proxyCallUtil.createCallProperties);
2426
2427 if (exception !== undefined) {
2428 throw exception;
2429 }
2430
2431 return returnValue;
2432};
2433
2434},{"./proxy-call-util":13,"@sinonjs/commons":46}],16:[function(require,module,exports){
2435"use strict";
2436
2437var arrayProto = require("@sinonjs/commons").prototypes.array;
2438var extend = require("./util/core/extend");
2439var functionToString = require("./util/core/function-to-string");
2440var proxyCall = require("./proxy-call");
2441var proxyCallUtil = require("./proxy-call-util");
2442var proxyInvoke = require("./proxy-invoke");
2443var inspect = require("util").inspect;
2444
2445var push = arrayProto.push;
2446var forEach = arrayProto.forEach;
2447var slice = arrayProto.slice;
2448
2449var emptyFakes = Object.freeze([]);
2450
2451// Public API
2452var proxyApi = {
2453 toString: functionToString,
2454
2455 named: function named(name) {
2456 this.displayName = name;
2457 var nameDescriptor = Object.getOwnPropertyDescriptor(this, "name");
2458 if (nameDescriptor && nameDescriptor.configurable) {
2459 // IE 11 functions don't have a name.
2460 // Safari 9 has names that are not configurable.
2461 nameDescriptor.value = name;
2462 Object.defineProperty(this, "name", nameDescriptor);
2463 }
2464 return this;
2465 },
2466
2467 invoke: proxyInvoke,
2468
2469 /*
2470 * Hook for derived implementation to return fake instances matching the
2471 * given arguments.
2472 */
2473 matchingFakes: function (/*args, strict*/) {
2474 return emptyFakes;
2475 },
2476
2477 getCall: function getCall(index) {
2478 var i = index;
2479 if (i < 0) {
2480 // Negative indices means counting backwards from the last call
2481 i += this.callCount;
2482 }
2483 if (i < 0 || i >= this.callCount) {
2484 return null;
2485 }
2486
2487 return proxyCall(
2488 this,
2489 this.thisValues[i],
2490 this.args[i],
2491 this.returnValues[i],
2492 this.exceptions[i],
2493 this.callIds[i],
2494 this.errorsWithCallStack[i]
2495 );
2496 },
2497
2498 getCalls: function () {
2499 var calls = [];
2500 var i;
2501
2502 for (i = 0; i < this.callCount; i++) {
2503 push(calls, this.getCall(i));
2504 }
2505
2506 return calls;
2507 },
2508
2509 calledBefore: function calledBefore(proxy) {
2510 if (!this.called) {
2511 return false;
2512 }
2513
2514 if (!proxy.called) {
2515 return true;
2516 }
2517
2518 return this.callIds[0] < proxy.callIds[proxy.callIds.length - 1];
2519 },
2520
2521 calledAfter: function calledAfter(proxy) {
2522 if (!this.called || !proxy.called) {
2523 return false;
2524 }
2525
2526 return this.callIds[this.callCount - 1] > proxy.callIds[0];
2527 },
2528
2529 calledImmediatelyBefore: function calledImmediatelyBefore(proxy) {
2530 if (!this.called || !proxy.called) {
2531 return false;
2532 }
2533
2534 return (
2535 this.callIds[this.callCount - 1] ===
2536 proxy.callIds[proxy.callCount - 1] - 1
2537 );
2538 },
2539
2540 calledImmediatelyAfter: function calledImmediatelyAfter(proxy) {
2541 if (!this.called || !proxy.called) {
2542 return false;
2543 }
2544
2545 return (
2546 this.callIds[this.callCount - 1] ===
2547 proxy.callIds[proxy.callCount - 1] + 1
2548 );
2549 },
2550
2551 formatters: require("./spy-formatters"),
2552 printf: function (format) {
2553 var spyInstance = this;
2554 var args = slice(arguments, 1);
2555 var formatter;
2556
2557 return (format || "").replace(/%(.)/g, function (match, specifier) {
2558 formatter = proxyApi.formatters[specifier];
2559
2560 if (typeof formatter === "function") {
2561 return String(formatter(spyInstance, args));
2562 } else if (!isNaN(parseInt(specifier, 10))) {
2563 return inspect(args[specifier - 1]);
2564 }
2565
2566 return `%${specifier}`;
2567 });
2568 },
2569
2570 resetHistory: function () {
2571 if (this.invoking) {
2572 var err = new Error(
2573 "Cannot reset Sinon function while invoking it. " +
2574 "Move the call to .resetHistory outside of the callback."
2575 );
2576 err.name = "InvalidResetException";
2577 throw err;
2578 }
2579
2580 this.called = false;
2581 this.notCalled = true;
2582 this.calledOnce = false;
2583 this.calledTwice = false;
2584 this.calledThrice = false;
2585 this.callCount = 0;
2586 this.firstCall = null;
2587 this.secondCall = null;
2588 this.thirdCall = null;
2589 this.lastCall = null;
2590 this.args = [];
2591 this.firstArg = null;
2592 this.lastArg = null;
2593 this.returnValues = [];
2594 this.thisValues = [];
2595 this.exceptions = [];
2596 this.callIds = [];
2597 this.errorsWithCallStack = [];
2598
2599 if (this.fakes) {
2600 forEach(this.fakes, function (fake) {
2601 fake.resetHistory();
2602 });
2603 }
2604
2605 return this;
2606 },
2607};
2608
2609var delegateToCalls = proxyCallUtil.delegateToCalls;
2610delegateToCalls(proxyApi, "calledOn", true);
2611delegateToCalls(proxyApi, "alwaysCalledOn", false, "calledOn");
2612delegateToCalls(proxyApi, "calledWith", true);
2613delegateToCalls(
2614 proxyApi,
2615 "calledOnceWith",
2616 true,
2617 "calledWith",
2618 false,
2619 undefined,
2620 1
2621);
2622delegateToCalls(proxyApi, "calledWithMatch", true);
2623delegateToCalls(proxyApi, "alwaysCalledWith", false, "calledWith");
2624delegateToCalls(proxyApi, "alwaysCalledWithMatch", false, "calledWithMatch");
2625delegateToCalls(proxyApi, "calledWithExactly", true);
2626delegateToCalls(
2627 proxyApi,
2628 "calledOnceWithExactly",
2629 true,
2630 "calledWithExactly",
2631 false,
2632 undefined,
2633 1
2634);
2635delegateToCalls(
2636 proxyApi,
2637 "calledOnceWithMatch",
2638 true,
2639 "calledWithMatch",
2640 false,
2641 undefined,
2642 1
2643);
2644delegateToCalls(
2645 proxyApi,
2646 "alwaysCalledWithExactly",
2647 false,
2648 "calledWithExactly"
2649);
2650delegateToCalls(
2651 proxyApi,
2652 "neverCalledWith",
2653 false,
2654 "notCalledWith",
2655 false,
2656 function () {
2657 return true;
2658 }
2659);
2660delegateToCalls(
2661 proxyApi,
2662 "neverCalledWithMatch",
2663 false,
2664 "notCalledWithMatch",
2665 false,
2666 function () {
2667 return true;
2668 }
2669);
2670delegateToCalls(proxyApi, "threw", true);
2671delegateToCalls(proxyApi, "alwaysThrew", false, "threw");
2672delegateToCalls(proxyApi, "returned", true);
2673delegateToCalls(proxyApi, "alwaysReturned", false, "returned");
2674delegateToCalls(proxyApi, "calledWithNew", true);
2675delegateToCalls(proxyApi, "alwaysCalledWithNew", false, "calledWithNew");
2676
2677function createProxy(func, originalFunc) {
2678 var proxy = wrapFunction(func, originalFunc);
2679
2680 // Inherit function properties:
2681 extend(proxy, func);
2682
2683 proxy.prototype = func.prototype;
2684
2685 extend.nonEnum(proxy, proxyApi);
2686
2687 return proxy;
2688}
2689
2690function wrapFunction(func, originalFunc) {
2691 var arity = originalFunc.length;
2692 var p;
2693 // Do not change this to use an eval. Projects that depend on sinon block the use of eval.
2694 // ref: https://github.com/sinonjs/sinon/issues/710
2695 switch (arity) {
2696 /*eslint-disable no-unused-vars, max-len*/
2697 case 0:
2698 p = function proxy() {
2699 return p.invoke(func, this, slice(arguments));
2700 };
2701 break;
2702 case 1:
2703 p = function proxy(a) {
2704 return p.invoke(func, this, slice(arguments));
2705 };
2706 break;
2707 case 2:
2708 p = function proxy(a, b) {
2709 return p.invoke(func, this, slice(arguments));
2710 };
2711 break;
2712 case 3:
2713 p = function proxy(a, b, c) {
2714 return p.invoke(func, this, slice(arguments));
2715 };
2716 break;
2717 case 4:
2718 p = function proxy(a, b, c, d) {
2719 return p.invoke(func, this, slice(arguments));
2720 };
2721 break;
2722 case 5:
2723 p = function proxy(a, b, c, d, e) {
2724 return p.invoke(func, this, slice(arguments));
2725 };
2726 break;
2727 case 6:
2728 p = function proxy(a, b, c, d, e, f) {
2729 return p.invoke(func, this, slice(arguments));
2730 };
2731 break;
2732 case 7:
2733 p = function proxy(a, b, c, d, e, f, g) {
2734 return p.invoke(func, this, slice(arguments));
2735 };
2736 break;
2737 case 8:
2738 p = function proxy(a, b, c, d, e, f, g, h) {
2739 return p.invoke(func, this, slice(arguments));
2740 };
2741 break;
2742 case 9:
2743 p = function proxy(a, b, c, d, e, f, g, h, i) {
2744 return p.invoke(func, this, slice(arguments));
2745 };
2746 break;
2747 case 10:
2748 p = function proxy(a, b, c, d, e, f, g, h, i, j) {
2749 return p.invoke(func, this, slice(arguments));
2750 };
2751 break;
2752 case 11:
2753 p = function proxy(a, b, c, d, e, f, g, h, i, j, k) {
2754 return p.invoke(func, this, slice(arguments));
2755 };
2756 break;
2757 case 12:
2758 p = function proxy(a, b, c, d, e, f, g, h, i, j, k, l) {
2759 return p.invoke(func, this, slice(arguments));
2760 };
2761 break;
2762 default:
2763 p = function proxy() {
2764 return p.invoke(func, this, slice(arguments));
2765 };
2766 break;
2767 /*eslint-enable*/
2768 }
2769 var nameDescriptor = Object.getOwnPropertyDescriptor(originalFunc, "name");
2770 if (nameDescriptor && nameDescriptor.configurable) {
2771 // IE 11 functions don't have a name.
2772 // Safari 9 has names that are not configurable.
2773 Object.defineProperty(p, "name", nameDescriptor);
2774 }
2775 extend.nonEnum(p, {
2776 isSinonProxy: true,
2777
2778 called: false,
2779 notCalled: true,
2780 calledOnce: false,
2781 calledTwice: false,
2782 calledThrice: false,
2783 callCount: 0,
2784 firstCall: null,
2785 firstArg: null,
2786 secondCall: null,
2787 thirdCall: null,
2788 lastCall: null,
2789 lastArg: null,
2790 args: [],
2791 returnValues: [],
2792 thisValues: [],
2793 exceptions: [],
2794 callIds: [],
2795 errorsWithCallStack: [],
2796 });
2797 return p;
2798}
2799
2800module.exports = createProxy;
2801
2802},{"./proxy-call":14,"./proxy-call-util":13,"./proxy-invoke":15,"./spy-formatters":19,"./util/core/extend":25,"./util/core/function-to-string":26,"@sinonjs/commons":46,"util":130}],17:[function(require,module,exports){
2803"use strict";
2804
2805var walkObject = require("./util/core/walk-object");
2806
2807function filter(object, property) {
2808 return object[property].restore && object[property].restore.sinon;
2809}
2810
2811function restore(object, property) {
2812 object[property].restore();
2813}
2814
2815function restoreObject(object) {
2816 return walkObject(restore, object, filter);
2817}
2818
2819module.exports = restoreObject;
2820
2821},{"./util/core/walk-object":36}],18:[function(require,module,exports){
2822"use strict";
2823
2824var arrayProto = require("@sinonjs/commons").prototypes.array;
2825var logger = require("@sinonjs/commons").deprecated;
2826var collectOwnMethods = require("./collect-own-methods");
2827var getPropertyDescriptor = require("./util/core/get-property-descriptor");
2828var isPropertyConfigurable = require("./util/core/is-property-configurable");
2829var match = require("@sinonjs/samsam").createMatcher;
2830var sinonAssert = require("./assert");
2831var sinonClock = require("./util/fake-timers");
2832var sinonMock = require("./mock");
2833var sinonSpy = require("./spy");
2834var sinonStub = require("./stub");
2835var sinonFake = require("./fake");
2836var valueToString = require("@sinonjs/commons").valueToString;
2837var fakeServer = require("nise").fakeServer;
2838var fakeXhr = require("nise").fakeXhr;
2839var usePromiseLibrary = require("./util/core/use-promise-library");
2840
2841var DEFAULT_LEAK_THRESHOLD = 10000;
2842
2843var filter = arrayProto.filter;
2844var forEach = arrayProto.forEach;
2845var push = arrayProto.push;
2846var reverse = arrayProto.reverse;
2847
2848function applyOnEach(fakes, method) {
2849 var matchingFakes = filter(fakes, function (fake) {
2850 return typeof fake[method] === "function";
2851 });
2852
2853 forEach(matchingFakes, function (fake) {
2854 fake[method]();
2855 });
2856}
2857
2858function Sandbox() {
2859 var sandbox = this;
2860 var fakeRestorers = [];
2861 var promiseLib;
2862
2863 var collection = [];
2864 var loggedLeakWarning = false;
2865 sandbox.leakThreshold = DEFAULT_LEAK_THRESHOLD;
2866
2867 function addToCollection(object) {
2868 if (
2869 push(collection, object) > sandbox.leakThreshold &&
2870 !loggedLeakWarning
2871 ) {
2872 // eslint-disable-next-line no-console
2873 logger.printWarning(
2874 "Potential memory leak detected; be sure to call restore() to clean up your sandbox. To suppress this warning, modify the leakThreshold property of your sandbox."
2875 );
2876 loggedLeakWarning = true;
2877 }
2878 }
2879
2880 sandbox.assert = sinonAssert.createAssertObject();
2881
2882 sandbox.serverPrototype = fakeServer;
2883
2884 // this is for testing only
2885 sandbox.getFakes = function getFakes() {
2886 return collection;
2887 };
2888
2889 // this is for testing only
2890 sandbox.getRestorers = function () {
2891 return fakeRestorers;
2892 };
2893
2894 sandbox.createStubInstance = function createStubInstance() {
2895 var stubbed = sinonStub.createStubInstance.apply(null, arguments);
2896
2897 var ownMethods = collectOwnMethods(stubbed);
2898
2899 forEach(ownMethods, function (method) {
2900 addToCollection(method);
2901 });
2902
2903 usePromiseLibrary(promiseLib, ownMethods);
2904
2905 return stubbed;
2906 };
2907
2908 sandbox.inject = function inject(obj) {
2909 obj.spy = function () {
2910 return sandbox.spy.apply(null, arguments);
2911 };
2912
2913 obj.stub = function () {
2914 return sandbox.stub.apply(null, arguments);
2915 };
2916
2917 obj.mock = function () {
2918 return sandbox.mock.apply(null, arguments);
2919 };
2920
2921 obj.createStubInstance = function () {
2922 return sandbox.createStubInstance.apply(sandbox, arguments);
2923 };
2924
2925 obj.fake = function () {
2926 return sandbox.fake.apply(null, arguments);
2927 };
2928
2929 obj.replace = function () {
2930 return sandbox.replace.apply(null, arguments);
2931 };
2932
2933 obj.replaceSetter = function () {
2934 return sandbox.replaceSetter.apply(null, arguments);
2935 };
2936
2937 obj.replaceGetter = function () {
2938 return sandbox.replaceGetter.apply(null, arguments);
2939 };
2940
2941 if (sandbox.clock) {
2942 obj.clock = sandbox.clock;
2943 }
2944
2945 if (sandbox.server) {
2946 obj.server = sandbox.server;
2947 obj.requests = sandbox.server.requests;
2948 }
2949
2950 obj.match = match;
2951
2952 return obj;
2953 };
2954
2955 sandbox.mock = function mock() {
2956 var m = sinonMock.apply(null, arguments);
2957
2958 addToCollection(m);
2959 usePromiseLibrary(promiseLib, m);
2960
2961 return m;
2962 };
2963
2964 sandbox.reset = function reset() {
2965 applyOnEach(collection, "reset");
2966 applyOnEach(collection, "resetHistory");
2967 };
2968
2969 sandbox.resetBehavior = function resetBehavior() {
2970 applyOnEach(collection, "resetBehavior");
2971 };
2972
2973 sandbox.resetHistory = function resetHistory() {
2974 function privateResetHistory(f) {
2975 var method = f.resetHistory || f.reset;
2976 if (method) {
2977 method.call(f);
2978 }
2979 }
2980
2981 forEach(collection, function (fake) {
2982 if (typeof fake === "function") {
2983 privateResetHistory(fake);
2984 return;
2985 }
2986
2987 var methods = [];
2988 if (fake.get) {
2989 push(methods, fake.get);
2990 }
2991
2992 if (fake.set) {
2993 push(methods, fake.set);
2994 }
2995
2996 forEach(methods, privateResetHistory);
2997 });
2998 };
2999
3000 sandbox.restore = function restore() {
3001 if (arguments.length) {
3002 throw new Error(
3003 "sandbox.restore() does not take any parameters. Perhaps you meant stub.restore()"
3004 );
3005 }
3006
3007 reverse(collection);
3008 applyOnEach(collection, "restore");
3009 collection = [];
3010
3011 forEach(fakeRestorers, function (restorer) {
3012 restorer();
3013 });
3014 fakeRestorers = [];
3015
3016 sandbox.restoreContext();
3017 };
3018
3019 sandbox.restoreContext = function restoreContext() {
3020 var injectedKeys = sandbox.injectedKeys;
3021 var injectInto = sandbox.injectInto;
3022
3023 if (!injectedKeys) {
3024 return;
3025 }
3026
3027 forEach(injectedKeys, function (injectedKey) {
3028 delete injectInto[injectedKey];
3029 });
3030
3031 injectedKeys = [];
3032 };
3033
3034 function getFakeRestorer(object, property) {
3035 var descriptor = getPropertyDescriptor(object, property);
3036
3037 function restorer() {
3038 if (descriptor.isOwn) {
3039 Object.defineProperty(object, property, descriptor);
3040 } else {
3041 delete object[property];
3042 }
3043 }
3044 restorer.object = object;
3045 restorer.property = property;
3046 return restorer;
3047 }
3048
3049 function verifyNotReplaced(object, property) {
3050 forEach(fakeRestorers, function (fakeRestorer) {
3051 if (
3052 fakeRestorer.object === object &&
3053 fakeRestorer.property === property
3054 ) {
3055 throw new TypeError(
3056 `Attempted to replace ${property} which is already replaced`
3057 );
3058 }
3059 });
3060 }
3061
3062 sandbox.replace = function replace(object, property, replacement) {
3063 var descriptor = getPropertyDescriptor(object, property);
3064
3065 if (typeof descriptor === "undefined") {
3066 throw new TypeError(
3067 `Cannot replace non-existent property ${valueToString(
3068 property
3069 )}`
3070 );
3071 }
3072
3073 if (typeof replacement === "undefined") {
3074 throw new TypeError("Expected replacement argument to be defined");
3075 }
3076
3077 if (typeof descriptor.get === "function") {
3078 throw new Error("Use sandbox.replaceGetter for replacing getters");
3079 }
3080
3081 if (typeof descriptor.set === "function") {
3082 throw new Error("Use sandbox.replaceSetter for replacing setters");
3083 }
3084
3085 if (typeof object[property] !== typeof replacement) {
3086 throw new TypeError(
3087 `Cannot replace ${typeof object[
3088 property
3089 ]} with ${typeof replacement}`
3090 );
3091 }
3092
3093 verifyNotReplaced(object, property);
3094
3095 // store a function for restoring the replaced property
3096 push(fakeRestorers, getFakeRestorer(object, property));
3097
3098 object[property] = replacement;
3099
3100 return replacement;
3101 };
3102
3103 sandbox.replaceGetter = function replaceGetter(
3104 object,
3105 property,
3106 replacement
3107 ) {
3108 var descriptor = getPropertyDescriptor(object, property);
3109
3110 if (typeof descriptor === "undefined") {
3111 throw new TypeError(
3112 `Cannot replace non-existent property ${valueToString(
3113 property
3114 )}`
3115 );
3116 }
3117
3118 if (typeof replacement !== "function") {
3119 throw new TypeError(
3120 "Expected replacement argument to be a function"
3121 );
3122 }
3123
3124 if (typeof descriptor.get !== "function") {
3125 throw new Error("`object.property` is not a getter");
3126 }
3127
3128 verifyNotReplaced(object, property);
3129
3130 // store a function for restoring the replaced property
3131 push(fakeRestorers, getFakeRestorer(object, property));
3132
3133 Object.defineProperty(object, property, {
3134 get: replacement,
3135 configurable: isPropertyConfigurable(object, property),
3136 });
3137
3138 return replacement;
3139 };
3140
3141 sandbox.replaceSetter = function replaceSetter(
3142 object,
3143 property,
3144 replacement
3145 ) {
3146 var descriptor = getPropertyDescriptor(object, property);
3147
3148 if (typeof descriptor === "undefined") {
3149 throw new TypeError(
3150 `Cannot replace non-existent property ${valueToString(
3151 property
3152 )}`
3153 );
3154 }
3155
3156 if (typeof replacement !== "function") {
3157 throw new TypeError(
3158 "Expected replacement argument to be a function"
3159 );
3160 }
3161
3162 if (typeof descriptor.set !== "function") {
3163 throw new Error("`object.property` is not a setter");
3164 }
3165
3166 verifyNotReplaced(object, property);
3167
3168 // store a function for restoring the replaced property
3169 push(fakeRestorers, getFakeRestorer(object, property));
3170
3171 // eslint-disable-next-line accessor-pairs
3172 Object.defineProperty(object, property, {
3173 set: replacement,
3174 configurable: isPropertyConfigurable(object, property),
3175 });
3176
3177 return replacement;
3178 };
3179
3180 function commonPostInitSetup(args, spy) {
3181 var object = args[0];
3182 var property = args[1];
3183
3184 var isSpyingOnEntireObject =
3185 typeof property === "undefined" && typeof object === "object";
3186
3187 if (isSpyingOnEntireObject) {
3188 var ownMethods = collectOwnMethods(spy);
3189
3190 forEach(ownMethods, function (method) {
3191 addToCollection(method);
3192 });
3193
3194 usePromiseLibrary(promiseLib, ownMethods);
3195 } else {
3196 addToCollection(spy);
3197 usePromiseLibrary(promiseLib, spy);
3198 }
3199
3200 return spy;
3201 }
3202
3203 sandbox.spy = function spy() {
3204 var createdSpy = sinonSpy.apply(sinonSpy, arguments);
3205 return commonPostInitSetup(arguments, createdSpy);
3206 };
3207
3208 sandbox.stub = function stub() {
3209 var createdStub = sinonStub.apply(sinonStub, arguments);
3210 return commonPostInitSetup(arguments, createdStub);
3211 };
3212
3213 // eslint-disable-next-line no-unused-vars
3214 sandbox.fake = function fake(f) {
3215 var s = sinonFake.apply(sinonFake, arguments);
3216
3217 addToCollection(s);
3218
3219 return s;
3220 };
3221
3222 forEach(Object.keys(sinonFake), function (key) {
3223 var fakeBehavior = sinonFake[key];
3224 if (typeof fakeBehavior === "function") {
3225 sandbox.fake[key] = function () {
3226 var s = fakeBehavior.apply(fakeBehavior, arguments);
3227
3228 addToCollection(s);
3229
3230 return s;
3231 };
3232 }
3233 });
3234
3235 sandbox.useFakeTimers = function useFakeTimers(args) {
3236 var clock = sinonClock.useFakeTimers.call(null, args);
3237
3238 sandbox.clock = clock;
3239 addToCollection(clock);
3240
3241 return clock;
3242 };
3243
3244 sandbox.verify = function verify() {
3245 applyOnEach(collection, "verify");
3246 };
3247
3248 sandbox.verifyAndRestore = function verifyAndRestore() {
3249 var exception;
3250
3251 try {
3252 sandbox.verify();
3253 } catch (e) {
3254 exception = e;
3255 }
3256
3257 sandbox.restore();
3258
3259 if (exception) {
3260 throw exception;
3261 }
3262 };
3263
3264 sandbox.useFakeServer = function useFakeServer() {
3265 var proto = sandbox.serverPrototype || fakeServer;
3266
3267 if (!proto || !proto.create) {
3268 return null;
3269 }
3270
3271 sandbox.server = proto.create();
3272 addToCollection(sandbox.server);
3273
3274 return sandbox.server;
3275 };
3276
3277 sandbox.useFakeXMLHttpRequest = function useFakeXMLHttpRequest() {
3278 var xhr = fakeXhr.useFakeXMLHttpRequest();
3279 addToCollection(xhr);
3280 return xhr;
3281 };
3282
3283 sandbox.usingPromise = function usingPromise(promiseLibrary) {
3284 promiseLib = promiseLibrary;
3285 collection.promiseLibrary = promiseLibrary;
3286
3287 return sandbox;
3288 };
3289}
3290
3291Sandbox.prototype.match = match;
3292
3293module.exports = Sandbox;
3294
3295},{"./assert":3,"./collect-own-methods":5,"./fake":9,"./mock":11,"./spy":20,"./stub":21,"./util/core/get-property-descriptor":28,"./util/core/is-property-configurable":31,"./util/core/use-promise-library":35,"./util/fake-timers":39,"@sinonjs/commons":46,"@sinonjs/samsam":105,"nise":145}],19:[function(require,module,exports){
3296"use strict";
3297
3298var arrayProto = require("@sinonjs/commons").prototypes.array;
3299var color = require("./color");
3300var match = require("@sinonjs/samsam").createMatcher;
3301var timesInWords = require("./util/core/times-in-words");
3302var inspect = require("util").inspect;
3303var jsDiff = require("diff");
3304
3305var join = arrayProto.join;
3306var map = arrayProto.map;
3307var push = arrayProto.push;
3308var slice = arrayProto.slice;
3309
3310function colorSinonMatchText(matcher, calledArg, calledArgMessage) {
3311 var calledArgumentMessage = calledArgMessage;
3312 if (!matcher.test(calledArg)) {
3313 matcher.message = color.red(matcher.message);
3314 if (calledArgumentMessage) {
3315 calledArgumentMessage = color.green(calledArgumentMessage);
3316 }
3317 }
3318 return `${calledArgumentMessage} ${matcher.message}`;
3319}
3320
3321function colorDiffText(diff) {
3322 var objects = map(diff, function (part) {
3323 var text = part.value;
3324 if (part.added) {
3325 text = color.green(text);
3326 } else if (part.removed) {
3327 text = color.red(text);
3328 }
3329 if (diff.length === 2) {
3330 text += " "; // format simple diffs
3331 }
3332 return text;
3333 });
3334 return join(objects, "");
3335}
3336
3337function quoteStringValue(value) {
3338 if (typeof value === "string") {
3339 return JSON.stringify(value);
3340 }
3341 return value;
3342}
3343
3344module.exports = {
3345 c: function (spyInstance) {
3346 return timesInWords(spyInstance.callCount);
3347 },
3348
3349 n: function (spyInstance) {
3350 // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods
3351 return spyInstance.toString();
3352 },
3353
3354 D: function (spyInstance, args) {
3355 var message = "";
3356
3357 for (var i = 0, l = spyInstance.callCount; i < l; ++i) {
3358 // describe multiple calls
3359 if (l > 1) {
3360 message += `\nCall ${i + 1}:`;
3361 }
3362 var calledArgs = spyInstance.getCall(i).args;
3363 var expectedArgs = slice(args);
3364
3365 for (
3366 var j = 0;
3367 j < calledArgs.length || j < expectedArgs.length;
3368 ++j
3369 ) {
3370 var calledArg = calledArgs[j];
3371 var expectedArg = expectedArgs[j];
3372 if (calledArg) {
3373 calledArg = quoteStringValue(calledArg);
3374 }
3375
3376 if (expectedArg) {
3377 expectedArg = quoteStringValue(expectedArg);
3378 }
3379
3380 message += "\n";
3381
3382 var calledArgMessage =
3383 j < calledArgs.length ? inspect(calledArg) : "";
3384 if (match.isMatcher(expectedArg)) {
3385 message += colorSinonMatchText(
3386 expectedArg,
3387 calledArg,
3388 calledArgMessage
3389 );
3390 } else {
3391 var expectedArgMessage =
3392 j < expectedArgs.length ? inspect(expectedArg) : "";
3393 var diff = jsDiff.diffJson(
3394 calledArgMessage,
3395 expectedArgMessage
3396 );
3397 message += colorDiffText(diff);
3398 }
3399 }
3400 }
3401
3402 return message;
3403 },
3404
3405 C: function (spyInstance) {
3406 var calls = [];
3407
3408 for (var i = 0, l = spyInstance.callCount; i < l; ++i) {
3409 // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods
3410 var stringifiedCall = ` ${spyInstance.getCall(i).toString()}`;
3411 if (/\n/.test(calls[i - 1])) {
3412 stringifiedCall = `\n${stringifiedCall}`;
3413 }
3414 push(calls, stringifiedCall);
3415 }
3416
3417 return calls.length > 0 ? `\n${join(calls, "\n")}` : "";
3418 },
3419
3420 t: function (spyInstance) {
3421 var objects = [];
3422
3423 for (var i = 0, l = spyInstance.callCount; i < l; ++i) {
3424 push(objects, inspect(spyInstance.thisValues[i]));
3425 }
3426
3427 return join(objects, ", ");
3428 },
3429
3430 "*": function (spyInstance, args) {
3431 return join(
3432 map(args, function (arg) {
3433 return inspect(arg);
3434 }),
3435 ", "
3436 );
3437 },
3438};
3439
3440},{"./color":6,"./util/core/times-in-words":34,"@sinonjs/commons":46,"@sinonjs/samsam":105,"diff":131,"util":130}],20:[function(require,module,exports){
3441"use strict";
3442
3443var arrayProto = require("@sinonjs/commons").prototypes.array;
3444var createProxy = require("./proxy");
3445var extend = require("./util/core/extend");
3446var functionName = require("@sinonjs/commons").functionName;
3447var getPropertyDescriptor = require("./util/core/get-property-descriptor");
3448var deepEqual = require("@sinonjs/samsam").deepEqual;
3449var isEsModule = require("./util/core/is-es-module");
3450var proxyCallUtil = require("./proxy-call-util");
3451var walkObject = require("./util/core/walk-object");
3452var wrapMethod = require("./util/core/wrap-method");
3453var valueToString = require("@sinonjs/commons").valueToString;
3454
3455/* cache references to library methods so that they also can be stubbed without problems */
3456var forEach = arrayProto.forEach;
3457var pop = arrayProto.pop;
3458var push = arrayProto.push;
3459var slice = arrayProto.slice;
3460var filter = Array.prototype.filter;
3461
3462var uuid = 0;
3463
3464function matches(fake, args, strict) {
3465 var margs = fake.matchingArguments;
3466 if (
3467 margs.length <= args.length &&
3468 deepEqual(slice(args, 0, margs.length), margs)
3469 ) {
3470 return !strict || margs.length === args.length;
3471 }
3472 return false;
3473}
3474
3475// Public API
3476var spyApi = {
3477 withArgs: function () {
3478 var args = slice(arguments);
3479 var matching = pop(this.matchingFakes(args, true));
3480 if (matching) {
3481 return matching;
3482 }
3483
3484 var original = this;
3485 var fake = this.instantiateFake();
3486 fake.matchingArguments = args;
3487 fake.parent = this;
3488 push(this.fakes, fake);
3489
3490 fake.withArgs = function () {
3491 return original.withArgs.apply(original, arguments);
3492 };
3493
3494 forEach(original.args, function (arg, i) {
3495 if (!matches(fake, arg)) {
3496 return;
3497 }
3498
3499 proxyCallUtil.incrementCallCount(fake);
3500 push(fake.thisValues, original.thisValues[i]);
3501 push(fake.args, arg);
3502 push(fake.returnValues, original.returnValues[i]);
3503 push(fake.exceptions, original.exceptions[i]);
3504 push(fake.callIds, original.callIds[i]);
3505 });
3506
3507 proxyCallUtil.createCallProperties(fake);
3508
3509 return fake;
3510 },
3511
3512 // Override proxy default implementation
3513 matchingFakes: function (args, strict) {
3514 return filter.call(this.fakes, function (fake) {
3515 return matches(fake, args, strict);
3516 });
3517 },
3518};
3519
3520/* eslint-disable @sinonjs/no-prototype-methods/no-prototype-methods */
3521var delegateToCalls = proxyCallUtil.delegateToCalls;
3522delegateToCalls(spyApi, "callArg", false, "callArgWith", true, function () {
3523 throw new Error(
3524 `${this.toString()} cannot call arg since it was not yet invoked.`
3525 );
3526});
3527spyApi.callArgWith = spyApi.callArg;
3528delegateToCalls(spyApi, "callArgOn", false, "callArgOnWith", true, function () {
3529 throw new Error(
3530 `${this.toString()} cannot call arg since it was not yet invoked.`
3531 );
3532});
3533spyApi.callArgOnWith = spyApi.callArgOn;
3534delegateToCalls(spyApi, "throwArg", false, "throwArg", false, function () {
3535 throw new Error(
3536 `${this.toString()} cannot throw arg since it was not yet invoked.`
3537 );
3538});
3539delegateToCalls(spyApi, "yield", false, "yield", true, function () {
3540 throw new Error(
3541 `${this.toString()} cannot yield since it was not yet invoked.`
3542 );
3543});
3544// "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
3545spyApi.invokeCallback = spyApi.yield;
3546delegateToCalls(spyApi, "yieldOn", false, "yieldOn", true, function () {
3547 throw new Error(
3548 `${this.toString()} cannot yield since it was not yet invoked.`
3549 );
3550});
3551delegateToCalls(spyApi, "yieldTo", false, "yieldTo", true, function (property) {
3552 throw new Error(
3553 `${this.toString()} cannot yield to '${valueToString(
3554 property
3555 )}' since it was not yet invoked.`
3556 );
3557});
3558delegateToCalls(
3559 spyApi,
3560 "yieldToOn",
3561 false,
3562 "yieldToOn",
3563 true,
3564 function (property) {
3565 throw new Error(
3566 `${this.toString()} cannot yield to '${valueToString(
3567 property
3568 )}' since it was not yet invoked.`
3569 );
3570 }
3571);
3572
3573function createSpy(func) {
3574 var name;
3575 var funk = func;
3576
3577 if (typeof funk !== "function") {
3578 funk = function () {
3579 return;
3580 };
3581 } else {
3582 name = functionName(funk);
3583 }
3584
3585 var proxy = createProxy(funk, funk);
3586
3587 // Inherit spy API:
3588 extend.nonEnum(proxy, spyApi);
3589 extend.nonEnum(proxy, {
3590 displayName: name || "spy",
3591 fakes: [],
3592 instantiateFake: createSpy,
3593 id: `spy#${uuid++}`,
3594 });
3595 return proxy;
3596}
3597
3598function spy(object, property, types) {
3599 var descriptor, methodDesc;
3600
3601 if (isEsModule(object)) {
3602 throw new TypeError("ES Modules cannot be spied");
3603 }
3604
3605 if (!property && typeof object === "function") {
3606 return createSpy(object);
3607 }
3608
3609 if (!property && typeof object === "object") {
3610 return walkObject(spy, object);
3611 }
3612
3613 if (!object && !property) {
3614 return createSpy(function () {
3615 return;
3616 });
3617 }
3618
3619 if (!types) {
3620 return wrapMethod(object, property, createSpy(object[property]));
3621 }
3622
3623 descriptor = {};
3624 methodDesc = getPropertyDescriptor(object, property);
3625
3626 forEach(types, function (type) {
3627 descriptor[type] = createSpy(methodDesc[type]);
3628 });
3629
3630 return wrapMethod(object, property, descriptor);
3631}
3632
3633extend(spy, spyApi);
3634module.exports = spy;
3635
3636},{"./proxy":16,"./proxy-call-util":13,"./util/core/extend":25,"./util/core/get-property-descriptor":28,"./util/core/is-es-module":29,"./util/core/walk-object":36,"./util/core/wrap-method":38,"@sinonjs/commons":46,"@sinonjs/samsam":105}],21:[function(require,module,exports){
3637"use strict";
3638
3639var arrayProto = require("@sinonjs/commons").prototypes.array;
3640var behavior = require("./behavior");
3641var behaviors = require("./default-behaviors");
3642var createProxy = require("./proxy");
3643var functionName = require("@sinonjs/commons").functionName;
3644var hasOwnProperty =
3645 require("@sinonjs/commons").prototypes.object.hasOwnProperty;
3646var isNonExistentProperty = require("./util/core/is-non-existent-property");
3647var spy = require("./spy");
3648var extend = require("./util/core/extend");
3649var getPropertyDescriptor = require("./util/core/get-property-descriptor");
3650var isEsModule = require("./util/core/is-es-module");
3651var wrapMethod = require("./util/core/wrap-method");
3652var throwOnFalsyObject = require("./throw-on-falsy-object");
3653var valueToString = require("@sinonjs/commons").valueToString;
3654var walkObject = require("./util/core/walk-object");
3655
3656var forEach = arrayProto.forEach;
3657var pop = arrayProto.pop;
3658var slice = arrayProto.slice;
3659var sort = arrayProto.sort;
3660
3661var uuid = 0;
3662
3663function createStub(originalFunc) {
3664 var proxy;
3665
3666 function functionStub() {
3667 var args = slice(arguments);
3668 var matchings = proxy.matchingFakes(args);
3669
3670 var fnStub =
3671 pop(
3672 sort(matchings, function (a, b) {
3673 return (
3674 a.matchingArguments.length - b.matchingArguments.length
3675 );
3676 })
3677 ) || proxy;
3678 return getCurrentBehavior(fnStub).invoke(this, arguments);
3679 }
3680
3681 proxy = createProxy(functionStub, originalFunc || functionStub);
3682 // Inherit spy API:
3683 extend.nonEnum(proxy, spy);
3684 // Inherit stub API:
3685 extend.nonEnum(proxy, stub);
3686
3687 var name = originalFunc ? functionName(originalFunc) : null;
3688 extend.nonEnum(proxy, {
3689 fakes: [],
3690 instantiateFake: createStub,
3691 displayName: name || "stub",
3692 defaultBehavior: null,
3693 behaviors: [],
3694 id: `stub#${uuid++}`,
3695 });
3696
3697 return proxy;
3698}
3699
3700function stub(object, property) {
3701 if (arguments.length > 2) {
3702 throw new TypeError(
3703 "stub(obj, 'meth', fn) has been removed, see documentation"
3704 );
3705 }
3706
3707 if (isEsModule(object)) {
3708 throw new TypeError("ES Modules cannot be stubbed");
3709 }
3710
3711 throwOnFalsyObject.apply(null, arguments);
3712
3713 if (isNonExistentProperty(object, property)) {
3714 throw new TypeError(
3715 `Cannot stub non-existent property ${valueToString(property)}`
3716 );
3717 }
3718
3719 var actualDescriptor = getPropertyDescriptor(object, property);
3720
3721 assertValidPropertyDescriptor(actualDescriptor, property);
3722
3723 var isObjectOrFunction =
3724 typeof object === "object" || typeof object === "function";
3725 var isStubbingEntireObject =
3726 typeof property === "undefined" && isObjectOrFunction;
3727 var isCreatingNewStub = !object && typeof property === "undefined";
3728 var isStubbingNonFuncProperty =
3729 isObjectOrFunction &&
3730 typeof property !== "undefined" &&
3731 (typeof actualDescriptor === "undefined" ||
3732 typeof actualDescriptor.value !== "function");
3733
3734 if (isStubbingEntireObject) {
3735 return walkObject(stub, object);
3736 }
3737
3738 if (isCreatingNewStub) {
3739 return createStub();
3740 }
3741
3742 var func =
3743 typeof actualDescriptor.value === "function"
3744 ? actualDescriptor.value
3745 : null;
3746 var s = createStub(func);
3747
3748 extend.nonEnum(s, {
3749 rootObj: object,
3750 propName: property,
3751 shadowsPropOnPrototype: !actualDescriptor.isOwn,
3752 restore: function restore() {
3753 if (actualDescriptor !== undefined && actualDescriptor.isOwn) {
3754 Object.defineProperty(object, property, actualDescriptor);
3755 return;
3756 }
3757
3758 delete object[property];
3759 },
3760 });
3761
3762 return isStubbingNonFuncProperty ? s : wrapMethod(object, property, s);
3763}
3764
3765stub.createStubInstance = function (constructor, overrides) {
3766 if (typeof constructor !== "function") {
3767 throw new TypeError("The constructor should be a function.");
3768 }
3769
3770 // eslint-disable-next-line no-empty-function
3771 const noop = () => {};
3772 const defaultNoOpInstance = Object.create(constructor.prototype);
3773 walkObject((obj, prop) => (obj[prop] = noop), defaultNoOpInstance);
3774
3775 const stubbedObject = stub(defaultNoOpInstance);
3776
3777 forEach(Object.keys(overrides || {}), function (propertyName) {
3778 if (propertyName in stubbedObject) {
3779 var value = overrides[propertyName];
3780 if (value && value.createStubInstance) {
3781 stubbedObject[propertyName] = value;
3782 } else {
3783 stubbedObject[propertyName].returns(value);
3784 }
3785 } else {
3786 throw new Error(
3787 `Cannot stub ${propertyName}. Property does not exist!`
3788 );
3789 }
3790 });
3791 return stubbedObject;
3792};
3793
3794function assertValidPropertyDescriptor(descriptor, property) {
3795 if (!descriptor || !property) {
3796 return;
3797 }
3798 if (!descriptor.configurable && !descriptor.writable) {
3799 throw new TypeError(
3800 `Descriptor for property ${property} is non-configurable and non-writable`
3801 );
3802 }
3803 if ((descriptor.get || descriptor.set) && !descriptor.configurable) {
3804 throw new TypeError(
3805 `Descriptor for accessor property ${property} is non-configurable`
3806 );
3807 }
3808 if (isDataDescriptor(descriptor) && !descriptor.writable) {
3809 throw new TypeError(
3810 `Descriptor for data property ${property} is non-writable`
3811 );
3812 }
3813}
3814
3815function isDataDescriptor(descriptor) {
3816 return (
3817 !descriptor.value &&
3818 !descriptor.writable &&
3819 !descriptor.set &&
3820 !descriptor.get
3821 );
3822}
3823
3824/*eslint-disable no-use-before-define*/
3825function getParentBehaviour(stubInstance) {
3826 return stubInstance.parent && getCurrentBehavior(stubInstance.parent);
3827}
3828
3829function getDefaultBehavior(stubInstance) {
3830 return (
3831 stubInstance.defaultBehavior ||
3832 getParentBehaviour(stubInstance) ||
3833 behavior.create(stubInstance)
3834 );
3835}
3836
3837function getCurrentBehavior(stubInstance) {
3838 var currentBehavior = stubInstance.behaviors[stubInstance.callCount - 1];
3839 return currentBehavior && currentBehavior.isPresent()
3840 ? currentBehavior
3841 : getDefaultBehavior(stubInstance);
3842}
3843/*eslint-enable no-use-before-define*/
3844
3845var proto = {
3846 resetBehavior: function () {
3847 this.defaultBehavior = null;
3848 this.behaviors = [];
3849
3850 delete this.returnValue;
3851 delete this.returnArgAt;
3852 delete this.throwArgAt;
3853 delete this.resolveArgAt;
3854 delete this.fakeFn;
3855 this.returnThis = false;
3856 this.resolveThis = false;
3857
3858 forEach(this.fakes, function (fake) {
3859 fake.resetBehavior();
3860 });
3861 },
3862
3863 reset: function () {
3864 this.resetHistory();
3865 this.resetBehavior();
3866 },
3867
3868 onCall: function onCall(index) {
3869 if (!this.behaviors[index]) {
3870 this.behaviors[index] = behavior.create(this);
3871 }
3872
3873 return this.behaviors[index];
3874 },
3875
3876 onFirstCall: function onFirstCall() {
3877 return this.onCall(0);
3878 },
3879
3880 onSecondCall: function onSecondCall() {
3881 return this.onCall(1);
3882 },
3883
3884 onThirdCall: function onThirdCall() {
3885 return this.onCall(2);
3886 },
3887
3888 withArgs: function withArgs() {
3889 var fake = spy.withArgs.apply(this, arguments);
3890 if (this.defaultBehavior && this.defaultBehavior.promiseLibrary) {
3891 fake.defaultBehavior =
3892 fake.defaultBehavior || behavior.create(fake);
3893 fake.defaultBehavior.promiseLibrary =
3894 this.defaultBehavior.promiseLibrary;
3895 }
3896 return fake;
3897 },
3898};
3899
3900forEach(Object.keys(behavior), function (method) {
3901 if (
3902 hasOwnProperty(behavior, method) &&
3903 !hasOwnProperty(proto, method) &&
3904 method !== "create" &&
3905 method !== "invoke"
3906 ) {
3907 proto[method] = behavior.createBehavior(method);
3908 }
3909});
3910
3911forEach(Object.keys(behaviors), function (method) {
3912 if (hasOwnProperty(behaviors, method) && !hasOwnProperty(proto, method)) {
3913 behavior.addBehavior(stub, method, behaviors[method]);
3914 }
3915});
3916
3917extend(stub, proto);
3918module.exports = stub;
3919
3920},{"./behavior":4,"./default-behaviors":8,"./proxy":16,"./spy":20,"./throw-on-falsy-object":22,"./util/core/extend":25,"./util/core/get-property-descriptor":28,"./util/core/is-es-module":29,"./util/core/is-non-existent-property":30,"./util/core/walk-object":36,"./util/core/wrap-method":38,"@sinonjs/commons":46}],22:[function(require,module,exports){
3921"use strict";
3922var valueToString = require("@sinonjs/commons").valueToString;
3923
3924function throwOnFalsyObject(object, property) {
3925 if (property && !object) {
3926 var type = object === null ? "null" : "undefined";
3927 throw new Error(
3928 `Trying to stub property '${valueToString(property)}' of ${type}`
3929 );
3930 }
3931}
3932
3933module.exports = throwOnFalsyObject;
3934
3935},{"@sinonjs/commons":46}],23:[function(require,module,exports){
3936"use strict";
3937
3938module.exports = {
3939 injectInto: null,
3940 properties: [
3941 "spy",
3942 "stub",
3943 "mock",
3944 "clock",
3945 "server",
3946 "requests",
3947 "fake",
3948 "replace",
3949 "replaceSetter",
3950 "replaceGetter",
3951 "createStubInstance",
3952 ],
3953 useFakeTimers: true,
3954 useFakeServer: true,
3955};
3956
3957},{}],24:[function(require,module,exports){
3958"use strict";
3959
3960var arrayProto = require("@sinonjs/commons").prototypes.array;
3961var reduce = arrayProto.reduce;
3962
3963module.exports = function exportAsyncBehaviors(behaviorMethods) {
3964 return reduce(
3965 Object.keys(behaviorMethods),
3966 function (acc, method) {
3967 // need to avoid creating another async versions of the newly added async methods
3968 if (method.match(/^(callsArg|yields)/) && !method.match(/Async/)) {
3969 acc[`${method}Async`] = function () {
3970 var result = behaviorMethods[method].apply(this, arguments);
3971 this.callbackAsync = true;
3972 return result;
3973 };
3974 }
3975 return acc;
3976 },
3977 {}
3978 );
3979};
3980
3981},{"@sinonjs/commons":46}],25:[function(require,module,exports){
3982"use strict";
3983
3984var arrayProto = require("@sinonjs/commons").prototypes.array;
3985var hasOwnProperty =
3986 require("@sinonjs/commons").prototypes.object.hasOwnProperty;
3987
3988var join = arrayProto.join;
3989var push = arrayProto.push;
3990
3991// Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
3992var hasDontEnumBug = (function () {
3993 var obj = {
3994 constructor: function () {
3995 return "0";
3996 },
3997 toString: function () {
3998 return "1";
3999 },
4000 valueOf: function () {
4001 return "2";
4002 },
4003 toLocaleString: function () {
4004 return "3";
4005 },
4006 prototype: function () {
4007 return "4";
4008 },
4009 isPrototypeOf: function () {
4010 return "5";
4011 },
4012 propertyIsEnumerable: function () {
4013 return "6";
4014 },
4015 hasOwnProperty: function () {
4016 return "7";
4017 },
4018 length: function () {
4019 return "8";
4020 },
4021 unique: function () {
4022 return "9";
4023 },
4024 };
4025
4026 var result = [];
4027 for (var prop in obj) {
4028 if (hasOwnProperty(obj, prop)) {
4029 push(result, obj[prop]());
4030 }
4031 }
4032 return join(result, "") !== "0123456789";
4033})();
4034
4035function extendCommon(target, sources, doCopy) {
4036 var source, i, prop;
4037
4038 for (i = 0; i < sources.length; i++) {
4039 source = sources[i];
4040
4041 for (prop in source) {
4042 if (hasOwnProperty(source, prop)) {
4043 doCopy(target, source, prop);
4044 }
4045 }
4046
4047 // Make sure we copy (own) toString method even when in JScript with DontEnum bug
4048 // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
4049 if (
4050 hasDontEnumBug &&
4051 hasOwnProperty(source, "toString") &&
4052 source.toString !== target.toString
4053 ) {
4054 target.toString = source.toString;
4055 }
4056 }
4057
4058 return target;
4059}
4060
4061/** Public: Extend target in place with all (own) properties, except 'name' when [[writable]] is false,
4062 * from sources in-order. Thus, last source will override properties in previous sources.
4063 *
4064 * @param {object} target - The Object to extend
4065 * @param {object[]} sources - Objects to copy properties from.
4066 *
4067 * @returns {object} the extended target
4068 */
4069module.exports = function extend(target, ...sources) {
4070 return extendCommon(
4071 target,
4072 sources,
4073 function copyValue(dest, source, prop) {
4074 var destOwnPropertyDescriptor = Object.getOwnPropertyDescriptor(
4075 dest,
4076 prop
4077 );
4078 var sourceOwnPropertyDescriptor = Object.getOwnPropertyDescriptor(
4079 source,
4080 prop
4081 );
4082
4083 if (prop === "name" && !destOwnPropertyDescriptor.writable) {
4084 return;
4085 }
4086 const descriptors = {
4087 configurable: sourceOwnPropertyDescriptor.configurable,
4088 enumerable: sourceOwnPropertyDescriptor.enumerable,
4089 };
4090 /*
4091 if the sorce has an Accessor property copy over the accessor functions (get and set)
4092 data properties has writable attribute where as accessor property don't
4093 REF: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#properties
4094 */
4095
4096 if (hasOwnProperty(sourceOwnPropertyDescriptor, "writable")) {
4097 descriptors.writable = sourceOwnPropertyDescriptor.writable;
4098 descriptors.value = sourceOwnPropertyDescriptor.value;
4099 } else {
4100 if (sourceOwnPropertyDescriptor.get) {
4101 descriptors.get =
4102 sourceOwnPropertyDescriptor.get.bind(dest);
4103 }
4104 if (sourceOwnPropertyDescriptor.set) {
4105 descriptors.set =
4106 sourceOwnPropertyDescriptor.set.bind(dest);
4107 }
4108 }
4109 Object.defineProperty(dest, prop, descriptors);
4110 }
4111 );
4112};
4113
4114/** Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will
4115 * override properties in previous sources. Define the properties as non enumerable.
4116 *
4117 * @param {object} target - The Object to extend
4118 * @param {object[]} sources - Objects to copy properties from.
4119 *
4120 * @returns {object} the extended target
4121 */
4122module.exports.nonEnum = function extendNonEnum(target, ...sources) {
4123 return extendCommon(
4124 target,
4125 sources,
4126 function copyProperty(dest, source, prop) {
4127 Object.defineProperty(dest, prop, {
4128 value: source[prop],
4129 enumerable: false,
4130 configurable: true,
4131 writable: true,
4132 });
4133 }
4134 );
4135};
4136
4137},{"@sinonjs/commons":46}],26:[function(require,module,exports){
4138"use strict";
4139
4140module.exports = function toString() {
4141 var i, prop, thisValue;
4142 if (this.getCall && this.callCount) {
4143 i = this.callCount;
4144
4145 while (i--) {
4146 thisValue = this.getCall(i).thisValue;
4147
4148 // eslint-disable-next-line guard-for-in
4149 for (prop in thisValue) {
4150 try {
4151 if (thisValue[prop] === this) {
4152 return prop;
4153 }
4154 } catch (e) {
4155 // no-op - accessing props can throw an error, nothing to do here
4156 }
4157 }
4158 }
4159 }
4160
4161 return this.displayName || "sinon fake";
4162};
4163
4164},{}],27:[function(require,module,exports){
4165"use strict";
4166
4167/* istanbul ignore next : not testing that setTimeout works */
4168function nextTick(callback) {
4169 setTimeout(callback, 0);
4170}
4171
4172module.exports = function getNextTick(process, setImmediate) {
4173 if (typeof process === "object" && typeof process.nextTick === "function") {
4174 return process.nextTick;
4175 }
4176
4177 if (typeof setImmediate === "function") {
4178 return setImmediate;
4179 }
4180
4181 return nextTick;
4182};
4183
4184},{}],28:[function(require,module,exports){
4185"use strict";
4186
4187module.exports = function getPropertyDescriptor(object, property) {
4188 var proto = object;
4189 var descriptor;
4190 var isOwn = Boolean(
4191 object && Object.getOwnPropertyDescriptor(object, property)
4192 );
4193
4194 while (
4195 proto &&
4196 !(descriptor = Object.getOwnPropertyDescriptor(proto, property))
4197 ) {
4198 proto = Object.getPrototypeOf(proto);
4199 }
4200
4201 if (descriptor) {
4202 descriptor.isOwn = isOwn;
4203 }
4204
4205 return descriptor;
4206};
4207
4208},{}],29:[function(require,module,exports){
4209"use strict";
4210
4211/**
4212 * Verify if an object is a ECMAScript Module
4213 *
4214 * As the exports from a module is immutable we cannot alter the exports
4215 * using spies or stubs. Let the consumer know this to avoid bug reports
4216 * on weird error messages.
4217 *
4218 * @param {object} object The object to examine
4219 *
4220 * @returns {boolean} true when the object is a module
4221 */
4222module.exports = function (object) {
4223 return (
4224 object &&
4225 typeof Symbol !== "undefined" &&
4226 object[Symbol.toStringTag] === "Module" &&
4227 Object.isSealed(object)
4228 );
4229};
4230
4231},{}],30:[function(require,module,exports){
4232"use strict";
4233
4234/**
4235 * @param {*} object
4236 * @param {string} property
4237 * @returns {boolean} whether a prop exists in the prototype chain
4238 */
4239function isNonExistentProperty(object, property) {
4240 return Boolean(
4241 object && typeof property !== "undefined" && !(property in object)
4242 );
4243}
4244
4245module.exports = isNonExistentProperty;
4246
4247},{}],31:[function(require,module,exports){
4248"use strict";
4249
4250var getPropertyDescriptor = require("./get-property-descriptor");
4251
4252function isPropertyConfigurable(obj, propName) {
4253 var propertyDescriptor = getPropertyDescriptor(obj, propName);
4254
4255 return propertyDescriptor ? propertyDescriptor.configurable : true;
4256}
4257
4258module.exports = isPropertyConfigurable;
4259
4260},{"./get-property-descriptor":28}],32:[function(require,module,exports){
4261"use strict";
4262
4263function isRestorable(obj) {
4264 return (
4265 typeof obj === "function" &&
4266 typeof obj.restore === "function" &&
4267 obj.restore.sinon
4268 );
4269}
4270
4271module.exports = isRestorable;
4272
4273},{}],33:[function(require,module,exports){
4274"use strict";
4275
4276var globalObject = require("@sinonjs/commons").global;
4277var getNextTick = require("./get-next-tick");
4278
4279module.exports = getNextTick(globalObject.process, globalObject.setImmediate);
4280
4281},{"./get-next-tick":27,"@sinonjs/commons":46}],34:[function(require,module,exports){
4282"use strict";
4283
4284var array = [null, "once", "twice", "thrice"];
4285
4286module.exports = function timesInWords(count) {
4287 return array[count] || `${count || 0} times`;
4288};
4289
4290},{}],35:[function(require,module,exports){
4291"use strict";
4292
4293var forEach = Array.prototype.forEach;
4294
4295function usePromiseLibrary(library, fakes) {
4296 if (typeof library === "undefined") {
4297 return;
4298 }
4299
4300 if (Array.isArray(fakes)) {
4301 forEach.call(fakes, usePromiseLibrary.bind(null, library));
4302
4303 return;
4304 }
4305
4306 if (typeof fakes.usingPromise === "function") {
4307 fakes.usingPromise(library);
4308 }
4309}
4310
4311module.exports = usePromiseLibrary;
4312
4313},{}],36:[function(require,module,exports){
4314"use strict";
4315
4316var functionName = require("@sinonjs/commons").functionName;
4317
4318var getPropertyDescriptor = require("./get-property-descriptor");
4319var walk = require("./walk");
4320
4321/**
4322 * A utility that allows traversing an object, applying mutating functions on the properties
4323 *
4324 * @param {Function} mutator called on each property
4325 * @param {object} object the object we are walking over
4326 * @param {Function} filter a predicate (boolean function) that will decide whether or not to apply the mutator to the current property
4327 * @returns {void} nothing
4328 */
4329function walkObject(mutator, object, filter) {
4330 var called = false;
4331 var name = functionName(mutator);
4332
4333 if (!object) {
4334 throw new Error(
4335 `Trying to ${name} object but received ${String(object)}`
4336 );
4337 }
4338
4339 walk(object, function (prop, propOwner) {
4340 // we don't want to stub things like toString(), valueOf(), etc. so we only stub if the object
4341 // is not Object.prototype
4342 if (
4343 propOwner !== Object.prototype &&
4344 prop !== "constructor" &&
4345 typeof getPropertyDescriptor(propOwner, prop).value === "function"
4346 ) {
4347 if (filter) {
4348 if (filter(object, prop)) {
4349 called = true;
4350 mutator(object, prop);
4351 }
4352 } else {
4353 called = true;
4354 mutator(object, prop);
4355 }
4356 }
4357 });
4358
4359 if (!called) {
4360 throw new Error(
4361 `Found no methods on object to which we could apply mutations`
4362 );
4363 }
4364
4365 return object;
4366}
4367
4368module.exports = walkObject;
4369
4370},{"./get-property-descriptor":28,"./walk":37,"@sinonjs/commons":46}],37:[function(require,module,exports){
4371"use strict";
4372
4373var forEach = require("@sinonjs/commons").prototypes.array.forEach;
4374
4375function walkInternal(obj, iterator, context, originalObj, seen) {
4376 var proto, prop;
4377
4378 if (typeof Object.getOwnPropertyNames !== "function") {
4379 // We explicitly want to enumerate through all of the prototype's properties
4380 // in this case, therefore we deliberately leave out an own property check.
4381 /* eslint-disable-next-line guard-for-in */
4382 for (prop in obj) {
4383 iterator.call(context, obj[prop], prop, obj);
4384 }
4385
4386 return;
4387 }
4388
4389 forEach(Object.getOwnPropertyNames(obj), function (k) {
4390 if (seen[k] !== true) {
4391 seen[k] = true;
4392 var target =
4393 typeof Object.getOwnPropertyDescriptor(obj, k).get ===
4394 "function"
4395 ? originalObj
4396 : obj;
4397 iterator.call(context, k, target);
4398 }
4399 });
4400
4401 proto = Object.getPrototypeOf(obj);
4402 if (proto) {
4403 walkInternal(proto, iterator, context, originalObj, seen);
4404 }
4405}
4406
4407/* Walks the prototype chain of an object and iterates over every own property
4408 * name encountered. The iterator is called in the same fashion that Array.prototype.forEach
4409 * works, where it is passed the value, key, and own object as the 1st, 2nd, and 3rd positional
4410 * argument, respectively. In cases where Object.getOwnPropertyNames is not available, walk will
4411 * default to using a simple for..in loop.
4412 *
4413 * obj - The object to walk the prototype chain for.
4414 * iterator - The function to be called on each pass of the walk.
4415 * context - (Optional) When given, the iterator will be called with this object as the receiver.
4416 */
4417module.exports = function walk(obj, iterator, context) {
4418 return walkInternal(obj, iterator, context, obj, {});
4419};
4420
4421},{"@sinonjs/commons":46}],38:[function(require,module,exports){
4422"use strict";
4423
4424var getPropertyDescriptor = require("./get-property-descriptor");
4425var extend = require("./extend");
4426var hasOwnProperty =
4427 require("@sinonjs/commons").prototypes.object.hasOwnProperty;
4428var valueToString = require("@sinonjs/commons").valueToString;
4429var push = require("@sinonjs/commons").prototypes.array.push;
4430
4431function isFunction(obj) {
4432 return (
4433 typeof obj === "function" ||
4434 Boolean(obj && obj.constructor && obj.call && obj.apply)
4435 );
4436}
4437
4438function mirrorProperties(target, source) {
4439 for (var prop in source) {
4440 if (!hasOwnProperty(target, prop)) {
4441 target[prop] = source[prop];
4442 }
4443 }
4444}
4445
4446function getAccessor(object, property, method) {
4447 var accessors = ["get", "set"];
4448 var descriptor = getPropertyDescriptor(object, property);
4449
4450 for (var i = 0; i < accessors.length; i++) {
4451 if (
4452 descriptor[accessors[i]] &&
4453 descriptor[accessors[i]].name === method.name
4454 ) {
4455 return accessors[i];
4456 }
4457 }
4458 return null;
4459}
4460
4461// Cheap way to detect if we have ES5 support.
4462var hasES5Support = "keys" in Object;
4463
4464module.exports = function wrapMethod(object, property, method) {
4465 if (!object) {
4466 throw new TypeError("Should wrap property of object");
4467 }
4468
4469 if (typeof method !== "function" && typeof method !== "object") {
4470 throw new TypeError(
4471 "Method wrapper should be a function or a property descriptor"
4472 );
4473 }
4474
4475 function checkWrappedMethod(wrappedMethod) {
4476 var error;
4477
4478 if (!isFunction(wrappedMethod)) {
4479 error = new TypeError(
4480 `Attempted to wrap ${typeof wrappedMethod} property ${valueToString(
4481 property
4482 )} as function`
4483 );
4484 } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) {
4485 error = new TypeError(
4486 `Attempted to wrap ${valueToString(
4487 property
4488 )} which is already wrapped`
4489 );
4490 } else if (wrappedMethod.calledBefore) {
4491 var verb = wrappedMethod.returns ? "stubbed" : "spied on";
4492 error = new TypeError(
4493 `Attempted to wrap ${valueToString(
4494 property
4495 )} which is already ${verb}`
4496 );
4497 }
4498
4499 if (error) {
4500 if (wrappedMethod && wrappedMethod.stackTraceError) {
4501 error.stack += `\n--------------\n${wrappedMethod.stackTraceError.stack}`;
4502 }
4503 throw error;
4504 }
4505 }
4506
4507 var error,
4508 wrappedMethods,
4509 wrappedMethod,
4510 i,
4511 wrappedMethodDesc,
4512 target,
4513 accessor;
4514
4515 wrappedMethods = [];
4516
4517 function simplePropertyAssignment() {
4518 wrappedMethod = object[property];
4519 checkWrappedMethod(wrappedMethod);
4520 object[property] = method;
4521 method.displayName = property;
4522 }
4523
4524 // Firefox has a problem when using hasOwn.call on objects from other frames.
4525 var owned = object.hasOwnProperty
4526 ? object.hasOwnProperty(property) // eslint-disable-line @sinonjs/no-prototype-methods/no-prototype-methods
4527 : hasOwnProperty(object, property);
4528
4529 if (hasES5Support) {
4530 var methodDesc =
4531 typeof method === "function" ? { value: method } : method;
4532 wrappedMethodDesc = getPropertyDescriptor(object, property);
4533
4534 if (!wrappedMethodDesc) {
4535 error = new TypeError(
4536 `Attempted to wrap ${typeof wrappedMethod} property ${property} as function`
4537 );
4538 } else if (
4539 wrappedMethodDesc.restore &&
4540 wrappedMethodDesc.restore.sinon
4541 ) {
4542 error = new TypeError(
4543 `Attempted to wrap ${property} which is already wrapped`
4544 );
4545 }
4546 if (error) {
4547 if (wrappedMethodDesc && wrappedMethodDesc.stackTraceError) {
4548 error.stack += `\n--------------\n${wrappedMethodDesc.stackTraceError.stack}`;
4549 }
4550 throw error;
4551 }
4552
4553 var types = Object.keys(methodDesc);
4554 for (i = 0; i < types.length; i++) {
4555 wrappedMethod = wrappedMethodDesc[types[i]];
4556 checkWrappedMethod(wrappedMethod);
4557 push(wrappedMethods, wrappedMethod);
4558 }
4559
4560 mirrorProperties(methodDesc, wrappedMethodDesc);
4561 for (i = 0; i < types.length; i++) {
4562 mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]);
4563 }
4564 Object.defineProperty(object, property, methodDesc);
4565
4566 // catch failing assignment
4567 // this is the converse of the check in `.restore` below
4568 if (typeof method === "function" && object[property] !== method) {
4569 // correct any wrongdoings caused by the defineProperty call above,
4570 // such as adding new items (if object was a Storage object)
4571 delete object[property];
4572 simplePropertyAssignment();
4573 }
4574 } else {
4575 simplePropertyAssignment();
4576 }
4577
4578 extendObjectWithWrappedMethods();
4579
4580 function extendObjectWithWrappedMethods() {
4581 for (i = 0; i < wrappedMethods.length; i++) {
4582 accessor = getAccessor(object, property, wrappedMethods[i]);
4583 target = accessor ? method[accessor] : method;
4584 extend.nonEnum(target, {
4585 displayName: property,
4586 wrappedMethod: wrappedMethods[i],
4587
4588 // Set up an Error object for a stack trace which can be used later to find what line of
4589 // code the original method was created on.
4590 stackTraceError: new Error("Stack Trace for original"),
4591
4592 restore: restore,
4593 });
4594
4595 target.restore.sinon = true;
4596 if (!hasES5Support) {
4597 mirrorProperties(target, wrappedMethod);
4598 }
4599 }
4600 }
4601
4602 function restore() {
4603 accessor = getAccessor(object, property, this.wrappedMethod);
4604 var descriptor;
4605 // For prototype properties try to reset by delete first.
4606 // If this fails (ex: localStorage on mobile safari) then force a reset
4607 // via direct assignment.
4608 if (accessor) {
4609 if (!owned) {
4610 try {
4611 // In some cases `delete` may throw an error
4612 delete object[property][accessor];
4613 } catch (e) {} // eslint-disable-line no-empty
4614 // For native code functions `delete` fails without throwing an error
4615 // on Chrome < 43, PhantomJS, etc.
4616 } else if (hasES5Support) {
4617 descriptor = getPropertyDescriptor(object, property);
4618 descriptor[accessor] = wrappedMethodDesc[accessor];
4619 Object.defineProperty(object, property, descriptor);
4620 }
4621
4622 if (hasES5Support) {
4623 descriptor = getPropertyDescriptor(object, property);
4624 if (descriptor && descriptor.value === target) {
4625 object[property][accessor] = this.wrappedMethod;
4626 }
4627 } else {
4628 // Use strict equality comparison to check failures then force a reset
4629 // via direct assignment.
4630 if (object[property][accessor] === target) {
4631 object[property][accessor] = this.wrappedMethod;
4632 }
4633 }
4634 } else {
4635 if (!owned) {
4636 try {
4637 delete object[property];
4638 } catch (e) {} // eslint-disable-line no-empty
4639 } else if (hasES5Support) {
4640 Object.defineProperty(object, property, wrappedMethodDesc);
4641 }
4642
4643 if (hasES5Support) {
4644 descriptor = getPropertyDescriptor(object, property);
4645 if (descriptor && descriptor.value === target) {
4646 object[property] = this.wrappedMethod;
4647 }
4648 } else {
4649 if (object[property] === target) {
4650 object[property] = this.wrappedMethod;
4651 }
4652 }
4653 }
4654 }
4655
4656 return method;
4657};
4658
4659},{"./extend":25,"./get-property-descriptor":28,"@sinonjs/commons":46}],39:[function(require,module,exports){
4660"use strict";
4661
4662var extend = require("./core/extend");
4663var FakeTimers = require("@sinonjs/fake-timers");
4664var globalObject = require("@sinonjs/commons").global;
4665
4666function createClock(config, globalCtx) {
4667 var FakeTimersCtx = FakeTimers;
4668 if (globalCtx !== null && typeof globalCtx === "object") {
4669 FakeTimersCtx = FakeTimers.withGlobal(globalCtx);
4670 }
4671 var clock = FakeTimersCtx.install(config);
4672 clock.restore = clock.uninstall;
4673 return clock;
4674}
4675
4676function addIfDefined(obj, globalPropName) {
4677 var globalProp = globalObject[globalPropName];
4678 if (typeof globalProp !== "undefined") {
4679 obj[globalPropName] = globalProp;
4680 }
4681}
4682
4683/**
4684 * @param {number|Date|object} dateOrConfig The unix epoch value to install with (default 0)
4685 * @returns {object} Returns a lolex clock instance
4686 */
4687exports.useFakeTimers = function (dateOrConfig) {
4688 var hasArguments = typeof dateOrConfig !== "undefined";
4689 var argumentIsDateLike =
4690 (typeof dateOrConfig === "number" || dateOrConfig instanceof Date) &&
4691 arguments.length === 1;
4692 var argumentIsObject =
4693 dateOrConfig !== null &&
4694 typeof dateOrConfig === "object" &&
4695 arguments.length === 1;
4696
4697 if (!hasArguments) {
4698 return createClock({
4699 now: 0,
4700 });
4701 }
4702
4703 if (argumentIsDateLike) {
4704 return createClock({
4705 now: dateOrConfig,
4706 });
4707 }
4708
4709 if (argumentIsObject) {
4710 var config = extend.nonEnum({}, dateOrConfig);
4711 var globalCtx = config.global;
4712 delete config.global;
4713 return createClock(config, globalCtx);
4714 }
4715
4716 throw new TypeError(
4717 "useFakeTimers expected epoch or config object. See https://github.com/sinonjs/sinon"
4718 );
4719};
4720
4721exports.clock = {
4722 create: function (now) {
4723 return FakeTimers.createClock(now);
4724 },
4725};
4726
4727var timers = {
4728 setTimeout: setTimeout,
4729 clearTimeout: clearTimeout,
4730 setInterval: setInterval,
4731 clearInterval: clearInterval,
4732 Date: Date,
4733};
4734addIfDefined(timers, "setImmediate");
4735addIfDefined(timers, "clearImmediate");
4736
4737exports.timers = timers;
4738
4739},{"./core/extend":25,"@sinonjs/commons":46,"@sinonjs/fake-timers":78}],40:[function(require,module,exports){
4740"use strict";
4741
4742var every = require("./prototypes/array").every;
4743
4744/**
4745 * @private
4746 */
4747function hasCallsLeft(callMap, spy) {
4748 if (callMap[spy.id] === undefined) {
4749 callMap[spy.id] = 0;
4750 }
4751
4752 return callMap[spy.id] < spy.callCount;
4753}
4754
4755/**
4756 * @private
4757 */
4758function checkAdjacentCalls(callMap, spy, index, spies) {
4759 var calledBeforeNext = true;
4760
4761 if (index !== spies.length - 1) {
4762 calledBeforeNext = spy.calledBefore(spies[index + 1]);
4763 }
4764
4765 if (hasCallsLeft(callMap, spy) && calledBeforeNext) {
4766 callMap[spy.id] += 1;
4767 return true;
4768 }
4769
4770 return false;
4771}
4772
4773/**
4774 * A Sinon proxy object (fake, spy, stub)
4775 *
4776 * @typedef {object} SinonProxy
4777 * @property {Function} calledBefore - A method that determines if this proxy was called before another one
4778 * @property {string} id - Some id
4779 * @property {number} callCount - Number of times this proxy has been called
4780 */
4781
4782/**
4783 * Returns true when the spies have been called in the order they were supplied in
4784 *
4785 * @param {SinonProxy[] | SinonProxy} spies An array of proxies, or several proxies as arguments
4786 * @returns {boolean} true when spies are called in order, false otherwise
4787 */
4788function calledInOrder(spies) {
4789 var callMap = {};
4790 // eslint-disable-next-line no-underscore-dangle
4791 var _spies = arguments.length > 1 ? arguments : spies;
4792
4793 return every(_spies, checkAdjacentCalls.bind(null, callMap));
4794}
4795
4796module.exports = calledInOrder;
4797
4798},{"./prototypes/array":48}],41:[function(require,module,exports){
4799"use strict";
4800
4801var functionName = require("./function-name");
4802
4803/**
4804 * Returns a display name for a value from a constructor
4805 *
4806 * @param {object} value A value to examine
4807 * @returns {(string|null)} A string or null
4808 */
4809function className(value) {
4810 return (
4811 (value.constructor && value.constructor.name) ||
4812 // The next branch is for IE11 support only:
4813 // Because the name property is not set on the prototype
4814 // of the Function object, we finally try to grab the
4815 // name from its definition. This will never be reached
4816 // in node, so we are not able to test this properly.
4817 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name
4818 (typeof value.constructor === "function" &&
4819 /* istanbul ignore next */
4820 functionName(value.constructor)) ||
4821 null
4822 );
4823}
4824
4825module.exports = className;
4826
4827},{"./function-name":44}],42:[function(require,module,exports){
4828/* eslint-disable no-console */
4829"use strict";
4830
4831/**
4832 * Returns a function that will invoke the supplied function and print a
4833 * deprecation warning to the console each time it is called.
4834 *
4835 * @param {Function} func
4836 * @param {string} msg
4837 * @returns {Function}
4838 */
4839exports.wrap = function (func, msg) {
4840 var wrapped = function () {
4841 exports.printWarning(msg);
4842 return func.apply(this, arguments);
4843 };
4844 if (func.prototype) {
4845 wrapped.prototype = func.prototype;
4846 }
4847 return wrapped;
4848};
4849
4850/**
4851 * Returns a string which can be supplied to `wrap()` to notify the user that a
4852 * particular part of the sinon API has been deprecated.
4853 *
4854 * @param {string} packageName
4855 * @param {string} funcName
4856 * @returns {string}
4857 */
4858exports.defaultMsg = function (packageName, funcName) {
4859 return `${packageName}.${funcName} is deprecated and will be removed from the public API in a future version of ${packageName}.`;
4860};
4861
4862/**
4863 * Prints a warning on the console, when it exists
4864 *
4865 * @param {string} msg
4866 * @returns {undefined}
4867 */
4868exports.printWarning = function (msg) {
4869 /* istanbul ignore next */
4870 if (typeof process === "object" && process.emitWarning) {
4871 // Emit Warnings in Node
4872 process.emitWarning(msg);
4873 } else if (console.info) {
4874 console.info(msg);
4875 } else {
4876 console.log(msg);
4877 }
4878};
4879
4880},{}],43:[function(require,module,exports){
4881"use strict";
4882
4883/**
4884 * Returns true when fn returns true for all members of obj.
4885 * This is an every implementation that works for all iterables
4886 *
4887 * @param {object} obj
4888 * @param {Function} fn
4889 * @returns {boolean}
4890 */
4891module.exports = function every(obj, fn) {
4892 var pass = true;
4893
4894 try {
4895 // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods
4896 obj.forEach(function () {
4897 if (!fn.apply(this, arguments)) {
4898 // Throwing an error is the only way to break `forEach`
4899 throw new Error();
4900 }
4901 });
4902 } catch (e) {
4903 pass = false;
4904 }
4905
4906 return pass;
4907};
4908
4909},{}],44:[function(require,module,exports){
4910"use strict";
4911
4912/**
4913 * Returns a display name for a function
4914 *
4915 * @param {Function} func
4916 * @returns {string}
4917 */
4918module.exports = function functionName(func) {
4919 if (!func) {
4920 return "";
4921 }
4922
4923 try {
4924 return (
4925 func.displayName ||
4926 func.name ||
4927 // Use function decomposition as a last resort to get function
4928 // name. Does not rely on function decomposition to work - if it
4929 // doesn't debugging will be slightly less informative
4930 // (i.e. toString will say 'spy' rather than 'myFunc').
4931 (String(func).match(/function ([^\s(]+)/) || [])[1]
4932 );
4933 } catch (e) {
4934 // Stringify may fail and we might get an exception, as a last-last
4935 // resort fall back to empty string.
4936 return "";
4937 }
4938};
4939
4940},{}],45:[function(require,module,exports){
4941"use strict";
4942
4943/**
4944 * A reference to the global object
4945 *
4946 * @type {object} globalObject
4947 */
4948var globalObject;
4949
4950/* istanbul ignore else */
4951if (typeof global !== "undefined") {
4952 // Node
4953 globalObject = global;
4954} else if (typeof window !== "undefined") {
4955 // Browser
4956 globalObject = window;
4957} else {
4958 // WebWorker
4959 globalObject = self;
4960}
4961
4962module.exports = globalObject;
4963
4964},{}],46:[function(require,module,exports){
4965"use strict";
4966
4967module.exports = {
4968 global: require("./global"),
4969 calledInOrder: require("./called-in-order"),
4970 className: require("./class-name"),
4971 deprecated: require("./deprecated"),
4972 every: require("./every"),
4973 functionName: require("./function-name"),
4974 orderByFirstCall: require("./order-by-first-call"),
4975 prototypes: require("./prototypes"),
4976 typeOf: require("./type-of"),
4977 valueToString: require("./value-to-string"),
4978};
4979
4980},{"./called-in-order":40,"./class-name":41,"./deprecated":42,"./every":43,"./function-name":44,"./global":45,"./order-by-first-call":47,"./prototypes":51,"./type-of":57,"./value-to-string":58}],47:[function(require,module,exports){
4981"use strict";
4982
4983var sort = require("./prototypes/array").sort;
4984var slice = require("./prototypes/array").slice;
4985
4986/**
4987 * @private
4988 */
4989function comparator(a, b) {
4990 // uuid, won't ever be equal
4991 var aCall = a.getCall(0);
4992 var bCall = b.getCall(0);
4993 var aId = (aCall && aCall.callId) || -1;
4994 var bId = (bCall && bCall.callId) || -1;
4995
4996 return aId < bId ? -1 : 1;
4997}
4998
4999/**
5000 * A Sinon proxy object (fake, spy, stub)
5001 *
5002 * @typedef {object} SinonProxy
5003 * @property {Function} getCall - A method that can return the first call
5004 */
5005
5006/**
5007 * Sorts an array of SinonProxy instances (fake, spy, stub) by their first call
5008 *
5009 * @param {SinonProxy[] | SinonProxy} spies
5010 * @returns {SinonProxy[]}
5011 */
5012function orderByFirstCall(spies) {
5013 return sort(slice(spies), comparator);
5014}
5015
5016module.exports = orderByFirstCall;
5017
5018},{"./prototypes/array":48}],48:[function(require,module,exports){
5019"use strict";
5020
5021var copyPrototype = require("./copy-prototype-methods");
5022
5023module.exports = copyPrototype(Array.prototype);
5024
5025},{"./copy-prototype-methods":49}],49:[function(require,module,exports){
5026"use strict";
5027
5028var call = Function.call;
5029var throwsOnProto = require("./throws-on-proto");
5030
5031var disallowedProperties = [
5032 // ignore size because it throws from Map
5033 "size",
5034 "caller",
5035 "callee",
5036 "arguments",
5037];
5038
5039// This branch is covered when tests are run with `--disable-proto=throw`,
5040// however we can test both branches at the same time, so this is ignored
5041/* istanbul ignore next */
5042if (throwsOnProto) {
5043 disallowedProperties.push("__proto__");
5044}
5045
5046module.exports = function copyPrototypeMethods(prototype) {
5047 // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods
5048 return Object.getOwnPropertyNames(prototype).reduce(function (
5049 result,
5050 name
5051 ) {
5052 if (disallowedProperties.includes(name)) {
5053 return result;
5054 }
5055
5056 if (typeof prototype[name] !== "function") {
5057 return result;
5058 }
5059
5060 result[name] = call.bind(prototype[name]);
5061
5062 return result;
5063 },
5064 Object.create(null));
5065};
5066
5067},{"./throws-on-proto":56}],50:[function(require,module,exports){
5068"use strict";
5069
5070var copyPrototype = require("./copy-prototype-methods");
5071
5072module.exports = copyPrototype(Function.prototype);
5073
5074},{"./copy-prototype-methods":49}],51:[function(require,module,exports){
5075"use strict";
5076
5077module.exports = {
5078 array: require("./array"),
5079 function: require("./function"),
5080 map: require("./map"),
5081 object: require("./object"),
5082 set: require("./set"),
5083 string: require("./string"),
5084};
5085
5086},{"./array":48,"./function":50,"./map":52,"./object":53,"./set":54,"./string":55}],52:[function(require,module,exports){
5087"use strict";
5088
5089var copyPrototype = require("./copy-prototype-methods");
5090
5091module.exports = copyPrototype(Map.prototype);
5092
5093},{"./copy-prototype-methods":49}],53:[function(require,module,exports){
5094"use strict";
5095
5096var copyPrototype = require("./copy-prototype-methods");
5097
5098module.exports = copyPrototype(Object.prototype);
5099
5100},{"./copy-prototype-methods":49}],54:[function(require,module,exports){
5101"use strict";
5102
5103var copyPrototype = require("./copy-prototype-methods");
5104
5105module.exports = copyPrototype(Set.prototype);
5106
5107},{"./copy-prototype-methods":49}],55:[function(require,module,exports){
5108"use strict";
5109
5110var copyPrototype = require("./copy-prototype-methods");
5111
5112module.exports = copyPrototype(String.prototype);
5113
5114},{"./copy-prototype-methods":49}],56:[function(require,module,exports){
5115"use strict";
5116
5117/**
5118 * Is true when the environment causes an error to be thrown for accessing the
5119 * __proto__ property.
5120 *
5121 * This is necessary in order to support `node --disable-proto=throw`.
5122 *
5123 * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto
5124 *
5125 * @type {boolean}
5126 */
5127let throwsOnProto;
5128try {
5129 const object = {};
5130 // eslint-disable-next-line no-proto, no-unused-expressions
5131 object.__proto__;
5132 throwsOnProto = false;
5133} catch (_) {
5134 // This branch is covered when tests are run with `--disable-proto=throw`,
5135 // however we can test both branches at the same time, so this is ignored
5136 /* istanbul ignore next */
5137 throwsOnProto = true;
5138}
5139
5140module.exports = throwsOnProto;
5141
5142},{}],57:[function(require,module,exports){
5143"use strict";
5144
5145var type = require("type-detect");
5146
5147/**
5148 * Returns the lower-case result of running type from type-detect on the value
5149 *
5150 * @param {*} value
5151 * @returns {string}
5152 */
5153module.exports = function typeOf(value) {
5154 return type(value).toLowerCase();
5155};
5156
5157},{"type-detect":168}],58:[function(require,module,exports){
5158"use strict";
5159
5160/**
5161 * Returns a string representation of the value
5162 *
5163 * @param {*} value
5164 * @returns {string}
5165 */
5166function valueToString(value) {
5167 if (value && value.toString) {
5168 // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods
5169 return value.toString();
5170 }
5171 return String(value);
5172}
5173
5174module.exports = valueToString;
5175
5176},{}],59:[function(require,module,exports){
5177arguments[4][40][0].apply(exports,arguments)
5178},{"./prototypes/array":67,"dup":40}],60:[function(require,module,exports){
5179arguments[4][41][0].apply(exports,arguments)
5180},{"./function-name":63,"dup":41}],61:[function(require,module,exports){
5181arguments[4][42][0].apply(exports,arguments)
5182},{"dup":42}],62:[function(require,module,exports){
5183arguments[4][43][0].apply(exports,arguments)
5184},{"dup":43}],63:[function(require,module,exports){
5185arguments[4][44][0].apply(exports,arguments)
5186},{"dup":44}],64:[function(require,module,exports){
5187arguments[4][45][0].apply(exports,arguments)
5188},{"dup":45}],65:[function(require,module,exports){
5189arguments[4][46][0].apply(exports,arguments)
5190},{"./called-in-order":59,"./class-name":60,"./deprecated":61,"./every":62,"./function-name":63,"./global":64,"./order-by-first-call":66,"./prototypes":70,"./type-of":76,"./value-to-string":77,"dup":46}],66:[function(require,module,exports){
5191arguments[4][47][0].apply(exports,arguments)
5192},{"./prototypes/array":67,"dup":47}],67:[function(require,module,exports){
5193arguments[4][48][0].apply(exports,arguments)
5194},{"./copy-prototype-methods":68,"dup":48}],68:[function(require,module,exports){
5195arguments[4][49][0].apply(exports,arguments)
5196},{"./throws-on-proto":75,"dup":49}],69:[function(require,module,exports){
5197arguments[4][50][0].apply(exports,arguments)
5198},{"./copy-prototype-methods":68,"dup":50}],70:[function(require,module,exports){
5199arguments[4][51][0].apply(exports,arguments)
5200},{"./array":67,"./function":69,"./map":71,"./object":72,"./set":73,"./string":74,"dup":51}],71:[function(require,module,exports){
5201arguments[4][52][0].apply(exports,arguments)
5202},{"./copy-prototype-methods":68,"dup":52}],72:[function(require,module,exports){
5203arguments[4][53][0].apply(exports,arguments)
5204},{"./copy-prototype-methods":68,"dup":53}],73:[function(require,module,exports){
5205arguments[4][54][0].apply(exports,arguments)
5206},{"./copy-prototype-methods":68,"dup":54}],74:[function(require,module,exports){
5207arguments[4][55][0].apply(exports,arguments)
5208},{"./copy-prototype-methods":68,"dup":55}],75:[function(require,module,exports){
5209arguments[4][56][0].apply(exports,arguments)
5210},{"dup":56}],76:[function(require,module,exports){
5211arguments[4][57][0].apply(exports,arguments)
5212},{"dup":57,"type-detect":168}],77:[function(require,module,exports){
5213arguments[4][58][0].apply(exports,arguments)
5214},{"dup":58}],78:[function(require,module,exports){
5215"use strict";
5216
5217const globalObject = require("@sinonjs/commons").global;
5218
5219/**
5220 * @typedef {object} IdleDeadline
5221 * @property {boolean} didTimeout - whether or not the callback was called before reaching the optional timeout
5222 * @property {function():number} timeRemaining - a floating-point value providing an estimate of the number of milliseconds remaining in the current idle period
5223 */
5224
5225/**
5226 * Queues a function to be called during a browser's idle periods
5227 *
5228 * @callback RequestIdleCallback
5229 * @param {function(IdleDeadline)} callback
5230 * @param {{timeout: number}} options - an options object
5231 * @returns {number} the id
5232 */
5233
5234/**
5235 * @callback NextTick
5236 * @param {VoidVarArgsFunc} callback - the callback to run
5237 * @param {...*} arguments - optional arguments to call the callback with
5238 * @returns {void}
5239 */
5240
5241/**
5242 * @callback SetImmediate
5243 * @param {VoidVarArgsFunc} callback - the callback to run
5244 * @param {...*} arguments - optional arguments to call the callback with
5245 * @returns {NodeImmediate}
5246 */
5247
5248/**
5249 * @callback VoidVarArgsFunc
5250 * @param {...*} callback - the callback to run
5251 * @returns {void}
5252 */
5253
5254/**
5255 * @typedef RequestAnimationFrame
5256 * @property {function(number):void} requestAnimationFrame
5257 * @returns {number} - the id
5258 */
5259
5260/**
5261 * @typedef Performance
5262 * @property {function(): number} now
5263 */
5264
5265/* eslint-disable jsdoc/require-property-description */
5266/**
5267 * @typedef {object} Clock
5268 * @property {number} now - the current time
5269 * @property {Date} Date - the Date constructor
5270 * @property {number} loopLimit - the maximum number of timers before assuming an infinite loop
5271 * @property {RequestIdleCallback} requestIdleCallback
5272 * @property {function(number):void} cancelIdleCallback
5273 * @property {setTimeout} setTimeout
5274 * @property {clearTimeout} clearTimeout
5275 * @property {NextTick} nextTick
5276 * @property {queueMicrotask} queueMicrotask
5277 * @property {setInterval} setInterval
5278 * @property {clearInterval} clearInterval
5279 * @property {SetImmediate} setImmediate
5280 * @property {function(NodeImmediate):void} clearImmediate
5281 * @property {function():number} countTimers
5282 * @property {RequestAnimationFrame} requestAnimationFrame
5283 * @property {function(number):void} cancelAnimationFrame
5284 * @property {function():void} runMicrotasks
5285 * @property {function(string | number): number} tick
5286 * @property {function(string | number): Promise<number>} tickAsync
5287 * @property {function(): number} next
5288 * @property {function(): Promise<number>} nextAsync
5289 * @property {function(): number} runAll
5290 * @property {function(): number} runToFrame
5291 * @property {function(): Promise<number>} runAllAsync
5292 * @property {function(): number} runToLast
5293 * @property {function(): Promise<number>} runToLastAsync
5294 * @property {function(): void} reset
5295 * @property {function(number | Date): void} setSystemTime
5296 * @property {Performance} performance
5297 * @property {function(number[]): number[]} hrtime - process.hrtime (legacy)
5298 * @property {function(): void} uninstall Uninstall the clock.
5299 * @property {Function[]} methods - the methods that are faked
5300 * @property {boolean} [shouldClearNativeTimers] inherited from config
5301 */
5302/* eslint-enable jsdoc/require-property-description */
5303
5304/**
5305 * Configuration object for the `install` method.
5306 *
5307 * @typedef {object} Config
5308 * @property {number|Date} [now] a number (in milliseconds) or a Date object (default epoch)
5309 * @property {string[]} [toFake] names of the methods that should be faked.
5310 * @property {number} [loopLimit] the maximum number of timers that will be run when calling runAll()
5311 * @property {boolean} [shouldAdvanceTime] tells FakeTimers to increment mocked time automatically (default false)
5312 * @property {number} [advanceTimeDelta] increment mocked time every <<advanceTimeDelta>> ms (default: 20ms)
5313 * @property {boolean} [shouldClearNativeTimers] forwards clear timer calls to native functions if they are not fakes (default: false)
5314 */
5315
5316/* eslint-disable jsdoc/require-property-description */
5317/**
5318 * The internal structure to describe a scheduled fake timer
5319 *
5320 * @typedef {object} Timer
5321 * @property {Function} func
5322 * @property {*[]} args
5323 * @property {number} delay
5324 * @property {number} callAt
5325 * @property {number} createdAt
5326 * @property {boolean} immediate
5327 * @property {number} id
5328 * @property {Error} [error]
5329 */
5330
5331/**
5332 * A Node timer
5333 *
5334 * @typedef {object} NodeImmediate
5335 * @property {function(): boolean} hasRef
5336 * @property {function(): NodeImmediate} ref
5337 * @property {function(): NodeImmediate} unref
5338 */
5339/* eslint-enable jsdoc/require-property-description */
5340
5341/* eslint-disable complexity */
5342
5343/**
5344 * Mocks available features in the specified global namespace.
5345 *
5346 * @param {*} _global Namespace to mock (e.g. `window`)
5347 * @returns {FakeTimers}
5348 */
5349function withGlobal(_global) {
5350 const userAgent = _global.navigator && _global.navigator.userAgent;
5351 const isRunningInIE = userAgent && userAgent.indexOf("MSIE ") > -1;
5352 const maxTimeout = Math.pow(2, 31) - 1; //see https://heycam.github.io/webidl/#abstract-opdef-converttoint
5353 const idCounterStart = 1e12; // arbitrarily large number to avoid collisions with native timer IDs
5354 const NOOP = function () {
5355 return undefined;
5356 };
5357 const NOOP_ARRAY = function () {
5358 return [];
5359 };
5360 const timeoutResult = _global.setTimeout(NOOP, 0);
5361 const addTimerReturnsObject = typeof timeoutResult === "object";
5362 const hrtimePresent =
5363 _global.process && typeof _global.process.hrtime === "function";
5364 const hrtimeBigintPresent =
5365 hrtimePresent && typeof _global.process.hrtime.bigint === "function";
5366 const nextTickPresent =
5367 _global.process && typeof _global.process.nextTick === "function";
5368 const utilPromisify = _global.process && require("util").promisify;
5369 const performancePresent =
5370 _global.performance && typeof _global.performance.now === "function";
5371 const hasPerformancePrototype =
5372 _global.Performance &&
5373 (typeof _global.Performance).match(/^(function|object)$/);
5374 const hasPerformanceConstructorPrototype =
5375 _global.performance &&
5376 _global.performance.constructor &&
5377 _global.performance.constructor.prototype;
5378 const queueMicrotaskPresent = _global.hasOwnProperty("queueMicrotask");
5379 const requestAnimationFramePresent =
5380 _global.requestAnimationFrame &&
5381 typeof _global.requestAnimationFrame === "function";
5382 const cancelAnimationFramePresent =
5383 _global.cancelAnimationFrame &&
5384 typeof _global.cancelAnimationFrame === "function";
5385 const requestIdleCallbackPresent =
5386 _global.requestIdleCallback &&
5387 typeof _global.requestIdleCallback === "function";
5388 const cancelIdleCallbackPresent =
5389 _global.cancelIdleCallback &&
5390 typeof _global.cancelIdleCallback === "function";
5391 const setImmediatePresent =
5392 _global.setImmediate && typeof _global.setImmediate === "function";
5393
5394 // Make properties writable in IE, as per
5395 // https://www.adequatelygood.com/Replacing-setTimeout-Globally.html
5396 /* eslint-disable no-self-assign */
5397 if (isRunningInIE) {
5398 _global.setTimeout = _global.setTimeout;
5399 _global.clearTimeout = _global.clearTimeout;
5400 _global.setInterval = _global.setInterval;
5401 _global.clearInterval = _global.clearInterval;
5402 _global.Date = _global.Date;
5403 }
5404
5405 // setImmediate is not a standard function
5406 // avoid adding the prop to the window object if not present
5407 if (setImmediatePresent) {
5408 _global.setImmediate = _global.setImmediate;
5409 _global.clearImmediate = _global.clearImmediate;
5410 }
5411 /* eslint-enable no-self-assign */
5412
5413 _global.clearTimeout(timeoutResult);
5414
5415 const NativeDate = _global.Date;
5416 let uniqueTimerId = idCounterStart;
5417
5418 /**
5419 * @param {number} num
5420 * @returns {boolean}
5421 */
5422 function isNumberFinite(num) {
5423 if (Number.isFinite) {
5424 return Number.isFinite(num);
5425 }
5426
5427 return isFinite(num);
5428 }
5429
5430 let isNearInfiniteLimit = false;
5431
5432 /**
5433 * @param {Clock} clock
5434 * @param {number} i
5435 */
5436 function checkIsNearInfiniteLimit(clock, i) {
5437 if (clock.loopLimit && i === clock.loopLimit - 1) {
5438 isNearInfiniteLimit = true;
5439 }
5440 }
5441
5442 /**
5443 *
5444 */
5445 function resetIsNearInfiniteLimit() {
5446 isNearInfiniteLimit = false;
5447 }
5448
5449 /**
5450 * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into
5451 * number of milliseconds. This is used to support human-readable strings passed
5452 * to clock.tick()
5453 *
5454 * @param {string} str
5455 * @returns {number}
5456 */
5457 function parseTime(str) {
5458 if (!str) {
5459 return 0;
5460 }
5461
5462 const strings = str.split(":");
5463 const l = strings.length;
5464 let i = l;
5465 let ms = 0;
5466 let parsed;
5467
5468 if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) {
5469 throw new Error(
5470 "tick only understands numbers, 'm:s' and 'h:m:s'. Each part must be two digits"
5471 );
5472 }
5473
5474 while (i--) {
5475 parsed = parseInt(strings[i], 10);
5476
5477 if (parsed >= 60) {
5478 throw new Error(`Invalid time ${str}`);
5479 }
5480
5481 ms += parsed * Math.pow(60, l - i - 1);
5482 }
5483
5484 return ms * 1000;
5485 }
5486
5487 /**
5488 * Get the decimal part of the millisecond value as nanoseconds
5489 *
5490 * @param {number} msFloat the number of milliseconds
5491 * @returns {number} an integer number of nanoseconds in the range [0,1e6)
5492 *
5493 * Example: nanoRemainer(123.456789) -> 456789
5494 */
5495 function nanoRemainder(msFloat) {
5496 const modulo = 1e6;
5497 const remainder = (msFloat * 1e6) % modulo;
5498 const positiveRemainder =
5499 remainder < 0 ? remainder + modulo : remainder;
5500
5501 return Math.floor(positiveRemainder);
5502 }
5503
5504 /**
5505 * Used to grok the `now` parameter to createClock.
5506 *
5507 * @param {Date|number} epoch the system time
5508 * @returns {number}
5509 */
5510 function getEpoch(epoch) {
5511 if (!epoch) {
5512 return 0;
5513 }
5514 if (typeof epoch.getTime === "function") {
5515 return epoch.getTime();
5516 }
5517 if (typeof epoch === "number") {
5518 return epoch;
5519 }
5520 throw new TypeError("now should be milliseconds since UNIX epoch");
5521 }
5522
5523 /**
5524 * @param {number} from
5525 * @param {number} to
5526 * @param {Timer} timer
5527 * @returns {boolean}
5528 */
5529 function inRange(from, to, timer) {
5530 return timer && timer.callAt >= from && timer.callAt <= to;
5531 }
5532
5533 /**
5534 * @param {Clock} clock
5535 * @param {Timer} job
5536 */
5537 function getInfiniteLoopError(clock, job) {
5538 const infiniteLoopError = new Error(
5539 `Aborting after running ${clock.loopLimit} timers, assuming an infinite loop!`
5540 );
5541
5542 if (!job.error) {
5543 return infiniteLoopError;
5544 }
5545
5546 // pattern never matched in Node
5547 const computedTargetPattern = /target\.*[<|(|[].*?[>|\]|)]\s*/;
5548 let clockMethodPattern = new RegExp(
5549 String(Object.keys(clock).join("|"))
5550 );
5551
5552 if (addTimerReturnsObject) {
5553 // node.js environment
5554 clockMethodPattern = new RegExp(
5555 `\\s+at (Object\\.)?(?:${Object.keys(clock).join("|")})\\s+`
5556 );
5557 }
5558
5559 let matchedLineIndex = -1;
5560 job.error.stack.split("\n").some(function (line, i) {
5561 // If we've matched a computed target line (e.g. setTimeout) then we
5562 // don't need to look any further. Return true to stop iterating.
5563 const matchedComputedTarget = line.match(computedTargetPattern);
5564 /* istanbul ignore if */
5565 if (matchedComputedTarget) {
5566 matchedLineIndex = i;
5567 return true;
5568 }
5569
5570 // If we've matched a clock method line, then there may still be
5571 // others further down the trace. Return false to keep iterating.
5572 const matchedClockMethod = line.match(clockMethodPattern);
5573 if (matchedClockMethod) {
5574 matchedLineIndex = i;
5575 return false;
5576 }
5577
5578 // If we haven't matched anything on this line, but we matched
5579 // previously and set the matched line index, then we can stop.
5580 // If we haven't matched previously, then we should keep iterating.
5581 return matchedLineIndex >= 0;
5582 });
5583
5584 const stack = `${infiniteLoopError}\n${job.type || "Microtask"} - ${
5585 job.func.name || "anonymous"
5586 }\n${job.error.stack
5587 .split("\n")
5588 .slice(matchedLineIndex + 1)
5589 .join("\n")}`;
5590
5591 try {
5592 Object.defineProperty(infiniteLoopError, "stack", {
5593 value: stack,
5594 });
5595 } catch (e) {
5596 // noop
5597 }
5598
5599 return infiniteLoopError;
5600 }
5601
5602 /**
5603 * @param {Date} target
5604 * @param {Date} source
5605 * @returns {Date} the target after modifications
5606 */
5607 function mirrorDateProperties(target, source) {
5608 let prop;
5609 for (prop in source) {
5610 if (source.hasOwnProperty(prop)) {
5611 target[prop] = source[prop];
5612 }
5613 }
5614
5615 // set special now implementation
5616 if (source.now) {
5617 target.now = function now() {
5618 return target.clock.now;
5619 };
5620 } else {
5621 delete target.now;
5622 }
5623
5624 // set special toSource implementation
5625 if (source.toSource) {
5626 target.toSource = function toSource() {
5627 return source.toSource();
5628 };
5629 } else {
5630 delete target.toSource;
5631 }
5632
5633 // set special toString implementation
5634 target.toString = function toString() {
5635 return source.toString();
5636 };
5637
5638 target.prototype = source.prototype;
5639 target.parse = source.parse;
5640 target.UTC = source.UTC;
5641 target.prototype.toUTCString = source.prototype.toUTCString;
5642 target.isFake = true;
5643
5644 return target;
5645 }
5646
5647 //eslint-disable-next-line jsdoc/require-jsdoc
5648 function createDate() {
5649 /**
5650 * @param {number} year
5651 * @param {number} month
5652 * @param {number} date
5653 * @param {number} hour
5654 * @param {number} minute
5655 * @param {number} second
5656 * @param {number} ms
5657 * @returns {Date}
5658 */
5659 function ClockDate(year, month, date, hour, minute, second, ms) {
5660 // the Date constructor called as a function, ref Ecma-262 Edition 5.1, section 15.9.2.
5661 // This remains so in the 10th edition of 2019 as well.
5662 if (!(this instanceof ClockDate)) {
5663 return new NativeDate(ClockDate.clock.now).toString();
5664 }
5665
5666 // if Date is called as a constructor with 'new' keyword
5667 // Defensive and verbose to avoid potential harm in passing
5668 // explicit undefined when user does not pass argument
5669 switch (arguments.length) {
5670 case 0:
5671 return new NativeDate(ClockDate.clock.now);
5672 case 1:
5673 return new NativeDate(year);
5674 case 2:
5675 return new NativeDate(year, month);
5676 case 3:
5677 return new NativeDate(year, month, date);
5678 case 4:
5679 return new NativeDate(year, month, date, hour);
5680 case 5:
5681 return new NativeDate(year, month, date, hour, minute);
5682 case 6:
5683 return new NativeDate(
5684 year,
5685 month,
5686 date,
5687 hour,
5688 minute,
5689 second
5690 );
5691 default:
5692 return new NativeDate(
5693 year,
5694 month,
5695 date,
5696 hour,
5697 minute,
5698 second,
5699 ms
5700 );
5701 }
5702 }
5703
5704 return mirrorDateProperties(ClockDate, NativeDate);
5705 }
5706
5707 //eslint-disable-next-line jsdoc/require-jsdoc
5708 function enqueueJob(clock, job) {
5709 // enqueues a microtick-deferred task - ecma262/#sec-enqueuejob
5710 if (!clock.jobs) {
5711 clock.jobs = [];
5712 }
5713 clock.jobs.push(job);
5714 }
5715
5716 //eslint-disable-next-line jsdoc/require-jsdoc
5717 function runJobs(clock) {
5718 // runs all microtick-deferred tasks - ecma262/#sec-runjobs
5719 if (!clock.jobs) {
5720 return;
5721 }
5722 for (let i = 0; i < clock.jobs.length; i++) {
5723 const job = clock.jobs[i];
5724 job.func.apply(null, job.args);
5725
5726 checkIsNearInfiniteLimit(clock, i);
5727 if (clock.loopLimit && i > clock.loopLimit) {
5728 throw getInfiniteLoopError(clock, job);
5729 }
5730 }
5731 resetIsNearInfiniteLimit();
5732 clock.jobs = [];
5733 }
5734
5735 /**
5736 * @param {Clock} clock
5737 * @param {Timer} timer
5738 * @returns {number} id of the created timer
5739 */
5740 function addTimer(clock, timer) {
5741 if (timer.func === undefined) {
5742 throw new Error("Callback must be provided to timer calls");
5743 }
5744
5745 if (addTimerReturnsObject) {
5746 // Node.js environment
5747 if (typeof timer.func !== "function") {
5748 throw new TypeError(
5749 `[ERR_INVALID_CALLBACK]: Callback must be a function. Received ${
5750 timer.func
5751 } of type ${typeof timer.func}`
5752 );
5753 }
5754 }
5755
5756 if (isNearInfiniteLimit) {
5757 timer.error = new Error();
5758 }
5759
5760 timer.type = timer.immediate ? "Immediate" : "Timeout";
5761
5762 if (timer.hasOwnProperty("delay")) {
5763 if (typeof timer.delay !== "number") {
5764 timer.delay = parseInt(timer.delay, 10);
5765 }
5766
5767 if (!isNumberFinite(timer.delay)) {
5768 timer.delay = 0;
5769 }
5770 timer.delay = timer.delay > maxTimeout ? 1 : timer.delay;
5771 timer.delay = Math.max(0, timer.delay);
5772 }
5773
5774 if (timer.hasOwnProperty("interval")) {
5775 timer.type = "Interval";
5776 timer.interval = timer.interval > maxTimeout ? 1 : timer.interval;
5777 }
5778
5779 if (timer.hasOwnProperty("animation")) {
5780 timer.type = "AnimationFrame";
5781 timer.animation = true;
5782 }
5783
5784 if (timer.hasOwnProperty("idleCallback")) {
5785 timer.type = "IdleCallback";
5786 timer.idleCallback = true;
5787 }
5788
5789 if (!clock.timers) {
5790 clock.timers = {};
5791 }
5792
5793 timer.id = uniqueTimerId++;
5794 timer.createdAt = clock.now;
5795 timer.callAt =
5796 clock.now + (parseInt(timer.delay) || (clock.duringTick ? 1 : 0));
5797
5798 clock.timers[timer.id] = timer;
5799
5800 if (addTimerReturnsObject) {
5801 const res = {
5802 refed: true,
5803 ref: function () {
5804 this.refed = true;
5805 return res;
5806 },
5807 unref: function () {
5808 this.refed = false;
5809 return res;
5810 },
5811 hasRef: function () {
5812 return this.refed;
5813 },
5814 refresh: function () {
5815 timer.callAt =
5816 clock.now +
5817 (parseInt(timer.delay) || (clock.duringTick ? 1 : 0));
5818
5819 // it _might_ have been removed, but if not the assignment is perfectly fine
5820 clock.timers[timer.id] = timer;
5821
5822 return res;
5823 },
5824 [Symbol.toPrimitive]: function () {
5825 return timer.id;
5826 },
5827 };
5828 return res;
5829 }
5830
5831 return timer.id;
5832 }
5833
5834 /* eslint consistent-return: "off" */
5835 /**
5836 * Timer comparitor
5837 *
5838 * @param {Timer} a
5839 * @param {Timer} b
5840 * @returns {number}
5841 */
5842 function compareTimers(a, b) {
5843 // Sort first by absolute timing
5844 if (a.callAt < b.callAt) {
5845 return -1;
5846 }
5847 if (a.callAt > b.callAt) {
5848 return 1;
5849 }
5850
5851 // Sort next by immediate, immediate timers take precedence
5852 if (a.immediate && !b.immediate) {
5853 return -1;
5854 }
5855 if (!a.immediate && b.immediate) {
5856 return 1;
5857 }
5858
5859 // Sort next by creation time, earlier-created timers take precedence
5860 if (a.createdAt < b.createdAt) {
5861 return -1;
5862 }
5863 if (a.createdAt > b.createdAt) {
5864 return 1;
5865 }
5866
5867 // Sort next by id, lower-id timers take precedence
5868 if (a.id < b.id) {
5869 return -1;
5870 }
5871 if (a.id > b.id) {
5872 return 1;
5873 }
5874
5875 // As timer ids are unique, no fallback `0` is necessary
5876 }
5877
5878 /**
5879 * @param {Clock} clock
5880 * @param {number} from
5881 * @param {number} to
5882 * @returns {Timer}
5883 */
5884 function firstTimerInRange(clock, from, to) {
5885 const timers = clock.timers;
5886 let timer = null;
5887 let id, isInRange;
5888
5889 for (id in timers) {
5890 if (timers.hasOwnProperty(id)) {
5891 isInRange = inRange(from, to, timers[id]);
5892
5893 if (
5894 isInRange &&
5895 (!timer || compareTimers(timer, timers[id]) === 1)
5896 ) {
5897 timer = timers[id];
5898 }
5899 }
5900 }
5901
5902 return timer;
5903 }
5904
5905 /**
5906 * @param {Clock} clock
5907 * @returns {Timer}
5908 */
5909 function firstTimer(clock) {
5910 const timers = clock.timers;
5911 let timer = null;
5912 let id;
5913
5914 for (id in timers) {
5915 if (timers.hasOwnProperty(id)) {
5916 if (!timer || compareTimers(timer, timers[id]) === 1) {
5917 timer = timers[id];
5918 }
5919 }
5920 }
5921
5922 return timer;
5923 }
5924
5925 /**
5926 * @param {Clock} clock
5927 * @returns {Timer}
5928 */
5929 function lastTimer(clock) {
5930 const timers = clock.timers;
5931 let timer = null;
5932 let id;
5933
5934 for (id in timers) {
5935 if (timers.hasOwnProperty(id)) {
5936 if (!timer || compareTimers(timer, timers[id]) === -1) {
5937 timer = timers[id];
5938 }
5939 }
5940 }
5941
5942 return timer;
5943 }
5944
5945 /**
5946 * @param {Clock} clock
5947 * @param {Timer} timer
5948 */
5949 function callTimer(clock, timer) {
5950 if (typeof timer.interval === "number") {
5951 clock.timers[timer.id].callAt += timer.interval;
5952 } else {
5953 delete clock.timers[timer.id];
5954 }
5955
5956 if (typeof timer.func === "function") {
5957 timer.func.apply(null, timer.args);
5958 } else {
5959 /* eslint no-eval: "off" */
5960 const eval2 = eval;
5961 (function () {
5962 eval2(timer.func);
5963 })();
5964 }
5965 }
5966
5967 /**
5968 * Gets clear handler name for a given timer type
5969 *
5970 * @param {string} ttype
5971 */
5972 function getClearHandler(ttype) {
5973 if (ttype === "IdleCallback" || ttype === "AnimationFrame") {
5974 return `cancel${ttype}`;
5975 }
5976 return `clear${ttype}`;
5977 }
5978
5979 /**
5980 * Gets schedule handler name for a given timer type
5981 *
5982 * @param {string} ttype
5983 */
5984 function getScheduleHandler(ttype) {
5985 if (ttype === "IdleCallback" || ttype === "AnimationFrame") {
5986 return `request${ttype}`;
5987 }
5988 return `set${ttype}`;
5989 }
5990
5991 /**
5992 * Creates an anonymous function to warn only once
5993 */
5994 function createWarnOnce() {
5995 let calls = 0;
5996 return function (msg) {
5997 // eslint-disable-next-line
5998 !calls++ && console.warn(msg);
5999 };
6000 }
6001 const warnOnce = createWarnOnce();
6002
6003 /**
6004 * @param {Clock} clock
6005 * @param {number} timerId
6006 * @param {string} ttype
6007 */
6008 function clearTimer(clock, timerId, ttype) {
6009 if (!timerId) {
6010 // null appears to be allowed in most browsers, and appears to be
6011 // relied upon by some libraries, like Bootstrap carousel
6012 return;
6013 }
6014
6015 if (!clock.timers) {
6016 clock.timers = {};
6017 }
6018
6019 // in Node, the ID is stored as the primitive value for `Timeout` objects
6020 // for `Immediate` objects, no ID exists, so it gets coerced to NaN
6021 const id = Number(timerId);
6022
6023 if (Number.isNaN(id) || id < idCounterStart) {
6024 const handlerName = getClearHandler(ttype);
6025
6026 if (clock.shouldClearNativeTimers === true) {
6027 const nativeHandler = clock[`_${handlerName}`];
6028 return typeof nativeHandler === "function"
6029 ? nativeHandler(timerId)
6030 : undefined;
6031 }
6032 warnOnce(
6033 `FakeTimers: ${handlerName} was invoked to clear a native timer instead of one created by this library.` +
6034 "\nTo automatically clean-up native timers, use `shouldClearNativeTimers`."
6035 );
6036 }
6037
6038 if (clock.timers.hasOwnProperty(id)) {
6039 // check that the ID matches a timer of the correct type
6040 const timer = clock.timers[id];
6041 if (
6042 timer.type === ttype ||
6043 (timer.type === "Timeout" && ttype === "Interval") ||
6044 (timer.type === "Interval" && ttype === "Timeout")
6045 ) {
6046 delete clock.timers[id];
6047 } else {
6048 const clear = getClearHandler(ttype);
6049 const schedule = getScheduleHandler(timer.type);
6050 throw new Error(
6051 `Cannot clear timer: timer created with ${schedule}() but cleared with ${clear}()`
6052 );
6053 }
6054 }
6055 }
6056
6057 /**
6058 * @param {Clock} clock
6059 * @param {Config} config
6060 * @returns {Timer[]}
6061 */
6062 function uninstall(clock, config) {
6063 let method, i, l;
6064 const installedHrTime = "_hrtime";
6065 const installedNextTick = "_nextTick";
6066
6067 for (i = 0, l = clock.methods.length; i < l; i++) {
6068 method = clock.methods[i];
6069 if (method === "hrtime" && _global.process) {
6070 _global.process.hrtime = clock[installedHrTime];
6071 } else if (method === "nextTick" && _global.process) {
6072 _global.process.nextTick = clock[installedNextTick];
6073 } else if (method === "performance") {
6074 const originalPerfDescriptor = Object.getOwnPropertyDescriptor(
6075 clock,
6076 `_${method}`
6077 );
6078 if (
6079 originalPerfDescriptor &&
6080 originalPerfDescriptor.get &&
6081 !originalPerfDescriptor.set
6082 ) {
6083 Object.defineProperty(
6084 _global,
6085 method,
6086 originalPerfDescriptor
6087 );
6088 } else if (originalPerfDescriptor.configurable) {
6089 _global[method] = clock[`_${method}`];
6090 }
6091 } else {
6092 if (_global[method] && _global[method].hadOwnProperty) {
6093 _global[method] = clock[`_${method}`];
6094 } else {
6095 try {
6096 delete _global[method];
6097 } catch (ignore) {
6098 /* eslint no-empty: "off" */
6099 }
6100 }
6101 }
6102 }
6103
6104 if (config.shouldAdvanceTime === true) {
6105 _global.clearInterval(clock.attachedInterval);
6106 }
6107
6108 // Prevent multiple executions which will completely remove these props
6109 clock.methods = [];
6110
6111 // return pending timers, to enable checking what timers remained on uninstall
6112 if (!clock.timers) {
6113 return [];
6114 }
6115 return Object.keys(clock.timers).map(function mapper(key) {
6116 return clock.timers[key];
6117 });
6118 }
6119
6120 /**
6121 * @param {object} target the target containing the method to replace
6122 * @param {string} method the keyname of the method on the target
6123 * @param {Clock} clock
6124 */
6125 function hijackMethod(target, method, clock) {
6126 clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(
6127 target,
6128 method
6129 );
6130 clock[`_${method}`] = target[method];
6131
6132 if (method === "Date") {
6133 const date = mirrorDateProperties(clock[method], target[method]);
6134 target[method] = date;
6135 } else if (method === "performance") {
6136 const originalPerfDescriptor = Object.getOwnPropertyDescriptor(
6137 target,
6138 method
6139 );
6140 // JSDOM has a read only performance field so we have to save/copy it differently
6141 if (
6142 originalPerfDescriptor &&
6143 originalPerfDescriptor.get &&
6144 !originalPerfDescriptor.set
6145 ) {
6146 Object.defineProperty(
6147 clock,
6148 `_${method}`,
6149 originalPerfDescriptor
6150 );
6151
6152 const perfDescriptor = Object.getOwnPropertyDescriptor(
6153 clock,
6154 method
6155 );
6156 Object.defineProperty(target, method, perfDescriptor);
6157 } else {
6158 target[method] = clock[method];
6159 }
6160 } else {
6161 target[method] = function () {
6162 return clock[method].apply(clock, arguments);
6163 };
6164
6165 Object.defineProperties(
6166 target[method],
6167 Object.getOwnPropertyDescriptors(clock[method])
6168 );
6169 }
6170
6171 target[method].clock = clock;
6172 }
6173
6174 /**
6175 * @param {Clock} clock
6176 * @param {number} advanceTimeDelta
6177 */
6178 function doIntervalTick(clock, advanceTimeDelta) {
6179 clock.tick(advanceTimeDelta);
6180 }
6181
6182 /**
6183 * @typedef {object} Timers
6184 * @property {setTimeout} setTimeout
6185 * @property {clearTimeout} clearTimeout
6186 * @property {setInterval} setInterval
6187 * @property {clearInterval} clearInterval
6188 * @property {Date} Date
6189 * @property {SetImmediate=} setImmediate
6190 * @property {function(NodeImmediate): void=} clearImmediate
6191 * @property {function(number[]):number[]=} hrtime
6192 * @property {NextTick=} nextTick
6193 * @property {Performance=} performance
6194 * @property {RequestAnimationFrame=} requestAnimationFrame
6195 * @property {boolean=} queueMicrotask
6196 * @property {function(number): void=} cancelAnimationFrame
6197 * @property {RequestIdleCallback=} requestIdleCallback
6198 * @property {function(number): void=} cancelIdleCallback
6199 */
6200
6201 /** @type {Timers} */
6202 const timers = {
6203 setTimeout: _global.setTimeout,
6204 clearTimeout: _global.clearTimeout,
6205 setInterval: _global.setInterval,
6206 clearInterval: _global.clearInterval,
6207 Date: _global.Date,
6208 };
6209
6210 if (setImmediatePresent) {
6211 timers.setImmediate = _global.setImmediate;
6212 timers.clearImmediate = _global.clearImmediate;
6213 }
6214
6215 if (hrtimePresent) {
6216 timers.hrtime = _global.process.hrtime;
6217 }
6218
6219 if (nextTickPresent) {
6220 timers.nextTick = _global.process.nextTick;
6221 }
6222
6223 if (performancePresent) {
6224 timers.performance = _global.performance;
6225 }
6226
6227 if (requestAnimationFramePresent) {
6228 timers.requestAnimationFrame = _global.requestAnimationFrame;
6229 }
6230
6231 if (queueMicrotaskPresent) {
6232 timers.queueMicrotask = true;
6233 }
6234
6235 if (cancelAnimationFramePresent) {
6236 timers.cancelAnimationFrame = _global.cancelAnimationFrame;
6237 }
6238
6239 if (requestIdleCallbackPresent) {
6240 timers.requestIdleCallback = _global.requestIdleCallback;
6241 }
6242
6243 if (cancelIdleCallbackPresent) {
6244 timers.cancelIdleCallback = _global.cancelIdleCallback;
6245 }
6246
6247 const originalSetTimeout = _global.setImmediate || _global.setTimeout;
6248
6249 /**
6250 * @param {Date|number} [start] the system time - non-integer values are floored
6251 * @param {number} [loopLimit] maximum number of timers that will be run when calling runAll()
6252 * @returns {Clock}
6253 */
6254 function createClock(start, loopLimit) {
6255 // eslint-disable-next-line no-param-reassign
6256 start = Math.floor(getEpoch(start));
6257 // eslint-disable-next-line no-param-reassign
6258 loopLimit = loopLimit || 1000;
6259 let nanos = 0;
6260 const adjustedSystemTime = [0, 0]; // [millis, nanoremainder]
6261
6262 if (NativeDate === undefined) {
6263 throw new Error(
6264 "The global scope doesn't have a `Date` object" +
6265 " (see https://github.com/sinonjs/sinon/issues/1852#issuecomment-419622780)"
6266 );
6267 }
6268
6269 const clock = {
6270 now: start,
6271 Date: createDate(),
6272 loopLimit: loopLimit,
6273 };
6274
6275 clock.Date.clock = clock;
6276
6277 //eslint-disable-next-line jsdoc/require-jsdoc
6278 function getTimeToNextFrame() {
6279 return 16 - ((clock.now - start) % 16);
6280 }
6281
6282 //eslint-disable-next-line jsdoc/require-jsdoc
6283 function hrtime(prev) {
6284 const millisSinceStart = clock.now - adjustedSystemTime[0] - start;
6285 const secsSinceStart = Math.floor(millisSinceStart / 1000);
6286 const remainderInNanos =
6287 (millisSinceStart - secsSinceStart * 1e3) * 1e6 +
6288 nanos -
6289 adjustedSystemTime[1];
6290
6291 if (Array.isArray(prev)) {
6292 if (prev[1] > 1e9) {
6293 throw new TypeError(
6294 "Number of nanoseconds can't exceed a billion"
6295 );
6296 }
6297
6298 const oldSecs = prev[0];
6299 let nanoDiff = remainderInNanos - prev[1];
6300 let secDiff = secsSinceStart - oldSecs;
6301
6302 if (nanoDiff < 0) {
6303 nanoDiff += 1e9;
6304 secDiff -= 1;
6305 }
6306
6307 return [secDiff, nanoDiff];
6308 }
6309 return [secsSinceStart, remainderInNanos];
6310 }
6311
6312 function fakePerformanceNow() {
6313 const hrt = hrtime();
6314 const millis = hrt[0] * 1000 + hrt[1] / 1e6;
6315 return millis;
6316 }
6317
6318 if (hrtimeBigintPresent) {
6319 hrtime.bigint = function () {
6320 const parts = hrtime();
6321 return BigInt(parts[0]) * BigInt(1e9) + BigInt(parts[1]); // eslint-disable-line
6322 };
6323 }
6324
6325 clock.requestIdleCallback = function requestIdleCallback(
6326 func,
6327 timeout
6328 ) {
6329 let timeToNextIdlePeriod = 0;
6330
6331 if (clock.countTimers() > 0) {
6332 timeToNextIdlePeriod = 50; // const for now
6333 }
6334
6335 const result = addTimer(clock, {
6336 func: func,
6337 args: Array.prototype.slice.call(arguments, 2),
6338 delay:
6339 typeof timeout === "undefined"
6340 ? timeToNextIdlePeriod
6341 : Math.min(timeout, timeToNextIdlePeriod),
6342 idleCallback: true,
6343 });
6344
6345 return Number(result);
6346 };
6347
6348 clock.cancelIdleCallback = function cancelIdleCallback(timerId) {
6349 return clearTimer(clock, timerId, "IdleCallback");
6350 };
6351
6352 clock.setTimeout = function setTimeout(func, timeout) {
6353 return addTimer(clock, {
6354 func: func,
6355 args: Array.prototype.slice.call(arguments, 2),
6356 delay: timeout,
6357 });
6358 };
6359 if (typeof _global.Promise !== "undefined" && utilPromisify) {
6360 clock.setTimeout[utilPromisify.custom] =
6361 function promisifiedSetTimeout(timeout, arg) {
6362 return new _global.Promise(function setTimeoutExecutor(
6363 resolve
6364 ) {
6365 addTimer(clock, {
6366 func: resolve,
6367 args: [arg],
6368 delay: timeout,
6369 });
6370 });
6371 };
6372 }
6373
6374 clock.clearTimeout = function clearTimeout(timerId) {
6375 return clearTimer(clock, timerId, "Timeout");
6376 };
6377
6378 clock.nextTick = function nextTick(func) {
6379 return enqueueJob(clock, {
6380 func: func,
6381 args: Array.prototype.slice.call(arguments, 1),
6382 error: isNearInfiniteLimit ? new Error() : null,
6383 });
6384 };
6385
6386 clock.queueMicrotask = function queueMicrotask(func) {
6387 return clock.nextTick(func); // explicitly drop additional arguments
6388 };
6389
6390 clock.setInterval = function setInterval(func, timeout) {
6391 // eslint-disable-next-line no-param-reassign
6392 timeout = parseInt(timeout, 10);
6393 return addTimer(clock, {
6394 func: func,
6395 args: Array.prototype.slice.call(arguments, 2),
6396 delay: timeout,
6397 interval: timeout,
6398 });
6399 };
6400
6401 clock.clearInterval = function clearInterval(timerId) {
6402 return clearTimer(clock, timerId, "Interval");
6403 };
6404
6405 if (setImmediatePresent) {
6406 clock.setImmediate = function setImmediate(func) {
6407 return addTimer(clock, {
6408 func: func,
6409 args: Array.prototype.slice.call(arguments, 1),
6410 immediate: true,
6411 });
6412 };
6413
6414 if (typeof _global.Promise !== "undefined" && utilPromisify) {
6415 clock.setImmediate[utilPromisify.custom] =
6416 function promisifiedSetImmediate(arg) {
6417 return new _global.Promise(
6418 function setImmediateExecutor(resolve) {
6419 addTimer(clock, {
6420 func: resolve,
6421 args: [arg],
6422 immediate: true,
6423 });
6424 }
6425 );
6426 };
6427 }
6428
6429 clock.clearImmediate = function clearImmediate(timerId) {
6430 return clearTimer(clock, timerId, "Immediate");
6431 };
6432 }
6433
6434 clock.countTimers = function countTimers() {
6435 return (
6436 Object.keys(clock.timers || {}).length +
6437 (clock.jobs || []).length
6438 );
6439 };
6440
6441 clock.requestAnimationFrame = function requestAnimationFrame(func) {
6442 const result = addTimer(clock, {
6443 func: func,
6444 delay: getTimeToNextFrame(),
6445 get args() {
6446 return [fakePerformanceNow()];
6447 },
6448 animation: true,
6449 });
6450
6451 return Number(result);
6452 };
6453
6454 clock.cancelAnimationFrame = function cancelAnimationFrame(timerId) {
6455 return clearTimer(clock, timerId, "AnimationFrame");
6456 };
6457
6458 clock.runMicrotasks = function runMicrotasks() {
6459 runJobs(clock);
6460 };
6461
6462 /**
6463 * @param {number|string} tickValue milliseconds or a string parseable by parseTime
6464 * @param {boolean} isAsync
6465 * @param {Function} resolve
6466 * @param {Function} reject
6467 * @returns {number|undefined} will return the new `now` value or nothing for async
6468 */
6469 function doTick(tickValue, isAsync, resolve, reject) {
6470 const msFloat =
6471 typeof tickValue === "number"
6472 ? tickValue
6473 : parseTime(tickValue);
6474 const ms = Math.floor(msFloat);
6475 const remainder = nanoRemainder(msFloat);
6476 let nanosTotal = nanos + remainder;
6477 let tickTo = clock.now + ms;
6478
6479 if (msFloat < 0) {
6480 throw new TypeError("Negative ticks are not supported");
6481 }
6482
6483 // adjust for positive overflow
6484 if (nanosTotal >= 1e6) {
6485 tickTo += 1;
6486 nanosTotal -= 1e6;
6487 }
6488
6489 nanos = nanosTotal;
6490 let tickFrom = clock.now;
6491 let previous = clock.now;
6492 // ESLint fails to detect this correctly
6493 /* eslint-disable prefer-const */
6494 let timer,
6495 firstException,
6496 oldNow,
6497 nextPromiseTick,
6498 compensationCheck,
6499 postTimerCall;
6500 /* eslint-enable prefer-const */
6501
6502 clock.duringTick = true;
6503
6504 // perform microtasks
6505 oldNow = clock.now;
6506 runJobs(clock);
6507 if (oldNow !== clock.now) {
6508 // compensate for any setSystemTime() call during microtask callback
6509 tickFrom += clock.now - oldNow;
6510 tickTo += clock.now - oldNow;
6511 }
6512
6513 //eslint-disable-next-line jsdoc/require-jsdoc
6514 function doTickInner() {
6515 // perform each timer in the requested range
6516 timer = firstTimerInRange(clock, tickFrom, tickTo);
6517 // eslint-disable-next-line no-unmodified-loop-condition
6518 while (timer && tickFrom <= tickTo) {
6519 if (clock.timers[timer.id]) {
6520 tickFrom = timer.callAt;
6521 clock.now = timer.callAt;
6522 oldNow = clock.now;
6523 try {
6524 runJobs(clock);
6525 callTimer(clock, timer);
6526 } catch (e) {
6527 firstException = firstException || e;
6528 }
6529
6530 if (isAsync) {
6531 // finish up after native setImmediate callback to allow
6532 // all native es6 promises to process their callbacks after
6533 // each timer fires.
6534 originalSetTimeout(nextPromiseTick);
6535 return;
6536 }
6537
6538 compensationCheck();
6539 }
6540
6541 postTimerCall();
6542 }
6543
6544 // perform process.nextTick()s again
6545 oldNow = clock.now;
6546 runJobs(clock);
6547 if (oldNow !== clock.now) {
6548 // compensate for any setSystemTime() call during process.nextTick() callback
6549 tickFrom += clock.now - oldNow;
6550 tickTo += clock.now - oldNow;
6551 }
6552 clock.duringTick = false;
6553
6554 // corner case: during runJobs new timers were scheduled which could be in the range [clock.now, tickTo]
6555 timer = firstTimerInRange(clock, tickFrom, tickTo);
6556 if (timer) {
6557 try {
6558 clock.tick(tickTo - clock.now); // do it all again - for the remainder of the requested range
6559 } catch (e) {
6560 firstException = firstException || e;
6561 }
6562 } else {
6563 // no timers remaining in the requested range: move the clock all the way to the end
6564 clock.now = tickTo;
6565
6566 // update nanos
6567 nanos = nanosTotal;
6568 }
6569 if (firstException) {
6570 throw firstException;
6571 }
6572
6573 if (isAsync) {
6574 resolve(clock.now);
6575 } else {
6576 return clock.now;
6577 }
6578 }
6579
6580 nextPromiseTick =
6581 isAsync &&
6582 function () {
6583 try {
6584 compensationCheck();
6585 postTimerCall();
6586 doTickInner();
6587 } catch (e) {
6588 reject(e);
6589 }
6590 };
6591
6592 compensationCheck = function () {
6593 // compensate for any setSystemTime() call during timer callback
6594 if (oldNow !== clock.now) {
6595 tickFrom += clock.now - oldNow;
6596 tickTo += clock.now - oldNow;
6597 previous += clock.now - oldNow;
6598 }
6599 };
6600
6601 postTimerCall = function () {
6602 timer = firstTimerInRange(clock, previous, tickTo);
6603 previous = tickFrom;
6604 };
6605
6606 return doTickInner();
6607 }
6608
6609 /**
6610 * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15"
6611 * @returns {number} will return the new `now` value
6612 */
6613 clock.tick = function tick(tickValue) {
6614 return doTick(tickValue, false);
6615 };
6616
6617 if (typeof _global.Promise !== "undefined") {
6618 /**
6619 * @param {string|number} tickValue number of milliseconds or a human-readable value like "01:11:15"
6620 * @returns {Promise}
6621 */
6622 clock.tickAsync = function tickAsync(tickValue) {
6623 return new _global.Promise(function (resolve, reject) {
6624 originalSetTimeout(function () {
6625 try {
6626 doTick(tickValue, true, resolve, reject);
6627 } catch (e) {
6628 reject(e);
6629 }
6630 });
6631 });
6632 };
6633 }
6634
6635 clock.next = function next() {
6636 runJobs(clock);
6637 const timer = firstTimer(clock);
6638 if (!timer) {
6639 return clock.now;
6640 }
6641
6642 clock.duringTick = true;
6643 try {
6644 clock.now = timer.callAt;
6645 callTimer(clock, timer);
6646 runJobs(clock);
6647 return clock.now;
6648 } finally {
6649 clock.duringTick = false;
6650 }
6651 };
6652
6653 if (typeof _global.Promise !== "undefined") {
6654 clock.nextAsync = function nextAsync() {
6655 return new _global.Promise(function (resolve, reject) {
6656 originalSetTimeout(function () {
6657 try {
6658 const timer = firstTimer(clock);
6659 if (!timer) {
6660 resolve(clock.now);
6661 return;
6662 }
6663
6664 let err;
6665 clock.duringTick = true;
6666 clock.now = timer.callAt;
6667 try {
6668 callTimer(clock, timer);
6669 } catch (e) {
6670 err = e;
6671 }
6672 clock.duringTick = false;
6673
6674 originalSetTimeout(function () {
6675 if (err) {
6676 reject(err);
6677 } else {
6678 resolve(clock.now);
6679 }
6680 });
6681 } catch (e) {
6682 reject(e);
6683 }
6684 });
6685 });
6686 };
6687 }
6688
6689 clock.runAll = function runAll() {
6690 let numTimers, i;
6691 runJobs(clock);
6692 for (i = 0; i < clock.loopLimit; i++) {
6693 if (!clock.timers) {
6694 resetIsNearInfiniteLimit();
6695 return clock.now;
6696 }
6697
6698 numTimers = Object.keys(clock.timers).length;
6699 if (numTimers === 0) {
6700 resetIsNearInfiniteLimit();
6701 return clock.now;
6702 }
6703
6704 clock.next();
6705 checkIsNearInfiniteLimit(clock, i);
6706 }
6707
6708 const excessJob = firstTimer(clock);
6709 throw getInfiniteLoopError(clock, excessJob);
6710 };
6711
6712 clock.runToFrame = function runToFrame() {
6713 return clock.tick(getTimeToNextFrame());
6714 };
6715
6716 if (typeof _global.Promise !== "undefined") {
6717 clock.runAllAsync = function runAllAsync() {
6718 return new _global.Promise(function (resolve, reject) {
6719 let i = 0;
6720 /**
6721 *
6722 */
6723 function doRun() {
6724 originalSetTimeout(function () {
6725 try {
6726 let numTimers;
6727 if (i < clock.loopLimit) {
6728 if (!clock.timers) {
6729 resetIsNearInfiniteLimit();
6730 resolve(clock.now);
6731 return;
6732 }
6733
6734 numTimers = Object.keys(
6735 clock.timers
6736 ).length;
6737 if (numTimers === 0) {
6738 resetIsNearInfiniteLimit();
6739 resolve(clock.now);
6740 return;
6741 }
6742
6743 clock.next();
6744
6745 i++;
6746
6747 doRun();
6748 checkIsNearInfiniteLimit(clock, i);
6749 return;
6750 }
6751
6752 const excessJob = firstTimer(clock);
6753 reject(getInfiniteLoopError(clock, excessJob));
6754 } catch (e) {
6755 reject(e);
6756 }
6757 });
6758 }
6759 doRun();
6760 });
6761 };
6762 }
6763
6764 clock.runToLast = function runToLast() {
6765 const timer = lastTimer(clock);
6766 if (!timer) {
6767 runJobs(clock);
6768 return clock.now;
6769 }
6770
6771 return clock.tick(timer.callAt - clock.now);
6772 };
6773
6774 if (typeof _global.Promise !== "undefined") {
6775 clock.runToLastAsync = function runToLastAsync() {
6776 return new _global.Promise(function (resolve, reject) {
6777 originalSetTimeout(function () {
6778 try {
6779 const timer = lastTimer(clock);
6780 if (!timer) {
6781 resolve(clock.now);
6782 }
6783
6784 resolve(clock.tickAsync(timer.callAt - clock.now));
6785 } catch (e) {
6786 reject(e);
6787 }
6788 });
6789 });
6790 };
6791 }
6792
6793 clock.reset = function reset() {
6794 nanos = 0;
6795 clock.timers = {};
6796 clock.jobs = [];
6797 clock.now = start;
6798 };
6799
6800 clock.setSystemTime = function setSystemTime(systemTime) {
6801 // determine time difference
6802 const newNow = getEpoch(systemTime);
6803 const difference = newNow - clock.now;
6804 let id, timer;
6805
6806 adjustedSystemTime[0] = adjustedSystemTime[0] + difference;
6807 adjustedSystemTime[1] = adjustedSystemTime[1] + nanos;
6808 // update 'system clock'
6809 clock.now = newNow;
6810 nanos = 0;
6811
6812 // update timers and intervals to keep them stable
6813 for (id in clock.timers) {
6814 if (clock.timers.hasOwnProperty(id)) {
6815 timer = clock.timers[id];
6816 timer.createdAt += difference;
6817 timer.callAt += difference;
6818 }
6819 }
6820 };
6821
6822 if (performancePresent) {
6823 clock.performance = Object.create(null);
6824 clock.performance.now = fakePerformanceNow;
6825 }
6826
6827 if (hrtimePresent) {
6828 clock.hrtime = hrtime;
6829 }
6830
6831 return clock;
6832 }
6833
6834 /* eslint-disable complexity */
6835
6836 /**
6837 * @param {Config=} [config] Optional config
6838 * @returns {Clock}
6839 */
6840 function install(config) {
6841 if (
6842 arguments.length > 1 ||
6843 config instanceof Date ||
6844 Array.isArray(config) ||
6845 typeof config === "number"
6846 ) {
6847 throw new TypeError(
6848 `FakeTimers.install called with ${String(
6849 config
6850 )} install requires an object parameter`
6851 );
6852 }
6853
6854 if (_global.Date.isFake === true) {
6855 // Timers are already faked; this is a problem.
6856 // Make the user reset timers before continuing.
6857 throw new TypeError(
6858 "Can't install fake timers twice on the same global object."
6859 );
6860 }
6861
6862 // eslint-disable-next-line no-param-reassign
6863 config = typeof config !== "undefined" ? config : {};
6864 config.shouldAdvanceTime = config.shouldAdvanceTime || false;
6865 config.advanceTimeDelta = config.advanceTimeDelta || 20;
6866 config.shouldClearNativeTimers =
6867 config.shouldClearNativeTimers || false;
6868
6869 if (config.target) {
6870 throw new TypeError(
6871 "config.target is no longer supported. Use `withGlobal(target)` instead."
6872 );
6873 }
6874
6875 let i, l;
6876 const clock = createClock(config.now, config.loopLimit);
6877 clock.shouldClearNativeTimers = config.shouldClearNativeTimers;
6878
6879 clock.uninstall = function () {
6880 return uninstall(clock, config);
6881 };
6882
6883 clock.methods = config.toFake || [];
6884
6885 if (clock.methods.length === 0) {
6886 // do not fake nextTick by default - GitHub#126
6887 clock.methods = Object.keys(timers).filter(function (key) {
6888 return key !== "nextTick" && key !== "queueMicrotask";
6889 });
6890 }
6891
6892 if (config.shouldAdvanceTime === true) {
6893 const intervalTick = doIntervalTick.bind(
6894 null,
6895 clock,
6896 config.advanceTimeDelta
6897 );
6898 const intervalId = _global.setInterval(
6899 intervalTick,
6900 config.advanceTimeDelta
6901 );
6902 clock.attachedInterval = intervalId;
6903 }
6904
6905 if (clock.methods.includes("performance")) {
6906 const proto = (() => {
6907 if (hasPerformancePrototype) {
6908 return _global.Performance.prototype;
6909 }
6910 if (hasPerformanceConstructorPrototype) {
6911 return _global.performance.constructor.prototype;
6912 }
6913 })();
6914 if (proto) {
6915 Object.getOwnPropertyNames(proto).forEach(function (name) {
6916 if (name !== "now") {
6917 clock.performance[name] =
6918 name.indexOf("getEntries") === 0
6919 ? NOOP_ARRAY
6920 : NOOP;
6921 }
6922 });
6923 } else if ((config.toFake || []).includes("performance")) {
6924 // user explicitly tried to fake performance when not present
6925 throw new ReferenceError(
6926 "non-existent performance object cannot be faked"
6927 );
6928 }
6929 }
6930
6931 for (i = 0, l = clock.methods.length; i < l; i++) {
6932 const nameOfMethodToReplace = clock.methods[i];
6933 if (nameOfMethodToReplace === "hrtime") {
6934 if (
6935 _global.process &&
6936 typeof _global.process.hrtime === "function"
6937 ) {
6938 hijackMethod(_global.process, nameOfMethodToReplace, clock);
6939 }
6940 } else if (nameOfMethodToReplace === "nextTick") {
6941 if (
6942 _global.process &&
6943 typeof _global.process.nextTick === "function"
6944 ) {
6945 hijackMethod(_global.process, nameOfMethodToReplace, clock);
6946 }
6947 } else {
6948 hijackMethod(_global, nameOfMethodToReplace, clock);
6949 }
6950 }
6951
6952 return clock;
6953 }
6954
6955 /* eslint-enable complexity */
6956
6957 return {
6958 timers: timers,
6959 createClock: createClock,
6960 install: install,
6961 withGlobal: withGlobal,
6962 };
6963}
6964
6965/**
6966 * @typedef {object} FakeTimers
6967 * @property {Timers} timers
6968 * @property {createClock} createClock
6969 * @property {Function} install
6970 * @property {withGlobal} withGlobal
6971 */
6972
6973/* eslint-enable complexity */
6974
6975/** @type {FakeTimers} */
6976const defaultImplementation = withGlobal(globalObject);
6977
6978exports.timers = defaultImplementation.timers;
6979exports.createClock = defaultImplementation.createClock;
6980exports.install = defaultImplementation.install;
6981exports.withGlobal = withGlobal;
6982
6983},{"@sinonjs/commons":65,"util":130}],79:[function(require,module,exports){
6984"use strict";
6985
6986var ARRAY_TYPES = [
6987 Array,
6988 Int8Array,
6989 Uint8Array,
6990 Uint8ClampedArray,
6991 Int16Array,
6992 Uint16Array,
6993 Int32Array,
6994 Uint32Array,
6995 Float32Array,
6996 Float64Array,
6997];
6998
6999module.exports = ARRAY_TYPES;
7000
7001},{}],80:[function(require,module,exports){
7002"use strict";
7003
7004var arrayProto = require("@sinonjs/commons").prototypes.array;
7005var deepEqual = require("./deep-equal").use(createMatcher); // eslint-disable-line no-use-before-define
7006var every = require("@sinonjs/commons").every;
7007var functionName = require("@sinonjs/commons").functionName;
7008var get = require("lodash.get");
7009var iterableToString = require("./iterable-to-string");
7010var objectProto = require("@sinonjs/commons").prototypes.object;
7011var typeOf = require("@sinonjs/commons").typeOf;
7012var valueToString = require("@sinonjs/commons").valueToString;
7013
7014var assertMatcher = require("./create-matcher/assert-matcher");
7015var assertMethodExists = require("./create-matcher/assert-method-exists");
7016var assertType = require("./create-matcher/assert-type");
7017var isIterable = require("./create-matcher/is-iterable");
7018var isMatcher = require("./create-matcher/is-matcher");
7019
7020var matcherPrototype = require("./create-matcher/matcher-prototype");
7021
7022var arrayIndexOf = arrayProto.indexOf;
7023var some = arrayProto.some;
7024
7025var hasOwnProperty = objectProto.hasOwnProperty;
7026var objectToString = objectProto.toString;
7027
7028var TYPE_MAP = require("./create-matcher/type-map")(createMatcher); // eslint-disable-line no-use-before-define
7029
7030/**
7031 * Creates a matcher object for the passed expectation
7032 *
7033 * @alias module:samsam.createMatcher
7034 * @param {*} expectation An expecttation
7035 * @param {string} message A message for the expectation
7036 * @returns {object} A matcher object
7037 */
7038function createMatcher(expectation, message) {
7039 var m = Object.create(matcherPrototype);
7040 var type = typeOf(expectation);
7041
7042 if (message !== undefined && typeof message !== "string") {
7043 throw new TypeError("Message should be a string");
7044 }
7045
7046 if (arguments.length > 2) {
7047 throw new TypeError(
7048 `Expected 1 or 2 arguments, received ${arguments.length}`
7049 );
7050 }
7051
7052 if (type in TYPE_MAP) {
7053 TYPE_MAP[type](m, expectation, message);
7054 } else {
7055 m.test = function (actual) {
7056 return deepEqual(actual, expectation);
7057 };
7058 }
7059
7060 if (!m.message) {
7061 m.message = `match(${valueToString(expectation)})`;
7062 }
7063
7064 return m;
7065}
7066
7067createMatcher.isMatcher = isMatcher;
7068
7069createMatcher.any = createMatcher(function () {
7070 return true;
7071}, "any");
7072
7073createMatcher.defined = createMatcher(function (actual) {
7074 return actual !== null && actual !== undefined;
7075}, "defined");
7076
7077createMatcher.truthy = createMatcher(function (actual) {
7078 return Boolean(actual);
7079}, "truthy");
7080
7081createMatcher.falsy = createMatcher(function (actual) {
7082 return !actual;
7083}, "falsy");
7084
7085createMatcher.same = function (expectation) {
7086 return createMatcher(function (actual) {
7087 return expectation === actual;
7088 }, `same(${valueToString(expectation)})`);
7089};
7090
7091createMatcher.in = function (arrayOfExpectations) {
7092 if (typeOf(arrayOfExpectations) !== "array") {
7093 throw new TypeError("array expected");
7094 }
7095
7096 return createMatcher(function (actual) {
7097 return some(arrayOfExpectations, function (expectation) {
7098 return expectation === actual;
7099 });
7100 }, `in(${valueToString(arrayOfExpectations)})`);
7101};
7102
7103createMatcher.typeOf = function (type) {
7104 assertType(type, "string", "type");
7105 return createMatcher(function (actual) {
7106 return typeOf(actual) === type;
7107 }, `typeOf("${type}")`);
7108};
7109
7110createMatcher.instanceOf = function (type) {
7111 /* istanbul ignore if */
7112 if (
7113 typeof Symbol === "undefined" ||
7114 typeof Symbol.hasInstance === "undefined"
7115 ) {
7116 assertType(type, "function", "type");
7117 } else {
7118 assertMethodExists(
7119 type,
7120 Symbol.hasInstance,
7121 "type",
7122 "[Symbol.hasInstance]"
7123 );
7124 }
7125 return createMatcher(function (actual) {
7126 return actual instanceof type;
7127 }, `instanceOf(${functionName(type) || objectToString(type)})`);
7128};
7129
7130/**
7131 * Creates a property matcher
7132 *
7133 * @private
7134 * @param {Function} propertyTest A function to test the property against a value
7135 * @param {string} messagePrefix A prefix to use for messages generated by the matcher
7136 * @returns {object} A matcher
7137 */
7138function createPropertyMatcher(propertyTest, messagePrefix) {
7139 return function (property, value) {
7140 assertType(property, "string", "property");
7141 var onlyProperty = arguments.length === 1;
7142 var message = `${messagePrefix}("${property}"`;
7143 if (!onlyProperty) {
7144 message += `, ${valueToString(value)}`;
7145 }
7146 message += ")";
7147 return createMatcher(function (actual) {
7148 if (
7149 actual === undefined ||
7150 actual === null ||
7151 !propertyTest(actual, property)
7152 ) {
7153 return false;
7154 }
7155 return onlyProperty || deepEqual(actual[property], value);
7156 }, message);
7157 };
7158}
7159
7160createMatcher.has = createPropertyMatcher(function (actual, property) {
7161 if (typeof actual === "object") {
7162 return property in actual;
7163 }
7164 return actual[property] !== undefined;
7165}, "has");
7166
7167createMatcher.hasOwn = createPropertyMatcher(function (actual, property) {
7168 return hasOwnProperty(actual, property);
7169}, "hasOwn");
7170
7171createMatcher.hasNested = function (property, value) {
7172 assertType(property, "string", "property");
7173 var onlyProperty = arguments.length === 1;
7174 var message = `hasNested("${property}"`;
7175 if (!onlyProperty) {
7176 message += `, ${valueToString(value)}`;
7177 }
7178 message += ")";
7179 return createMatcher(function (actual) {
7180 if (
7181 actual === undefined ||
7182 actual === null ||
7183 get(actual, property) === undefined
7184 ) {
7185 return false;
7186 }
7187 return onlyProperty || deepEqual(get(actual, property), value);
7188 }, message);
7189};
7190
7191var jsonParseResultTypes = {
7192 null: true,
7193 boolean: true,
7194 number: true,
7195 string: true,
7196 object: true,
7197 array: true,
7198};
7199createMatcher.json = function (value) {
7200 if (!jsonParseResultTypes[typeOf(value)]) {
7201 throw new TypeError("Value cannot be the result of JSON.parse");
7202 }
7203 var message = `json(${JSON.stringify(value, null, " ")})`;
7204 return createMatcher(function (actual) {
7205 var parsed;
7206 try {
7207 parsed = JSON.parse(actual);
7208 } catch (e) {
7209 return false;
7210 }
7211 return deepEqual(parsed, value);
7212 }, message);
7213};
7214
7215createMatcher.every = function (predicate) {
7216 assertMatcher(predicate);
7217
7218 return createMatcher(function (actual) {
7219 if (typeOf(actual) === "object") {
7220 return every(Object.keys(actual), function (key) {
7221 return predicate.test(actual[key]);
7222 });
7223 }
7224
7225 return (
7226 isIterable(actual) &&
7227 every(actual, function (element) {
7228 return predicate.test(element);
7229 })
7230 );
7231 }, `every(${predicate.message})`);
7232};
7233
7234createMatcher.some = function (predicate) {
7235 assertMatcher(predicate);
7236
7237 return createMatcher(function (actual) {
7238 if (typeOf(actual) === "object") {
7239 return !every(Object.keys(actual), function (key) {
7240 return !predicate.test(actual[key]);
7241 });
7242 }
7243
7244 return (
7245 isIterable(actual) &&
7246 !every(actual, function (element) {
7247 return !predicate.test(element);
7248 })
7249 );
7250 }, `some(${predicate.message})`);
7251};
7252
7253createMatcher.array = createMatcher.typeOf("array");
7254
7255createMatcher.array.deepEquals = function (expectation) {
7256 return createMatcher(function (actual) {
7257 // Comparing lengths is the fastest way to spot a difference before iterating through every item
7258 var sameLength = actual.length === expectation.length;
7259 return (
7260 typeOf(actual) === "array" &&
7261 sameLength &&
7262 every(actual, function (element, index) {
7263 var expected = expectation[index];
7264 return typeOf(expected) === "array" &&
7265 typeOf(element) === "array"
7266 ? createMatcher.array.deepEquals(expected).test(element)
7267 : deepEqual(expected, element);
7268 })
7269 );
7270 }, `deepEquals([${iterableToString(expectation)}])`);
7271};
7272
7273createMatcher.array.startsWith = function (expectation) {
7274 return createMatcher(function (actual) {
7275 return (
7276 typeOf(actual) === "array" &&
7277 every(expectation, function (expectedElement, index) {
7278 return actual[index] === expectedElement;
7279 })
7280 );
7281 }, `startsWith([${iterableToString(expectation)}])`);
7282};
7283
7284createMatcher.array.endsWith = function (expectation) {
7285 return createMatcher(function (actual) {
7286 // This indicates the index in which we should start matching
7287 var offset = actual.length - expectation.length;
7288
7289 return (
7290 typeOf(actual) === "array" &&
7291 every(expectation, function (expectedElement, index) {
7292 return actual[offset + index] === expectedElement;
7293 })
7294 );
7295 }, `endsWith([${iterableToString(expectation)}])`);
7296};
7297
7298createMatcher.array.contains = function (expectation) {
7299 return createMatcher(function (actual) {
7300 return (
7301 typeOf(actual) === "array" &&
7302 every(expectation, function (expectedElement) {
7303 return arrayIndexOf(actual, expectedElement) !== -1;
7304 })
7305 );
7306 }, `contains([${iterableToString(expectation)}])`);
7307};
7308
7309createMatcher.map = createMatcher.typeOf("map");
7310
7311createMatcher.map.deepEquals = function mapDeepEquals(expectation) {
7312 return createMatcher(function (actual) {
7313 // Comparing lengths is the fastest way to spot a difference before iterating through every item
7314 var sameLength = actual.size === expectation.size;
7315 return (
7316 typeOf(actual) === "map" &&
7317 sameLength &&
7318 every(actual, function (element, key) {
7319 return expectation.has(key) && expectation.get(key) === element;
7320 })
7321 );
7322 }, `deepEquals(Map[${iterableToString(expectation)}])`);
7323};
7324
7325createMatcher.map.contains = function mapContains(expectation) {
7326 return createMatcher(function (actual) {
7327 return (
7328 typeOf(actual) === "map" &&
7329 every(expectation, function (element, key) {
7330 return actual.has(key) && actual.get(key) === element;
7331 })
7332 );
7333 }, `contains(Map[${iterableToString(expectation)}])`);
7334};
7335
7336createMatcher.set = createMatcher.typeOf("set");
7337
7338createMatcher.set.deepEquals = function setDeepEquals(expectation) {
7339 return createMatcher(function (actual) {
7340 // Comparing lengths is the fastest way to spot a difference before iterating through every item
7341 var sameLength = actual.size === expectation.size;
7342 return (
7343 typeOf(actual) === "set" &&
7344 sameLength &&
7345 every(actual, function (element) {
7346 return expectation.has(element);
7347 })
7348 );
7349 }, `deepEquals(Set[${iterableToString(expectation)}])`);
7350};
7351
7352createMatcher.set.contains = function setContains(expectation) {
7353 return createMatcher(function (actual) {
7354 return (
7355 typeOf(actual) === "set" &&
7356 every(expectation, function (element) {
7357 return actual.has(element);
7358 })
7359 );
7360 }, `contains(Set[${iterableToString(expectation)}])`);
7361};
7362
7363createMatcher.bool = createMatcher.typeOf("boolean");
7364createMatcher.number = createMatcher.typeOf("number");
7365createMatcher.string = createMatcher.typeOf("string");
7366createMatcher.object = createMatcher.typeOf("object");
7367createMatcher.func = createMatcher.typeOf("function");
7368createMatcher.regexp = createMatcher.typeOf("regexp");
7369createMatcher.date = createMatcher.typeOf("date");
7370createMatcher.symbol = createMatcher.typeOf("symbol");
7371
7372module.exports = createMatcher;
7373
7374},{"./create-matcher/assert-matcher":81,"./create-matcher/assert-method-exists":82,"./create-matcher/assert-type":83,"./create-matcher/is-iterable":84,"./create-matcher/is-matcher":85,"./create-matcher/matcher-prototype":87,"./create-matcher/type-map":88,"./deep-equal":89,"./iterable-to-string":103,"@sinonjs/commons":112,"lodash.get":133}],81:[function(require,module,exports){
7375"use strict";
7376
7377var isMatcher = require("./is-matcher");
7378
7379/**
7380 * Throws a TypeError when `value` is not a matcher
7381 *
7382 * @private
7383 * @param {*} value The value to examine
7384 */
7385function assertMatcher(value) {
7386 if (!isMatcher(value)) {
7387 throw new TypeError("Matcher expected");
7388 }
7389}
7390
7391module.exports = assertMatcher;
7392
7393},{"./is-matcher":85}],82:[function(require,module,exports){
7394"use strict";
7395
7396/**
7397 * Throws a TypeError when expected method doesn't exist
7398 *
7399 * @private
7400 * @param {*} value A value to examine
7401 * @param {string} method The name of the method to look for
7402 * @param {name} name A name to use for the error message
7403 * @param {string} methodPath The name of the method to use for error messages
7404 * @throws {TypeError} When the method doesn't exist
7405 */
7406function assertMethodExists(value, method, name, methodPath) {
7407 if (value[method] === null || value[method] === undefined) {
7408 throw new TypeError(`Expected ${name} to have method ${methodPath}`);
7409 }
7410}
7411
7412module.exports = assertMethodExists;
7413
7414},{}],83:[function(require,module,exports){
7415"use strict";
7416
7417var typeOf = require("@sinonjs/commons").typeOf;
7418
7419/**
7420 * Ensures that value is of type
7421 *
7422 * @private
7423 * @param {*} value A value to examine
7424 * @param {string} type A basic JavaScript type to compare to, e.g. "object", "string"
7425 * @param {string} name A string to use for the error message
7426 * @throws {TypeError} If value is not of the expected type
7427 * @returns {undefined}
7428 */
7429function assertType(value, type, name) {
7430 var actual = typeOf(value);
7431 if (actual !== type) {
7432 throw new TypeError(
7433 `Expected type of ${name} to be ${type}, but was ${actual}`
7434 );
7435 }
7436}
7437
7438module.exports = assertType;
7439
7440},{"@sinonjs/commons":112}],84:[function(require,module,exports){
7441"use strict";
7442
7443var typeOf = require("@sinonjs/commons").typeOf;
7444
7445/**
7446 * Returns `true` for iterables
7447 *
7448 * @private
7449 * @param {*} value A value to examine
7450 * @returns {boolean} Returns `true` when `value` looks like an iterable
7451 */
7452function isIterable(value) {
7453 return Boolean(value) && typeOf(value.forEach) === "function";
7454}
7455
7456module.exports = isIterable;
7457
7458},{"@sinonjs/commons":112}],85:[function(require,module,exports){
7459"use strict";
7460
7461var isPrototypeOf = require("@sinonjs/commons").prototypes.object.isPrototypeOf;
7462
7463var matcherPrototype = require("./matcher-prototype");
7464
7465/**
7466 * Returns `true` when `object` is a matcher
7467 *
7468 * @private
7469 * @param {*} object A value to examine
7470 * @returns {boolean} Returns `true` when `object` is a matcher
7471 */
7472function isMatcher(object) {
7473 return isPrototypeOf(matcherPrototype, object);
7474}
7475
7476module.exports = isMatcher;
7477
7478},{"./matcher-prototype":87,"@sinonjs/commons":112}],86:[function(require,module,exports){
7479"use strict";
7480
7481var every = require("@sinonjs/commons").prototypes.array.every;
7482var concat = require("@sinonjs/commons").prototypes.array.concat;
7483var typeOf = require("@sinonjs/commons").typeOf;
7484
7485var deepEqualFactory = require("../deep-equal").use;
7486
7487var isMatcher = require("./is-matcher");
7488
7489var keys = Object.keys;
7490var getOwnPropertySymbols = Object.getOwnPropertySymbols;
7491
7492/**
7493 * Matches `actual` with `expectation`
7494 *
7495 * @private
7496 * @param {*} actual A value to examine
7497 * @param {object} expectation An object with properties to match on
7498 * @param {object} matcher A matcher to use for comparison
7499 * @returns {boolean} Returns true when `actual` matches all properties in `expectation`
7500 */
7501function matchObject(actual, expectation, matcher) {
7502 var deepEqual = deepEqualFactory(matcher);
7503 if (actual === null || actual === undefined) {
7504 return false;
7505 }
7506
7507 var expectedKeys = keys(expectation);
7508 /* istanbul ignore else: cannot collect coverage for engine that doesn't support Symbol */
7509 if (typeOf(getOwnPropertySymbols) === "function") {
7510 expectedKeys = concat(expectedKeys, getOwnPropertySymbols(expectation));
7511 }
7512
7513 return every(expectedKeys, function (key) {
7514 var exp = expectation[key];
7515 var act = actual[key];
7516
7517 if (isMatcher(exp)) {
7518 if (!exp.test(act)) {
7519 return false;
7520 }
7521 } else if (typeOf(exp) === "object") {
7522 if (!matchObject(act, exp, matcher)) {
7523 return false;
7524 }
7525 } else if (!deepEqual(act, exp)) {
7526 return false;
7527 }
7528
7529 return true;
7530 });
7531}
7532
7533module.exports = matchObject;
7534
7535},{"../deep-equal":89,"./is-matcher":85,"@sinonjs/commons":112}],87:[function(require,module,exports){
7536"use strict";
7537
7538var matcherPrototype = {
7539 toString: function () {
7540 return this.message;
7541 },
7542};
7543
7544matcherPrototype.or = function (valueOrMatcher) {
7545 var createMatcher = require("../create-matcher");
7546 var isMatcher = createMatcher.isMatcher;
7547
7548 if (!arguments.length) {
7549 throw new TypeError("Matcher expected");
7550 }
7551
7552 var m2 = isMatcher(valueOrMatcher)
7553 ? valueOrMatcher
7554 : createMatcher(valueOrMatcher);
7555 var m1 = this;
7556 var or = Object.create(matcherPrototype);
7557 or.test = function (actual) {
7558 return m1.test(actual) || m2.test(actual);
7559 };
7560 or.message = `${m1.message}.or(${m2.message})`;
7561 return or;
7562};
7563
7564matcherPrototype.and = function (valueOrMatcher) {
7565 var createMatcher = require("../create-matcher");
7566 var isMatcher = createMatcher.isMatcher;
7567
7568 if (!arguments.length) {
7569 throw new TypeError("Matcher expected");
7570 }
7571
7572 var m2 = isMatcher(valueOrMatcher)
7573 ? valueOrMatcher
7574 : createMatcher(valueOrMatcher);
7575 var m1 = this;
7576 var and = Object.create(matcherPrototype);
7577 and.test = function (actual) {
7578 return m1.test(actual) && m2.test(actual);
7579 };
7580 and.message = `${m1.message}.and(${m2.message})`;
7581 return and;
7582};
7583
7584module.exports = matcherPrototype;
7585
7586},{"../create-matcher":80}],88:[function(require,module,exports){
7587"use strict";
7588
7589var functionName = require("@sinonjs/commons").functionName;
7590var join = require("@sinonjs/commons").prototypes.array.join;
7591var map = require("@sinonjs/commons").prototypes.array.map;
7592var stringIndexOf = require("@sinonjs/commons").prototypes.string.indexOf;
7593var valueToString = require("@sinonjs/commons").valueToString;
7594
7595var matchObject = require("./match-object");
7596
7597var createTypeMap = function (match) {
7598 return {
7599 function: function (m, expectation, message) {
7600 m.test = expectation;
7601 m.message = message || `match(${functionName(expectation)})`;
7602 },
7603 number: function (m, expectation) {
7604 m.test = function (actual) {
7605 // we need type coercion here
7606 return expectation == actual; // eslint-disable-line eqeqeq
7607 };
7608 },
7609 object: function (m, expectation) {
7610 var array = [];
7611
7612 if (typeof expectation.test === "function") {
7613 m.test = function (actual) {
7614 return expectation.test(actual) === true;
7615 };
7616 m.message = `match(${functionName(expectation.test)})`;
7617 return m;
7618 }
7619
7620 array = map(Object.keys(expectation), function (key) {
7621 return `${key}: ${valueToString(expectation[key])}`;
7622 });
7623
7624 m.test = function (actual) {
7625 return matchObject(actual, expectation, match);
7626 };
7627 m.message = `match(${join(array, ", ")})`;
7628
7629 return m;
7630 },
7631 regexp: function (m, expectation) {
7632 m.test = function (actual) {
7633 return typeof actual === "string" && expectation.test(actual);
7634 };
7635 },
7636 string: function (m, expectation) {
7637 m.test = function (actual) {
7638 return (
7639 typeof actual === "string" &&
7640 stringIndexOf(actual, expectation) !== -1
7641 );
7642 };
7643 m.message = `match("${expectation}")`;
7644 },
7645 };
7646};
7647
7648module.exports = createTypeMap;
7649
7650},{"./match-object":86,"@sinonjs/commons":112}],89:[function(require,module,exports){
7651"use strict";
7652
7653var valueToString = require("@sinonjs/commons").valueToString;
7654var className = require("@sinonjs/commons").className;
7655var typeOf = require("@sinonjs/commons").typeOf;
7656var arrayProto = require("@sinonjs/commons").prototypes.array;
7657var objectProto = require("@sinonjs/commons").prototypes.object;
7658var mapForEach = require("@sinonjs/commons").prototypes.map.forEach;
7659
7660var getClass = require("./get-class");
7661var identical = require("./identical");
7662var isArguments = require("./is-arguments");
7663var isArrayType = require("./is-array-type");
7664var isDate = require("./is-date");
7665var isElement = require("./is-element");
7666var isIterable = require("./is-iterable");
7667var isMap = require("./is-map");
7668var isNaN = require("./is-nan");
7669var isObject = require("./is-object");
7670var isSet = require("./is-set");
7671var isSubset = require("./is-subset");
7672
7673var concat = arrayProto.concat;
7674var every = arrayProto.every;
7675var push = arrayProto.push;
7676
7677var getTime = Date.prototype.getTime;
7678var hasOwnProperty = objectProto.hasOwnProperty;
7679var indexOf = arrayProto.indexOf;
7680var keys = Object.keys;
7681var getOwnPropertySymbols = Object.getOwnPropertySymbols;
7682
7683/**
7684 * Deep equal comparison. Two values are "deep equal" when:
7685 *
7686 * - They are equal, according to samsam.identical
7687 * - They are both date objects representing the same time
7688 * - They are both arrays containing elements that are all deepEqual
7689 * - They are objects with the same set of properties, and each property
7690 * in ``actual`` is deepEqual to the corresponding property in ``expectation``
7691 *
7692 * Supports cyclic objects.
7693 *
7694 * @alias module:samsam.deepEqual
7695 * @param {*} actual The object to examine
7696 * @param {*} expectation The object actual is expected to be equal to
7697 * @param {object} match A value to match on
7698 * @returns {boolean} Returns true when actual and expectation are considered equal
7699 */
7700function deepEqualCyclic(actual, expectation, match) {
7701 // used for cyclic comparison
7702 // contain already visited objects
7703 var actualObjects = [];
7704 var expectationObjects = [];
7705 // contain pathes (position in the object structure)
7706 // of the already visited objects
7707 // indexes same as in objects arrays
7708 var actualPaths = [];
7709 var expectationPaths = [];
7710 // contains combinations of already compared objects
7711 // in the manner: { "$1['ref']$2['ref']": true }
7712 var compared = {};
7713
7714 // does the recursion for the deep equal check
7715 // eslint-disable-next-line complexity
7716 return (function deepEqual(
7717 actualObj,
7718 expectationObj,
7719 actualPath,
7720 expectationPath
7721 ) {
7722 // If both are matchers they must be the same instance in order to be
7723 // considered equal If we didn't do that we would end up running one
7724 // matcher against the other
7725 if (match && match.isMatcher(expectationObj)) {
7726 if (match.isMatcher(actualObj)) {
7727 return actualObj === expectationObj;
7728 }
7729 return expectationObj.test(actualObj);
7730 }
7731
7732 var actualType = typeof actualObj;
7733 var expectationType = typeof expectationObj;
7734
7735 if (
7736 actualObj === expectationObj ||
7737 isNaN(actualObj) ||
7738 isNaN(expectationObj) ||
7739 actualObj === null ||
7740 expectationObj === null ||
7741 actualObj === undefined ||
7742 expectationObj === undefined ||
7743 actualType !== "object" ||
7744 expectationType !== "object"
7745 ) {
7746 return identical(actualObj, expectationObj);
7747 }
7748
7749 // Elements are only equal if identical(expected, actual)
7750 if (isElement(actualObj) || isElement(expectationObj)) {
7751 return false;
7752 }
7753
7754 var isActualDate = isDate(actualObj);
7755 var isExpectationDate = isDate(expectationObj);
7756 if (isActualDate || isExpectationDate) {
7757 if (
7758 !isActualDate ||
7759 !isExpectationDate ||
7760 getTime.call(actualObj) !== getTime.call(expectationObj)
7761 ) {
7762 return false;
7763 }
7764 }
7765
7766 if (actualObj instanceof RegExp && expectationObj instanceof RegExp) {
7767 if (valueToString(actualObj) !== valueToString(expectationObj)) {
7768 return false;
7769 }
7770 }
7771
7772 if (actualObj instanceof Promise && expectationObj instanceof Promise) {
7773 return actualObj === expectationObj;
7774 }
7775
7776 if (actualObj instanceof Error && expectationObj instanceof Error) {
7777 return actualObj === expectationObj;
7778 }
7779
7780 var actualClass = getClass(actualObj);
7781 var expectationClass = getClass(expectationObj);
7782 var actualKeys = keys(actualObj);
7783 var expectationKeys = keys(expectationObj);
7784 var actualName = className(actualObj);
7785 var expectationName = className(expectationObj);
7786 var expectationSymbols =
7787 typeOf(getOwnPropertySymbols) === "function"
7788 ? getOwnPropertySymbols(expectationObj)
7789 : /* istanbul ignore next: cannot collect coverage for engine that doesn't support Symbol */
7790 [];
7791 var expectationKeysAndSymbols = concat(
7792 expectationKeys,
7793 expectationSymbols
7794 );
7795
7796 if (isArguments(actualObj) || isArguments(expectationObj)) {
7797 if (actualObj.length !== expectationObj.length) {
7798 return false;
7799 }
7800 } else {
7801 if (
7802 actualType !== expectationType ||
7803 actualClass !== expectationClass ||
7804 actualKeys.length !== expectationKeys.length ||
7805 (actualName &&
7806 expectationName &&
7807 actualName !== expectationName)
7808 ) {
7809 return false;
7810 }
7811 }
7812
7813 if (isSet(actualObj) || isSet(expectationObj)) {
7814 if (
7815 !isSet(actualObj) ||
7816 !isSet(expectationObj) ||
7817 actualObj.size !== expectationObj.size
7818 ) {
7819 return false;
7820 }
7821
7822 return isSubset(actualObj, expectationObj, deepEqual);
7823 }
7824
7825 if (isMap(actualObj) || isMap(expectationObj)) {
7826 if (
7827 !isMap(actualObj) ||
7828 !isMap(expectationObj) ||
7829 actualObj.size !== expectationObj.size
7830 ) {
7831 return false;
7832 }
7833
7834 var mapsDeeplyEqual = true;
7835 mapForEach(actualObj, function (value, key) {
7836 mapsDeeplyEqual =
7837 mapsDeeplyEqual &&
7838 deepEqualCyclic(value, expectationObj.get(key));
7839 });
7840
7841 return mapsDeeplyEqual;
7842 }
7843
7844 // jQuery objects have iteration protocols
7845 // see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
7846 // But, they don't work well with the implementation concerning iterables below,
7847 // so we will detect them and use jQuery's own equality function
7848 /* istanbul ignore next -- this can only be tested in the `test-headless` script */
7849 if (
7850 actualObj.constructor &&
7851 actualObj.constructor.name === "jQuery" &&
7852 typeof actualObj.is === "function"
7853 ) {
7854 return actualObj.is(expectationObj);
7855 }
7856
7857 var isActualNonArrayIterable =
7858 isIterable(actualObj) &&
7859 !isArrayType(actualObj) &&
7860 !isArguments(actualObj);
7861 var isExpectationNonArrayIterable =
7862 isIterable(expectationObj) &&
7863 !isArrayType(expectationObj) &&
7864 !isArguments(expectationObj);
7865 if (isActualNonArrayIterable || isExpectationNonArrayIterable) {
7866 var actualArray = Array.from(actualObj);
7867 var expectationArray = Array.from(expectationObj);
7868 if (actualArray.length !== expectationArray.length) {
7869 return false;
7870 }
7871
7872 var arrayDeeplyEquals = true;
7873 every(actualArray, function (key) {
7874 arrayDeeplyEquals =
7875 arrayDeeplyEquals &&
7876 deepEqualCyclic(actualArray[key], expectationArray[key]);
7877 });
7878
7879 return arrayDeeplyEquals;
7880 }
7881
7882 return every(expectationKeysAndSymbols, function (key) {
7883 if (!hasOwnProperty(actualObj, key)) {
7884 return false;
7885 }
7886
7887 var actualValue = actualObj[key];
7888 var expectationValue = expectationObj[key];
7889 var actualObject = isObject(actualValue);
7890 var expectationObject = isObject(expectationValue);
7891 // determines, if the objects were already visited
7892 // (it's faster to check for isObject first, than to
7893 // get -1 from getIndex for non objects)
7894 var actualIndex = actualObject
7895 ? indexOf(actualObjects, actualValue)
7896 : -1;
7897 var expectationIndex = expectationObject
7898 ? indexOf(expectationObjects, expectationValue)
7899 : -1;
7900 // determines the new paths of the objects
7901 // - for non cyclic objects the current path will be extended
7902 // by current property name
7903 // - for cyclic objects the stored path is taken
7904 var newActualPath =
7905 actualIndex !== -1
7906 ? actualPaths[actualIndex]
7907 : `${actualPath}[${JSON.stringify(key)}]`;
7908 var newExpectationPath =
7909 expectationIndex !== -1
7910 ? expectationPaths[expectationIndex]
7911 : `${expectationPath}[${JSON.stringify(key)}]`;
7912 var combinedPath = newActualPath + newExpectationPath;
7913
7914 // stop recursion if current objects are already compared
7915 if (compared[combinedPath]) {
7916 return true;
7917 }
7918
7919 // remember the current objects and their paths
7920 if (actualIndex === -1 && actualObject) {
7921 push(actualObjects, actualValue);
7922 push(actualPaths, newActualPath);
7923 }
7924 if (expectationIndex === -1 && expectationObject) {
7925 push(expectationObjects, expectationValue);
7926 push(expectationPaths, newExpectationPath);
7927 }
7928
7929 // remember that the current objects are already compared
7930 if (actualObject && expectationObject) {
7931 compared[combinedPath] = true;
7932 }
7933
7934 // End of cyclic logic
7935
7936 // neither actualValue nor expectationValue is a cycle
7937 // continue with next level
7938 return deepEqual(
7939 actualValue,
7940 expectationValue,
7941 newActualPath,
7942 newExpectationPath
7943 );
7944 });
7945 })(actual, expectation, "$1", "$2");
7946}
7947
7948deepEqualCyclic.use = function (match) {
7949 return function deepEqual(a, b) {
7950 return deepEqualCyclic(a, b, match);
7951 };
7952};
7953
7954module.exports = deepEqualCyclic;
7955
7956},{"./get-class":90,"./identical":91,"./is-arguments":92,"./is-array-type":93,"./is-date":94,"./is-element":95,"./is-iterable":96,"./is-map":97,"./is-nan":98,"./is-object":100,"./is-set":101,"./is-subset":102,"@sinonjs/commons":112}],90:[function(require,module,exports){
7957"use strict";
7958
7959var toString = require("@sinonjs/commons").prototypes.object.toString;
7960
7961/**
7962 * Returns the internal `Class` by calling `Object.prototype.toString`
7963 * with the provided value as `this`. Return value is a `String`, naming the
7964 * internal class, e.g. "Array"
7965 *
7966 * @private
7967 * @param {*} value - Any value
7968 * @returns {string} - A string representation of the `Class` of `value`
7969 */
7970function getClass(value) {
7971 return toString(value).split(/[ \]]/)[1];
7972}
7973
7974module.exports = getClass;
7975
7976},{"@sinonjs/commons":112}],91:[function(require,module,exports){
7977"use strict";
7978
7979var isNaN = require("./is-nan");
7980var isNegZero = require("./is-neg-zero");
7981
7982/**
7983 * Strict equality check according to EcmaScript Harmony's `egal`.
7984 *
7985 * **From the Harmony wiki:**
7986 * > An `egal` function simply makes available the internal `SameValue` function
7987 * > from section 9.12 of the ES5 spec. If two values are egal, then they are not
7988 * > observably distinguishable.
7989 *
7990 * `identical` returns `true` when `===` is `true`, except for `-0` and
7991 * `+0`, where it returns `false`. Additionally, it returns `true` when
7992 * `NaN` is compared to itself.
7993 *
7994 * @alias module:samsam.identical
7995 * @param {*} obj1 The first value to compare
7996 * @param {*} obj2 The second value to compare
7997 * @returns {boolean} Returns `true` when the objects are *egal*, `false` otherwise
7998 */
7999function identical(obj1, obj2) {
8000 if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) {
8001 return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2);
8002 }
8003
8004 return false;
8005}
8006
8007module.exports = identical;
8008
8009},{"./is-nan":98,"./is-neg-zero":99}],92:[function(require,module,exports){
8010"use strict";
8011
8012var getClass = require("./get-class");
8013
8014/**
8015 * Returns `true` when `object` is an `arguments` object, `false` otherwise
8016 *
8017 * @alias module:samsam.isArguments
8018 * @param {*} object - The object to examine
8019 * @returns {boolean} `true` when `object` is an `arguments` object
8020 */
8021function isArguments(object) {
8022 return getClass(object) === "Arguments";
8023}
8024
8025module.exports = isArguments;
8026
8027},{"./get-class":90}],93:[function(require,module,exports){
8028"use strict";
8029
8030var functionName = require("@sinonjs/commons").functionName;
8031var indexOf = require("@sinonjs/commons").prototypes.array.indexOf;
8032var map = require("@sinonjs/commons").prototypes.array.map;
8033var ARRAY_TYPES = require("./array-types");
8034var type = require("type-detect");
8035
8036/**
8037 * Returns `true` when `object` is an array type, `false` otherwise
8038 *
8039 * @param {*} object - The object to examine
8040 * @returns {boolean} `true` when `object` is an array type
8041 * @private
8042 */
8043function isArrayType(object) {
8044 return indexOf(map(ARRAY_TYPES, functionName), type(object)) !== -1;
8045}
8046
8047module.exports = isArrayType;
8048
8049},{"./array-types":79,"@sinonjs/commons":112,"type-detect":168}],94:[function(require,module,exports){
8050"use strict";
8051
8052/**
8053 * Returns `true` when `value` is an instance of Date
8054 *
8055 * @private
8056 * @param {Date} value The value to examine
8057 * @returns {boolean} `true` when `value` is an instance of Date
8058 */
8059function isDate(value) {
8060 return value instanceof Date;
8061}
8062
8063module.exports = isDate;
8064
8065},{}],95:[function(require,module,exports){
8066"use strict";
8067
8068var div = typeof document !== "undefined" && document.createElement("div");
8069
8070/**
8071 * Returns `true` when `object` is a DOM element node.
8072 *
8073 * Unlike Underscore.js/lodash, this function will return `false` if `object`
8074 * is an *element-like* object, i.e. a regular object with a `nodeType`
8075 * property that holds the value `1`.
8076 *
8077 * @alias module:samsam.isElement
8078 * @param {object} object The object to examine
8079 * @returns {boolean} Returns `true` for DOM element nodes
8080 */
8081function isElement(object) {
8082 if (!object || object.nodeType !== 1 || !div) {
8083 return false;
8084 }
8085 try {
8086 object.appendChild(div);
8087 object.removeChild(div);
8088 } catch (e) {
8089 return false;
8090 }
8091 return true;
8092}
8093
8094module.exports = isElement;
8095
8096},{}],96:[function(require,module,exports){
8097"use strict";
8098
8099/**
8100 * Returns `true` when the argument is an iterable, `false` otherwise
8101 *
8102 * @alias module:samsam.isIterable
8103 * @param {*} val - A value to examine
8104 * @returns {boolean} Returns `true` when the argument is an iterable, `false` otherwise
8105 */
8106function isIterable(val) {
8107 // checks for null and undefined
8108 if (typeof val !== "object") {
8109 return false;
8110 }
8111 return typeof val[Symbol.iterator] === "function";
8112}
8113
8114module.exports = isIterable;
8115
8116},{}],97:[function(require,module,exports){
8117"use strict";
8118
8119/**
8120 * Returns `true` when `value` is a Map
8121 *
8122 * @param {*} value A value to examine
8123 * @returns {boolean} `true` when `value` is an instance of `Map`, `false` otherwise
8124 * @private
8125 */
8126function isMap(value) {
8127 return typeof Map !== "undefined" && value instanceof Map;
8128}
8129
8130module.exports = isMap;
8131
8132},{}],98:[function(require,module,exports){
8133"use strict";
8134
8135/**
8136 * Compares a `value` to `NaN`
8137 *
8138 * @private
8139 * @param {*} value A value to examine
8140 * @returns {boolean} Returns `true` when `value` is `NaN`
8141 */
8142function isNaN(value) {
8143 // Unlike global `isNaN`, this function avoids type coercion
8144 // `typeof` check avoids IE host object issues, hat tip to
8145 // lodash
8146
8147 // eslint-disable-next-line no-self-compare
8148 return typeof value === "number" && value !== value;
8149}
8150
8151module.exports = isNaN;
8152
8153},{}],99:[function(require,module,exports){
8154"use strict";
8155
8156/**
8157 * Returns `true` when `value` is `-0`
8158 *
8159 * @alias module:samsam.isNegZero
8160 * @param {*} value A value to examine
8161 * @returns {boolean} Returns `true` when `value` is `-0`
8162 */
8163function isNegZero(value) {
8164 return value === 0 && 1 / value === -Infinity;
8165}
8166
8167module.exports = isNegZero;
8168
8169},{}],100:[function(require,module,exports){
8170"use strict";
8171
8172/**
8173 * Returns `true` when the value is a regular Object and not a specialized Object
8174 *
8175 * This helps speed up deepEqual cyclic checks
8176 *
8177 * The premise is that only Objects are stored in the visited array.
8178 * So if this function returns false, we don't have to do the
8179 * expensive operation of searching for the value in the the array of already
8180 * visited objects
8181 *
8182 * @private
8183 * @param {object} value The object to examine
8184 * @returns {boolean} `true` when the object is a non-specialised object
8185 */
8186function isObject(value) {
8187 return (
8188 typeof value === "object" &&
8189 value !== null &&
8190 // none of these are collection objects, so we can return false
8191 !(value instanceof Boolean) &&
8192 !(value instanceof Date) &&
8193 !(value instanceof Error) &&
8194 !(value instanceof Number) &&
8195 !(value instanceof RegExp) &&
8196 !(value instanceof String)
8197 );
8198}
8199
8200module.exports = isObject;
8201
8202},{}],101:[function(require,module,exports){
8203"use strict";
8204
8205/**
8206 * Returns `true` when the argument is an instance of Set, `false` otherwise
8207 *
8208 * @alias module:samsam.isSet
8209 * @param {*} val - A value to examine
8210 * @returns {boolean} Returns `true` when the argument is an instance of Set, `false` otherwise
8211 */
8212function isSet(val) {
8213 return (typeof Set !== "undefined" && val instanceof Set) || false;
8214}
8215
8216module.exports = isSet;
8217
8218},{}],102:[function(require,module,exports){
8219"use strict";
8220
8221var forEach = require("@sinonjs/commons").prototypes.set.forEach;
8222
8223/**
8224 * Returns `true` when `s1` is a subset of `s2`, `false` otherwise
8225 *
8226 * @private
8227 * @param {Array|Set} s1 The target value
8228 * @param {Array|Set} s2 The containing value
8229 * @param {Function} compare A comparison function, should return `true` when
8230 * values are considered equal
8231 * @returns {boolean} Returns `true` when `s1` is a subset of `s2`, `false`` otherwise
8232 */
8233function isSubset(s1, s2, compare) {
8234 var allContained = true;
8235 forEach(s1, function (v1) {
8236 var includes = false;
8237 forEach(s2, function (v2) {
8238 if (compare(v2, v1)) {
8239 includes = true;
8240 }
8241 });
8242 allContained = allContained && includes;
8243 });
8244
8245 return allContained;
8246}
8247
8248module.exports = isSubset;
8249
8250},{"@sinonjs/commons":112}],103:[function(require,module,exports){
8251"use strict";
8252
8253var slice = require("@sinonjs/commons").prototypes.string.slice;
8254var typeOf = require("@sinonjs/commons").typeOf;
8255var valueToString = require("@sinonjs/commons").valueToString;
8256
8257/**
8258 * Creates a string represenation of an iterable object
8259 *
8260 * @private
8261 * @param {object} obj The iterable object to stringify
8262 * @returns {string} A string representation
8263 */
8264function iterableToString(obj) {
8265 if (typeOf(obj) === "map") {
8266 return mapToString(obj);
8267 }
8268
8269 return genericIterableToString(obj);
8270}
8271
8272/**
8273 * Creates a string representation of a Map
8274 *
8275 * @private
8276 * @param {Map} map The map to stringify
8277 * @returns {string} A string representation
8278 */
8279function mapToString(map) {
8280 var representation = "";
8281
8282 // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods
8283 map.forEach(function (value, key) {
8284 representation += `[${stringify(key)},${stringify(value)}],`;
8285 });
8286
8287 representation = slice(representation, 0, -1);
8288 return representation;
8289}
8290
8291/**
8292 * Create a string represenation for an iterable
8293 *
8294 * @private
8295 * @param {object} iterable The iterable to stringify
8296 * @returns {string} A string representation
8297 */
8298function genericIterableToString(iterable) {
8299 var representation = "";
8300
8301 // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods
8302 iterable.forEach(function (value) {
8303 representation += `${stringify(value)},`;
8304 });
8305
8306 representation = slice(representation, 0, -1);
8307 return representation;
8308}
8309
8310/**
8311 * Creates a string representation of the passed `item`
8312 *
8313 * @private
8314 * @param {object} item The item to stringify
8315 * @returns {string} A string representation of `item`
8316 */
8317function stringify(item) {
8318 return typeof item === "string" ? `'${item}'` : valueToString(item);
8319}
8320
8321module.exports = iterableToString;
8322
8323},{"@sinonjs/commons":112}],104:[function(require,module,exports){
8324"use strict";
8325
8326var valueToString = require("@sinonjs/commons").valueToString;
8327var indexOf = require("@sinonjs/commons").prototypes.string.indexOf;
8328var forEach = require("@sinonjs/commons").prototypes.array.forEach;
8329var type = require("type-detect");
8330
8331var engineCanCompareMaps = typeof Array.from === "function";
8332var deepEqual = require("./deep-equal").use(match); // eslint-disable-line no-use-before-define
8333var isArrayType = require("./is-array-type");
8334var isSubset = require("./is-subset");
8335var createMatcher = require("./create-matcher");
8336
8337/**
8338 * Returns true when `array` contains all of `subset` as defined by the `compare`
8339 * argument
8340 *
8341 * @param {Array} array An array to search for a subset
8342 * @param {Array} subset The subset to find in the array
8343 * @param {Function} compare A comparison function
8344 * @returns {boolean} [description]
8345 * @private
8346 */
8347function arrayContains(array, subset, compare) {
8348 if (subset.length === 0) {
8349 return true;
8350 }
8351 var i, l, j, k;
8352 for (i = 0, l = array.length; i < l; ++i) {
8353 if (compare(array[i], subset[0])) {
8354 for (j = 0, k = subset.length; j < k; ++j) {
8355 if (i + j >= l) {
8356 return false;
8357 }
8358 if (!compare(array[i + j], subset[j])) {
8359 return false;
8360 }
8361 }
8362 return true;
8363 }
8364 }
8365 return false;
8366}
8367
8368/* eslint-disable complexity */
8369/**
8370 * Matches an object with a matcher (or value)
8371 *
8372 * @alias module:samsam.match
8373 * @param {object} object The object candidate to match
8374 * @param {object} matcherOrValue A matcher or value to match against
8375 * @returns {boolean} true when `object` matches `matcherOrValue`
8376 */
8377function match(object, matcherOrValue) {
8378 if (matcherOrValue && typeof matcherOrValue.test === "function") {
8379 return matcherOrValue.test(object);
8380 }
8381
8382 switch (type(matcherOrValue)) {
8383 case "bigint":
8384 case "boolean":
8385 case "number":
8386 case "symbol":
8387 return matcherOrValue === object;
8388 case "function":
8389 return matcherOrValue(object) === true;
8390 case "string":
8391 var notNull = typeof object === "string" || Boolean(object);
8392 return (
8393 notNull &&
8394 indexOf(
8395 valueToString(object).toLowerCase(),
8396 matcherOrValue.toLowerCase()
8397 ) >= 0
8398 );
8399 case "null":
8400 return object === null;
8401 case "undefined":
8402 return typeof object === "undefined";
8403 case "Date":
8404 /* istanbul ignore else */
8405 if (type(object) === "Date") {
8406 return object.getTime() === matcherOrValue.getTime();
8407 }
8408 /* istanbul ignore next: this is basically the rest of the function, which is covered */
8409 break;
8410 case "Array":
8411 case "Int8Array":
8412 case "Uint8Array":
8413 case "Uint8ClampedArray":
8414 case "Int16Array":
8415 case "Uint16Array":
8416 case "Int32Array":
8417 case "Uint32Array":
8418 case "Float32Array":
8419 case "Float64Array":
8420 return (
8421 isArrayType(matcherOrValue) &&
8422 arrayContains(object, matcherOrValue, match)
8423 );
8424 case "Map":
8425 /* istanbul ignore next: this is covered by a test, that is only run in IE, but we collect coverage information in node*/
8426 if (!engineCanCompareMaps) {
8427 throw new Error(
8428 "The JavaScript engine does not support Array.from and cannot reliably do value comparison of Map instances"
8429 );
8430 }
8431
8432 return (
8433 type(object) === "Map" &&
8434 arrayContains(
8435 Array.from(object),
8436 Array.from(matcherOrValue),
8437 match
8438 )
8439 );
8440 default:
8441 break;
8442 }
8443
8444 switch (type(object)) {
8445 case "null":
8446 return false;
8447 case "Set":
8448 return isSubset(matcherOrValue, object, match);
8449 default:
8450 break;
8451 }
8452
8453 /* istanbul ignore else */
8454 if (matcherOrValue && typeof matcherOrValue === "object") {
8455 if (matcherOrValue === object) {
8456 return true;
8457 }
8458 if (typeof object !== "object") {
8459 return false;
8460 }
8461 var prop;
8462 // eslint-disable-next-line guard-for-in
8463 for (prop in matcherOrValue) {
8464 var value = object[prop];
8465 if (
8466 typeof value === "undefined" &&
8467 typeof object.getAttribute === "function"
8468 ) {
8469 value = object.getAttribute(prop);
8470 }
8471 if (
8472 matcherOrValue[prop] === null ||
8473 typeof matcherOrValue[prop] === "undefined"
8474 ) {
8475 if (value !== matcherOrValue[prop]) {
8476 return false;
8477 }
8478 } else if (
8479 typeof value === "undefined" ||
8480 !deepEqual(value, matcherOrValue[prop])
8481 ) {
8482 return false;
8483 }
8484 }
8485 return true;
8486 }
8487
8488 /* istanbul ignore next */
8489 throw new Error("Matcher was an unknown or unsupported type");
8490}
8491/* eslint-enable complexity */
8492
8493forEach(Object.keys(createMatcher), function (key) {
8494 match[key] = createMatcher[key];
8495});
8496
8497module.exports = match;
8498
8499},{"./create-matcher":80,"./deep-equal":89,"./is-array-type":93,"./is-subset":102,"@sinonjs/commons":112,"type-detect":168}],105:[function(require,module,exports){
8500"use strict";
8501
8502/**
8503 * @module samsam
8504 */
8505var identical = require("./identical");
8506var isArguments = require("./is-arguments");
8507var isElement = require("./is-element");
8508var isNegZero = require("./is-neg-zero");
8509var isSet = require("./is-set");
8510var isMap = require("./is-map");
8511var match = require("./match");
8512var deepEqualCyclic = require("./deep-equal").use(match);
8513var createMatcher = require("./create-matcher");
8514
8515module.exports = {
8516 createMatcher: createMatcher,
8517 deepEqual: deepEqualCyclic,
8518 identical: identical,
8519 isArguments: isArguments,
8520 isElement: isElement,
8521 isMap: isMap,
8522 isNegZero: isNegZero,
8523 isSet: isSet,
8524 match: match,
8525};
8526
8527},{"./create-matcher":80,"./deep-equal":89,"./identical":91,"./is-arguments":92,"./is-element":95,"./is-map":97,"./is-neg-zero":99,"./is-set":101,"./match":104}],106:[function(require,module,exports){
8528arguments[4][40][0].apply(exports,arguments)
8529},{"./prototypes/array":114,"dup":40}],107:[function(require,module,exports){
8530arguments[4][41][0].apply(exports,arguments)
8531},{"./function-name":110,"dup":41}],108:[function(require,module,exports){
8532arguments[4][42][0].apply(exports,arguments)
8533},{"dup":42}],109:[function(require,module,exports){
8534arguments[4][43][0].apply(exports,arguments)
8535},{"dup":43}],110:[function(require,module,exports){
8536arguments[4][44][0].apply(exports,arguments)
8537},{"dup":44}],111:[function(require,module,exports){
8538arguments[4][45][0].apply(exports,arguments)
8539},{"dup":45}],112:[function(require,module,exports){
8540arguments[4][46][0].apply(exports,arguments)
8541},{"./called-in-order":106,"./class-name":107,"./deprecated":108,"./every":109,"./function-name":110,"./global":111,"./order-by-first-call":113,"./prototypes":117,"./type-of":123,"./value-to-string":124,"dup":46}],113:[function(require,module,exports){
8542arguments[4][47][0].apply(exports,arguments)
8543},{"./prototypes/array":114,"dup":47}],114:[function(require,module,exports){
8544arguments[4][48][0].apply(exports,arguments)
8545},{"./copy-prototype-methods":115,"dup":48}],115:[function(require,module,exports){
8546arguments[4][49][0].apply(exports,arguments)
8547},{"./throws-on-proto":122,"dup":49}],116:[function(require,module,exports){
8548arguments[4][50][0].apply(exports,arguments)
8549},{"./copy-prototype-methods":115,"dup":50}],117:[function(require,module,exports){
8550arguments[4][51][0].apply(exports,arguments)
8551},{"./array":114,"./function":116,"./map":118,"./object":119,"./set":120,"./string":121,"dup":51}],118:[function(require,module,exports){
8552arguments[4][52][0].apply(exports,arguments)
8553},{"./copy-prototype-methods":115,"dup":52}],119:[function(require,module,exports){
8554arguments[4][53][0].apply(exports,arguments)
8555},{"./copy-prototype-methods":115,"dup":53}],120:[function(require,module,exports){
8556arguments[4][54][0].apply(exports,arguments)
8557},{"./copy-prototype-methods":115,"dup":54}],121:[function(require,module,exports){
8558arguments[4][55][0].apply(exports,arguments)
8559},{"./copy-prototype-methods":115,"dup":55}],122:[function(require,module,exports){
8560arguments[4][56][0].apply(exports,arguments)
8561},{"dup":56}],123:[function(require,module,exports){
8562arguments[4][57][0].apply(exports,arguments)
8563},{"dup":57,"type-detect":168}],124:[function(require,module,exports){
8564arguments[4][58][0].apply(exports,arguments)
8565},{"dup":58}],125:[function(require,module,exports){
8566// This is free and unencumbered software released into the public domain.
8567// See LICENSE.md for more information.
8568
8569var encoding = require("./lib/encoding.js");
8570
8571module.exports = {
8572 TextEncoder: encoding.TextEncoder,
8573 TextDecoder: encoding.TextDecoder,
8574};
8575
8576},{"./lib/encoding.js":127}],126:[function(require,module,exports){
8577(function(global) {
8578 'use strict';
8579
8580 if (typeof module !== "undefined" && module.exports) {
8581 module.exports = global;
8582 }
8583
8584 global["encoding-indexes"] =
8585{
8586 "big5":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188],
8587 "euc-kr":[44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],
8588 "gb18030":[19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565],
8589 "gb18030-ranges":[[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189000,65536]],
8590 "jis0208":[12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],
8591 "jis0212":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],
8592 "ibm866":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160],
8593 "iso-8859-2":[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,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729],
8594 "iso-8859-3":[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,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729],
8595 "iso-8859-4":[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,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729],
8596 "iso-8859-5":[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,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119],
8597 "iso-8859-6":[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,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null],
8598 "iso-8859-7":[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,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null],
8599 "iso-8859-8":[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,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null],
8600 "iso-8859-10":[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,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312],
8601 "iso-8859-13":[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,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217],
8602 "iso-8859-14":[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,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255],
8603 "iso-8859-15":[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,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,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],
8604 "iso-8859-16":[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,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255],
8605 "koi8-r":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066],
8606 "koi8-u":[9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066],
8607 "macintosh":[196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711],
8608 "windows-874":[8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null],
8609 "windows-1250":[8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729],
8610 "windows-1251":[1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103],
8611 "windows-1252":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,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],
8612 "windows-1253":[8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null],
8613 "windows-1254":[8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,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,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255],
8614 "windows-1255":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null],
8615 "windows-1256":[8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746],
8616 "windows-1257":[8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729],
8617 "windows-1258":[8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,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,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255],
8618 "x-mac-cyrillic":[1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364]
8619};
8620
8621// For strict environments where `this` inside the global scope
8622// is `undefined`, take a pure object instead
8623}(this || {}));
8624},{}],127:[function(require,module,exports){
8625// This is free and unencumbered software released into the public domain.
8626// See LICENSE.md for more information.
8627
8628/**
8629 * @fileoverview Global |this| required for resolving indexes in node.
8630 * @suppress {globalThis}
8631 */
8632(function(global) {
8633 'use strict';
8634
8635 // If we're in node require encoding-indexes and attach it to the global.
8636 if (typeof module !== "undefined" && module.exports &&
8637 !global["encoding-indexes"]) {
8638 global["encoding-indexes"] =
8639 require("./encoding-indexes.js")["encoding-indexes"];
8640 }
8641
8642 //
8643 // Utilities
8644 //
8645
8646 /**
8647 * @param {number} a The number to test.
8648 * @param {number} min The minimum value in the range, inclusive.
8649 * @param {number} max The maximum value in the range, inclusive.
8650 * @return {boolean} True if a >= min and a <= max.
8651 */
8652 function inRange(a, min, max) {
8653 return min <= a && a <= max;
8654 }
8655
8656 /**
8657 * @param {!Array.<*>} array The array to check.
8658 * @param {*} item The item to look for in the array.
8659 * @return {boolean} True if the item appears in the array.
8660 */
8661 function includes(array, item) {
8662 return array.indexOf(item) !== -1;
8663 }
8664
8665 var floor = Math.floor;
8666
8667 /**
8668 * @param {*} o
8669 * @return {Object}
8670 */
8671 function ToDictionary(o) {
8672 if (o === undefined) return {};
8673 if (o === Object(o)) return o;
8674 throw TypeError('Could not convert argument to dictionary');
8675 }
8676
8677 /**
8678 * @param {string} string Input string of UTF-16 code units.
8679 * @return {!Array.<number>} Code points.
8680 */
8681 function stringToCodePoints(string) {
8682 // https://heycam.github.io/webidl/#dfn-obtain-unicode
8683
8684 // 1. Let S be the DOMString value.
8685 var s = String(string);
8686
8687 // 2. Let n be the length of S.
8688 var n = s.length;
8689
8690 // 3. Initialize i to 0.
8691 var i = 0;
8692
8693 // 4. Initialize U to be an empty sequence of Unicode characters.
8694 var u = [];
8695
8696 // 5. While i < n:
8697 while (i < n) {
8698
8699 // 1. Let c be the code unit in S at index i.
8700 var c = s.charCodeAt(i);
8701
8702 // 2. Depending on the value of c:
8703
8704 // c < 0xD800 or c > 0xDFFF
8705 if (c < 0xD800 || c > 0xDFFF) {
8706 // Append to U the Unicode character with code point c.
8707 u.push(c);
8708 }
8709
8710 // 0xDC00 ≤ c ≤ 0xDFFF
8711 else if (0xDC00 <= c && c <= 0xDFFF) {
8712 // Append to U a U+FFFD REPLACEMENT CHARACTER.
8713 u.push(0xFFFD);
8714 }
8715
8716 // 0xD800 ≤ c ≤ 0xDBFF
8717 else if (0xD800 <= c && c <= 0xDBFF) {
8718 // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT
8719 // CHARACTER.
8720 if (i === n - 1) {
8721 u.push(0xFFFD);
8722 }
8723 // 2. Otherwise, i < n−1:
8724 else {
8725 // 1. Let d be the code unit in S at index i+1.
8726 var d = s.charCodeAt(i + 1);
8727
8728 // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then:
8729 if (0xDC00 <= d && d <= 0xDFFF) {
8730 // 1. Let a be c & 0x3FF.
8731 var a = c & 0x3FF;
8732
8733 // 2. Let b be d & 0x3FF.
8734 var b = d & 0x3FF;
8735
8736 // 3. Append to U the Unicode character with code point
8737 // 2^16+2^10*a+b.
8738 u.push(0x10000 + (a << 10) + b);
8739
8740 // 4. Set i to i+1.
8741 i += 1;
8742 }
8743
8744 // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a
8745 // U+FFFD REPLACEMENT CHARACTER.
8746 else {
8747 u.push(0xFFFD);
8748 }
8749 }
8750 }
8751
8752 // 3. Set i to i+1.
8753 i += 1;
8754 }
8755
8756 // 6. Return U.
8757 return u;
8758 }
8759
8760 /**
8761 * @param {!Array.<number>} code_points Array of code points.
8762 * @return {string} string String of UTF-16 code units.
8763 */
8764 function codePointsToString(code_points) {
8765 var s = '';
8766 for (var i = 0; i < code_points.length; ++i) {
8767 var cp = code_points[i];
8768 if (cp <= 0xFFFF) {
8769 s += String.fromCharCode(cp);
8770 } else {
8771 cp -= 0x10000;
8772 s += String.fromCharCode((cp >> 10) + 0xD800,
8773 (cp & 0x3FF) + 0xDC00);
8774 }
8775 }
8776 return s;
8777 }
8778
8779
8780 //
8781 // Implementation of Encoding specification
8782 // https://encoding.spec.whatwg.org/
8783 //
8784
8785 //
8786 // 4. Terminology
8787 //
8788
8789 /**
8790 * An ASCII byte is a byte in the range 0x00 to 0x7F, inclusive.
8791 * @param {number} a The number to test.
8792 * @return {boolean} True if a is in the range 0x00 to 0x7F, inclusive.
8793 */
8794 function isASCIIByte(a) {
8795 return 0x00 <= a && a <= 0x7F;
8796 }
8797
8798 /**
8799 * An ASCII code point is a code point in the range U+0000 to
8800 * U+007F, inclusive.
8801 */
8802 var isASCIICodePoint = isASCIIByte;
8803
8804
8805 /**
8806 * End-of-stream is a special token that signifies no more tokens
8807 * are in the stream.
8808 * @const
8809 */ var end_of_stream = -1;
8810
8811 /**
8812 * A stream represents an ordered sequence of tokens.
8813 *
8814 * @constructor
8815 * @param {!(Array.<number>|Uint8Array)} tokens Array of tokens that provide
8816 * the stream.
8817 */
8818 function Stream(tokens) {
8819 /** @type {!Array.<number>} */
8820 this.tokens = [].slice.call(tokens);
8821 // Reversed as push/pop is more efficient than shift/unshift.
8822 this.tokens.reverse();
8823 }
8824
8825 Stream.prototype = {
8826 /**
8827 * @return {boolean} True if end-of-stream has been hit.
8828 */
8829 endOfStream: function() {
8830 return !this.tokens.length;
8831 },
8832
8833 /**
8834 * When a token is read from a stream, the first token in the
8835 * stream must be returned and subsequently removed, and
8836 * end-of-stream must be returned otherwise.
8837 *
8838 * @return {number} Get the next token from the stream, or
8839 * end_of_stream.
8840 */
8841 read: function() {
8842 if (!this.tokens.length)
8843 return end_of_stream;
8844 return this.tokens.pop();
8845 },
8846
8847 /**
8848 * When one or more tokens are prepended to a stream, those tokens
8849 * must be inserted, in given order, before the first token in the
8850 * stream.
8851 *
8852 * @param {(number|!Array.<number>)} token The token(s) to prepend to the
8853 * stream.
8854 */
8855 prepend: function(token) {
8856 if (Array.isArray(token)) {
8857 var tokens = /**@type {!Array.<number>}*/(token);
8858 while (tokens.length)
8859 this.tokens.push(tokens.pop());
8860 } else {
8861 this.tokens.push(token);
8862 }
8863 },
8864
8865 /**
8866 * When one or more tokens are pushed to a stream, those tokens
8867 * must be inserted, in given order, after the last token in the
8868 * stream.
8869 *
8870 * @param {(number|!Array.<number>)} token The tokens(s) to push to the
8871 * stream.
8872 */
8873 push: function(token) {
8874 if (Array.isArray(token)) {
8875 var tokens = /**@type {!Array.<number>}*/(token);
8876 while (tokens.length)
8877 this.tokens.unshift(tokens.shift());
8878 } else {
8879 this.tokens.unshift(token);
8880 }
8881 }
8882 };
8883
8884 //
8885 // 5. Encodings
8886 //
8887
8888 // 5.1 Encoders and decoders
8889
8890 /** @const */
8891 var finished = -1;
8892
8893 /**
8894 * @param {boolean} fatal If true, decoding errors raise an exception.
8895 * @param {number=} opt_code_point Override the standard fallback code point.
8896 * @return {number} The code point to insert on a decoding error.
8897 */
8898 function decoderError(fatal, opt_code_point) {
8899 if (fatal)
8900 throw TypeError('Decoder error');
8901 return opt_code_point || 0xFFFD;
8902 }
8903
8904 /**
8905 * @param {number} code_point The code point that could not be encoded.
8906 * @return {number} Always throws, no value is actually returned.
8907 */
8908 function encoderError(code_point) {
8909 throw TypeError('The code point ' + code_point + ' could not be encoded.');
8910 }
8911
8912 /** @interface */
8913 function Decoder() {}
8914 Decoder.prototype = {
8915 /**
8916 * @param {Stream} stream The stream of bytes being decoded.
8917 * @param {number} bite The next byte read from the stream.
8918 * @return {?(number|!Array.<number>)} The next code point(s)
8919 * decoded, or null if not enough data exists in the input
8920 * stream to decode a complete code point, or |finished|.
8921 */
8922 handler: function(stream, bite) {}
8923 };
8924
8925 /** @interface */
8926 function Encoder() {}
8927 Encoder.prototype = {
8928 /**
8929 * @param {Stream} stream The stream of code points being encoded.
8930 * @param {number} code_point Next code point read from the stream.
8931 * @return {(number|!Array.<number>)} Byte(s) to emit, or |finished|.
8932 */
8933 handler: function(stream, code_point) {}
8934 };
8935
8936 // 5.2 Names and labels
8937
8938 // TODO: Define @typedef for Encoding: {name:string,labels:Array.<string>}
8939 // https://github.com/google/closure-compiler/issues/247
8940
8941 /**
8942 * @param {string} label The encoding label.
8943 * @return {?{name:string,labels:Array.<string>}}
8944 */
8945 function getEncoding(label) {
8946 // 1. Remove any leading and trailing ASCII whitespace from label.
8947 label = String(label).trim().toLowerCase();
8948
8949 // 2. If label is an ASCII case-insensitive match for any of the
8950 // labels listed in the table below, return the corresponding
8951 // encoding, and failure otherwise.
8952 if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) {
8953 return label_to_encoding[label];
8954 }
8955 return null;
8956 }
8957
8958 /**
8959 * Encodings table: https://encoding.spec.whatwg.org/encodings.json
8960 * @const
8961 * @type {!Array.<{
8962 * heading: string,
8963 * encodings: Array.<{name:string,labels:Array.<string>}>
8964 * }>}
8965 */
8966 var encodings = [
8967 {
8968 "encodings": [
8969 {
8970 "labels": [
8971 "unicode-1-1-utf-8",
8972 "utf-8",
8973 "utf8"
8974 ],
8975 "name": "UTF-8"
8976 }
8977 ],
8978 "heading": "The Encoding"
8979 },
8980 {
8981 "encodings": [
8982 {
8983 "labels": [
8984 "866",
8985 "cp866",
8986 "csibm866",
8987 "ibm866"
8988 ],
8989 "name": "IBM866"
8990 },
8991 {
8992 "labels": [
8993 "csisolatin2",
8994 "iso-8859-2",
8995 "iso-ir-101",
8996 "iso8859-2",
8997 "iso88592",
8998 "iso_8859-2",
8999 "iso_8859-2:1987",
9000 "l2",
9001 "latin2"
9002 ],
9003 "name": "ISO-8859-2"
9004 },
9005 {
9006 "labels": [
9007 "csisolatin3",
9008 "iso-8859-3",
9009 "iso-ir-109",
9010 "iso8859-3",
9011 "iso88593",
9012 "iso_8859-3",
9013 "iso_8859-3:1988",
9014 "l3",
9015 "latin3"
9016 ],
9017 "name": "ISO-8859-3"
9018 },
9019 {
9020 "labels": [
9021 "csisolatin4",
9022 "iso-8859-4",
9023 "iso-ir-110",
9024 "iso8859-4",
9025 "iso88594",
9026 "iso_8859-4",
9027 "iso_8859-4:1988",
9028 "l4",
9029 "latin4"
9030 ],
9031 "name": "ISO-8859-4"
9032 },
9033 {
9034 "labels": [
9035 "csisolatincyrillic",
9036 "cyrillic",
9037 "iso-8859-5",
9038 "iso-ir-144",
9039 "iso8859-5",
9040 "iso88595",
9041 "iso_8859-5",
9042 "iso_8859-5:1988"
9043 ],
9044 "name": "ISO-8859-5"
9045 },
9046 {
9047 "labels": [
9048 "arabic",
9049 "asmo-708",
9050 "csiso88596e",
9051 "csiso88596i",
9052 "csisolatinarabic",
9053 "ecma-114",
9054 "iso-8859-6",
9055 "iso-8859-6-e",
9056 "iso-8859-6-i",
9057 "iso-ir-127",
9058 "iso8859-6",
9059 "iso88596",
9060 "iso_8859-6",
9061 "iso_8859-6:1987"
9062 ],
9063 "name": "ISO-8859-6"
9064 },
9065 {
9066 "labels": [
9067 "csisolatingreek",
9068 "ecma-118",
9069 "elot_928",
9070 "greek",
9071 "greek8",
9072 "iso-8859-7",
9073 "iso-ir-126",
9074 "iso8859-7",
9075 "iso88597",
9076 "iso_8859-7",
9077 "iso_8859-7:1987",
9078 "sun_eu_greek"
9079 ],
9080 "name": "ISO-8859-7"
9081 },
9082 {
9083 "labels": [
9084 "csiso88598e",
9085 "csisolatinhebrew",
9086 "hebrew",
9087 "iso-8859-8",
9088 "iso-8859-8-e",
9089 "iso-ir-138",
9090 "iso8859-8",
9091 "iso88598",
9092 "iso_8859-8",
9093 "iso_8859-8:1988",
9094 "visual"
9095 ],
9096 "name": "ISO-8859-8"
9097 },
9098 {
9099 "labels": [
9100 "csiso88598i",
9101 "iso-8859-8-i",
9102 "logical"
9103 ],
9104 "name": "ISO-8859-8-I"
9105 },
9106 {
9107 "labels": [
9108 "csisolatin6",
9109 "iso-8859-10",
9110 "iso-ir-157",
9111 "iso8859-10",
9112 "iso885910",
9113 "l6",
9114 "latin6"
9115 ],
9116 "name": "ISO-8859-10"
9117 },
9118 {
9119 "labels": [
9120 "iso-8859-13",
9121 "iso8859-13",
9122 "iso885913"
9123 ],
9124 "name": "ISO-8859-13"
9125 },
9126 {
9127 "labels": [
9128 "iso-8859-14",
9129 "iso8859-14",
9130 "iso885914"
9131 ],
9132 "name": "ISO-8859-14"
9133 },
9134 {
9135 "labels": [
9136 "csisolatin9",
9137 "iso-8859-15",
9138 "iso8859-15",
9139 "iso885915",
9140 "iso_8859-15",
9141 "l9"
9142 ],
9143 "name": "ISO-8859-15"
9144 },
9145 {
9146 "labels": [
9147 "iso-8859-16"
9148 ],
9149 "name": "ISO-8859-16"
9150 },
9151 {
9152 "labels": [
9153 "cskoi8r",
9154 "koi",
9155 "koi8",
9156 "koi8-r",
9157 "koi8_r"
9158 ],
9159 "name": "KOI8-R"
9160 },
9161 {
9162 "labels": [
9163 "koi8-ru",
9164 "koi8-u"
9165 ],
9166 "name": "KOI8-U"
9167 },
9168 {
9169 "labels": [
9170 "csmacintosh",
9171 "mac",
9172 "macintosh",
9173 "x-mac-roman"
9174 ],
9175 "name": "macintosh"
9176 },
9177 {
9178 "labels": [
9179 "dos-874",
9180 "iso-8859-11",
9181 "iso8859-11",
9182 "iso885911",
9183 "tis-620",
9184 "windows-874"
9185 ],
9186 "name": "windows-874"
9187 },
9188 {
9189 "labels": [
9190 "cp1250",
9191 "windows-1250",
9192 "x-cp1250"
9193 ],
9194 "name": "windows-1250"
9195 },
9196 {
9197 "labels": [
9198 "cp1251",
9199 "windows-1251",
9200 "x-cp1251"
9201 ],
9202 "name": "windows-1251"
9203 },
9204 {
9205 "labels": [
9206 "ansi_x3.4-1968",
9207 "ascii",
9208 "cp1252",
9209 "cp819",
9210 "csisolatin1",
9211 "ibm819",
9212 "iso-8859-1",
9213 "iso-ir-100",
9214 "iso8859-1",
9215 "iso88591",
9216 "iso_8859-1",
9217 "iso_8859-1:1987",
9218 "l1",
9219 "latin1",
9220 "us-ascii",
9221 "windows-1252",
9222 "x-cp1252"
9223 ],
9224 "name": "windows-1252"
9225 },
9226 {
9227 "labels": [
9228 "cp1253",
9229 "windows-1253",
9230 "x-cp1253"
9231 ],
9232 "name": "windows-1253"
9233 },
9234 {
9235 "labels": [
9236 "cp1254",
9237 "csisolatin5",
9238 "iso-8859-9",
9239 "iso-ir-148",
9240 "iso8859-9",
9241 "iso88599",
9242 "iso_8859-9",
9243 "iso_8859-9:1989",
9244 "l5",
9245 "latin5",
9246 "windows-1254",
9247 "x-cp1254"
9248 ],
9249 "name": "windows-1254"
9250 },
9251 {
9252 "labels": [
9253 "cp1255",
9254 "windows-1255",
9255 "x-cp1255"
9256 ],
9257 "name": "windows-1255"
9258 },
9259 {
9260 "labels": [
9261 "cp1256",
9262 "windows-1256",
9263 "x-cp1256"
9264 ],
9265 "name": "windows-1256"
9266 },
9267 {
9268 "labels": [
9269 "cp1257",
9270 "windows-1257",
9271 "x-cp1257"
9272 ],
9273 "name": "windows-1257"
9274 },
9275 {
9276 "labels": [
9277 "cp1258",
9278 "windows-1258",
9279 "x-cp1258"
9280 ],
9281 "name": "windows-1258"
9282 },
9283 {
9284 "labels": [
9285 "x-mac-cyrillic",
9286 "x-mac-ukrainian"
9287 ],
9288 "name": "x-mac-cyrillic"
9289 }
9290 ],
9291 "heading": "Legacy single-byte encodings"
9292 },
9293 {
9294 "encodings": [
9295 {
9296 "labels": [
9297 "chinese",
9298 "csgb2312",
9299 "csiso58gb231280",
9300 "gb2312",
9301 "gb_2312",
9302 "gb_2312-80",
9303 "gbk",
9304 "iso-ir-58",
9305 "x-gbk"
9306 ],
9307 "name": "GBK"
9308 },
9309 {
9310 "labels": [
9311 "gb18030"
9312 ],
9313 "name": "gb18030"
9314 }
9315 ],
9316 "heading": "Legacy multi-byte Chinese (simplified) encodings"
9317 },
9318 {
9319 "encodings": [
9320 {
9321 "labels": [
9322 "big5",
9323 "big5-hkscs",
9324 "cn-big5",
9325 "csbig5",
9326 "x-x-big5"
9327 ],
9328 "name": "Big5"
9329 }
9330 ],
9331 "heading": "Legacy multi-byte Chinese (traditional) encodings"
9332 },
9333 {
9334 "encodings": [
9335 {
9336 "labels": [
9337 "cseucpkdfmtjapanese",
9338 "euc-jp",
9339 "x-euc-jp"
9340 ],
9341 "name": "EUC-JP"
9342 },
9343 {
9344 "labels": [
9345 "csiso2022jp",
9346 "iso-2022-jp"
9347 ],
9348 "name": "ISO-2022-JP"
9349 },
9350 {
9351 "labels": [
9352 "csshiftjis",
9353 "ms932",
9354 "ms_kanji",
9355 "shift-jis",
9356 "shift_jis",
9357 "sjis",
9358 "windows-31j",
9359 "x-sjis"
9360 ],
9361 "name": "Shift_JIS"
9362 }
9363 ],
9364 "heading": "Legacy multi-byte Japanese encodings"
9365 },
9366 {
9367 "encodings": [
9368 {
9369 "labels": [
9370 "cseuckr",
9371 "csksc56011987",
9372 "euc-kr",
9373 "iso-ir-149",
9374 "korean",
9375 "ks_c_5601-1987",
9376 "ks_c_5601-1989",
9377 "ksc5601",
9378 "ksc_5601",
9379 "windows-949"
9380 ],
9381 "name": "EUC-KR"
9382 }
9383 ],
9384 "heading": "Legacy multi-byte Korean encodings"
9385 },
9386 {
9387 "encodings": [
9388 {
9389 "labels": [
9390 "csiso2022kr",
9391 "hz-gb-2312",
9392 "iso-2022-cn",
9393 "iso-2022-cn-ext",
9394 "iso-2022-kr"
9395 ],
9396 "name": "replacement"
9397 },
9398 {
9399 "labels": [
9400 "utf-16be"
9401 ],
9402 "name": "UTF-16BE"
9403 },
9404 {
9405 "labels": [
9406 "utf-16",
9407 "utf-16le"
9408 ],
9409 "name": "UTF-16LE"
9410 },
9411 {
9412 "labels": [
9413 "x-user-defined"
9414 ],
9415 "name": "x-user-defined"
9416 }
9417 ],
9418 "heading": "Legacy miscellaneous encodings"
9419 }
9420 ];
9421
9422 // Label to encoding registry.
9423 /** @type {Object.<string,{name:string,labels:Array.<string>}>} */
9424 var label_to_encoding = {};
9425 encodings.forEach(function(category) {
9426 category.encodings.forEach(function(encoding) {
9427 encoding.labels.forEach(function(label) {
9428 label_to_encoding[label] = encoding;
9429 });
9430 });
9431 });
9432
9433 // Registry of of encoder/decoder factories, by encoding name.
9434 /** @type {Object.<string, function({fatal:boolean}): Encoder>} */
9435 var encoders = {};
9436 /** @type {Object.<string, function({fatal:boolean}): Decoder>} */
9437 var decoders = {};
9438
9439 //
9440 // 6. Indexes
9441 //
9442
9443 /**
9444 * @param {number} pointer The |pointer| to search for.
9445 * @param {(!Array.<?number>|undefined)} index The |index| to search within.
9446 * @return {?number} The code point corresponding to |pointer| in |index|,
9447 * or null if |code point| is not in |index|.
9448 */
9449 function indexCodePointFor(pointer, index) {
9450 if (!index) return null;
9451 return index[pointer] || null;
9452 }
9453
9454 /**
9455 * @param {number} code_point The |code point| to search for.
9456 * @param {!Array.<?number>} index The |index| to search within.
9457 * @return {?number} The first pointer corresponding to |code point| in
9458 * |index|, or null if |code point| is not in |index|.
9459 */
9460 function indexPointerFor(code_point, index) {
9461 var pointer = index.indexOf(code_point);
9462 return pointer === -1 ? null : pointer;
9463 }
9464
9465 /**
9466 * @param {string} name Name of the index.
9467 * @return {(!Array.<number>|!Array.<Array.<number>>)}
9468 * */
9469 function index(name) {
9470 if (!('encoding-indexes' in global)) {
9471 throw Error("Indexes missing." +
9472 " Did you forget to include encoding-indexes.js first?");
9473 }
9474 return global['encoding-indexes'][name];
9475 }
9476
9477 /**
9478 * @param {number} pointer The |pointer| to search for in the gb18030 index.
9479 * @return {?number} The code point corresponding to |pointer| in |index|,
9480 * or null if |code point| is not in the gb18030 index.
9481 */
9482 function indexGB18030RangesCodePointFor(pointer) {
9483 // 1. If pointer is greater than 39419 and less than 189000, or
9484 // pointer is greater than 1237575, return null.
9485 if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575))
9486 return null;
9487
9488 // 2. If pointer is 7457, return code point U+E7C7.
9489 if (pointer === 7457) return 0xE7C7;
9490
9491 // 3. Let offset be the last pointer in index gb18030 ranges that
9492 // is equal to or less than pointer and let code point offset be
9493 // its corresponding code point.
9494 var offset = 0;
9495 var code_point_offset = 0;
9496 var idx = index('gb18030-ranges');
9497 var i;
9498 for (i = 0; i < idx.length; ++i) {
9499 /** @type {!Array.<number>} */
9500 var entry = idx[i];
9501 if (entry[0] <= pointer) {
9502 offset = entry[0];
9503 code_point_offset = entry[1];
9504 } else {
9505 break;
9506 }
9507 }
9508
9509 // 4. Return a code point whose value is code point offset +
9510 // pointer − offset.
9511 return code_point_offset + pointer - offset;
9512 }
9513
9514 /**
9515 * @param {number} code_point The |code point| to locate in the gb18030 index.
9516 * @return {number} The first pointer corresponding to |code point| in the
9517 * gb18030 index.
9518 */
9519 function indexGB18030RangesPointerFor(code_point) {
9520 // 1. If code point is U+E7C7, return pointer 7457.
9521 if (code_point === 0xE7C7) return 7457;
9522
9523 // 2. Let offset be the last code point in index gb18030 ranges
9524 // that is equal to or less than code point and let pointer offset
9525 // be its corresponding pointer.
9526 var offset = 0;
9527 var pointer_offset = 0;
9528 var idx = index('gb18030-ranges');
9529 var i;
9530 for (i = 0; i < idx.length; ++i) {
9531 /** @type {!Array.<number>} */
9532 var entry = idx[i];
9533 if (entry[1] <= code_point) {
9534 offset = entry[1];
9535 pointer_offset = entry[0];
9536 } else {
9537 break;
9538 }
9539 }
9540
9541 // 3. Return a pointer whose value is pointer offset + code point
9542 // − offset.
9543 return pointer_offset + code_point - offset;
9544 }
9545
9546 /**
9547 * @param {number} code_point The |code_point| to search for in the Shift_JIS
9548 * index.
9549 * @return {?number} The code point corresponding to |pointer| in |index|,
9550 * or null if |code point| is not in the Shift_JIS index.
9551 */
9552 function indexShiftJISPointerFor(code_point) {
9553 // 1. Let index be index jis0208 excluding all entries whose
9554 // pointer is in the range 8272 to 8835, inclusive.
9555 shift_jis_index = shift_jis_index ||
9556 index('jis0208').map(function(code_point, pointer) {
9557 return inRange(pointer, 8272, 8835) ? null : code_point;
9558 });
9559 var index_ = shift_jis_index;
9560
9561 // 2. Return the index pointer for code point in index.
9562 return index_.indexOf(code_point);
9563 }
9564 var shift_jis_index;
9565
9566 /**
9567 * @param {number} code_point The |code_point| to search for in the big5
9568 * index.
9569 * @return {?number} The code point corresponding to |pointer| in |index|,
9570 * or null if |code point| is not in the big5 index.
9571 */
9572 function indexBig5PointerFor(code_point) {
9573 // 1. Let index be index Big5 excluding all entries whose pointer
9574 big5_index_no_hkscs = big5_index_no_hkscs ||
9575 index('big5').map(function(code_point, pointer) {
9576 return (pointer < (0xA1 - 0x81) * 157) ? null : code_point;
9577 });
9578 var index_ = big5_index_no_hkscs;
9579
9580 // 2. If code point is U+2550, U+255E, U+2561, U+256A, U+5341, or
9581 // U+5345, return the last pointer corresponding to code point in
9582 // index.
9583 if (code_point === 0x2550 || code_point === 0x255E ||
9584 code_point === 0x2561 || code_point === 0x256A ||
9585 code_point === 0x5341 || code_point === 0x5345) {
9586 return index_.lastIndexOf(code_point);
9587 }
9588
9589 // 3. Return the index pointer for code point in index.
9590 return indexPointerFor(code_point, index_);
9591 }
9592 var big5_index_no_hkscs;
9593
9594 //
9595 // 8. API
9596 //
9597
9598 /** @const */ var DEFAULT_ENCODING = 'utf-8';
9599
9600 // 8.1 Interface TextDecoder
9601
9602 /**
9603 * @constructor
9604 * @param {string=} label The label of the encoding;
9605 * defaults to 'utf-8'.
9606 * @param {Object=} options
9607 */
9608 function TextDecoder(label, options) {
9609 // Web IDL conventions
9610 if (!(this instanceof TextDecoder))
9611 throw TypeError('Called as a function. Did you forget \'new\'?');
9612 label = label !== undefined ? String(label) : DEFAULT_ENCODING;
9613 options = ToDictionary(options);
9614
9615 // A TextDecoder object has an associated encoding, decoder,
9616 // stream, ignore BOM flag (initially unset), BOM seen flag
9617 // (initially unset), error mode (initially replacement), and do
9618 // not flush flag (initially unset).
9619
9620 /** @private */
9621 this._encoding = null;
9622 /** @private @type {?Decoder} */
9623 this._decoder = null;
9624 /** @private @type {boolean} */
9625 this._ignoreBOM = false;
9626 /** @private @type {boolean} */
9627 this._BOMseen = false;
9628 /** @private @type {string} */
9629 this._error_mode = 'replacement';
9630 /** @private @type {boolean} */
9631 this._do_not_flush = false;
9632
9633
9634 // 1. Let encoding be the result of getting an encoding from
9635 // label.
9636 var encoding = getEncoding(label);
9637
9638 // 2. If encoding is failure or replacement, throw a RangeError.
9639 if (encoding === null || encoding.name === 'replacement')
9640 throw RangeError('Unknown encoding: ' + label);
9641 if (!decoders[encoding.name]) {
9642 throw Error('Decoder not present.' +
9643 ' Did you forget to include encoding-indexes.js first?');
9644 }
9645
9646 // 3. Let dec be a new TextDecoder object.
9647 var dec = this;
9648
9649 // 4. Set dec's encoding to encoding.
9650 dec._encoding = encoding;
9651
9652 // 5. If options's fatal member is true, set dec's error mode to
9653 // fatal.
9654 if (Boolean(options['fatal']))
9655 dec._error_mode = 'fatal';
9656
9657 // 6. If options's ignoreBOM member is true, set dec's ignore BOM
9658 // flag.
9659 if (Boolean(options['ignoreBOM']))
9660 dec._ignoreBOM = true;
9661
9662 // For pre-ES5 runtimes:
9663 if (!Object.defineProperty) {
9664 this.encoding = dec._encoding.name.toLowerCase();
9665 this.fatal = dec._error_mode === 'fatal';
9666 this.ignoreBOM = dec._ignoreBOM;
9667 }
9668
9669 // 7. Return dec.
9670 return dec;
9671 }
9672
9673 if (Object.defineProperty) {
9674 // The encoding attribute's getter must return encoding's name.
9675 Object.defineProperty(TextDecoder.prototype, 'encoding', {
9676 /** @this {TextDecoder} */
9677 get: function() { return this._encoding.name.toLowerCase(); }
9678 });
9679
9680 // The fatal attribute's getter must return true if error mode
9681 // is fatal, and false otherwise.
9682 Object.defineProperty(TextDecoder.prototype, 'fatal', {
9683 /** @this {TextDecoder} */
9684 get: function() { return this._error_mode === 'fatal'; }
9685 });
9686
9687 // The ignoreBOM attribute's getter must return true if ignore
9688 // BOM flag is set, and false otherwise.
9689 Object.defineProperty(TextDecoder.prototype, 'ignoreBOM', {
9690 /** @this {TextDecoder} */
9691 get: function() { return this._ignoreBOM; }
9692 });
9693 }
9694
9695 /**
9696 * @param {BufferSource=} input The buffer of bytes to decode.
9697 * @param {Object=} options
9698 * @return {string} The decoded string.
9699 */
9700 TextDecoder.prototype.decode = function decode(input, options) {
9701 var bytes;
9702 if (typeof input === 'object' && input instanceof ArrayBuffer) {
9703 bytes = new Uint8Array(input);
9704 } else if (typeof input === 'object' && 'buffer' in input &&
9705 input.buffer instanceof ArrayBuffer) {
9706 bytes = new Uint8Array(input.buffer,
9707 input.byteOffset,
9708 input.byteLength);
9709 } else {
9710 bytes = new Uint8Array(0);
9711 }
9712
9713 options = ToDictionary(options);
9714
9715 // 1. If the do not flush flag is unset, set decoder to a new
9716 // encoding's decoder, set stream to a new stream, and unset the
9717 // BOM seen flag.
9718 if (!this._do_not_flush) {
9719 this._decoder = decoders[this._encoding.name]({
9720 fatal: this._error_mode === 'fatal'});
9721 this._BOMseen = false;
9722 }
9723
9724 // 2. If options's stream is true, set the do not flush flag, and
9725 // unset the do not flush flag otherwise.
9726 this._do_not_flush = Boolean(options['stream']);
9727
9728 // 3. If input is given, push a copy of input to stream.
9729 // TODO: Align with spec algorithm - maintain stream on instance.
9730 var input_stream = new Stream(bytes);
9731
9732 // 4. Let output be a new stream.
9733 var output = [];
9734
9735 /** @type {?(number|!Array.<number>)} */
9736 var result;
9737
9738 // 5. While true:
9739 while (true) {
9740 // 1. Let token be the result of reading from stream.
9741 var token = input_stream.read();
9742
9743 // 2. If token is end-of-stream and the do not flush flag is
9744 // set, return output, serialized.
9745 // TODO: Align with spec algorithm.
9746 if (token === end_of_stream)
9747 break;
9748
9749 // 3. Otherwise, run these subsubsteps:
9750
9751 // 1. Let result be the result of processing token for decoder,
9752 // stream, output, and error mode.
9753 result = this._decoder.handler(input_stream, token);
9754
9755 // 2. If result is finished, return output, serialized.
9756 if (result === finished)
9757 break;
9758
9759 if (result !== null) {
9760 if (Array.isArray(result))
9761 output.push.apply(output, /**@type {!Array.<number>}*/(result));
9762 else
9763 output.push(result);
9764 }
9765
9766 // 3. Otherwise, if result is error, throw a TypeError.
9767 // (Thrown in handler)
9768
9769 // 4. Otherwise, do nothing.
9770 }
9771 // TODO: Align with spec algorithm.
9772 if (!this._do_not_flush) {
9773 do {
9774 result = this._decoder.handler(input_stream, input_stream.read());
9775 if (result === finished)
9776 break;
9777 if (result === null)
9778 continue;
9779 if (Array.isArray(result))
9780 output.push.apply(output, /**@type {!Array.<number>}*/(result));
9781 else
9782 output.push(result);
9783 } while (!input_stream.endOfStream());
9784 this._decoder = null;
9785 }
9786
9787 // A TextDecoder object also has an associated serialize stream
9788 // algorithm...
9789 /**
9790 * @param {!Array.<number>} stream
9791 * @return {string}
9792 * @this {TextDecoder}
9793 */
9794 function serializeStream(stream) {
9795 // 1. Let token be the result of reading from stream.
9796 // (Done in-place on array, rather than as a stream)
9797
9798 // 2. If encoding is UTF-8, UTF-16BE, or UTF-16LE, and ignore
9799 // BOM flag and BOM seen flag are unset, run these subsubsteps:
9800 if (includes(['UTF-8', 'UTF-16LE', 'UTF-16BE'], this._encoding.name) &&
9801 !this._ignoreBOM && !this._BOMseen) {
9802 if (stream.length > 0 && stream[0] === 0xFEFF) {
9803 // 1. If token is U+FEFF, set BOM seen flag.
9804 this._BOMseen = true;
9805 stream.shift();
9806 } else if (stream.length > 0) {
9807 // 2. Otherwise, if token is not end-of-stream, set BOM seen
9808 // flag and append token to stream.
9809 this._BOMseen = true;
9810 } else {
9811 // 3. Otherwise, if token is not end-of-stream, append token
9812 // to output.
9813 // (no-op)
9814 }
9815 }
9816 // 4. Otherwise, return output.
9817 return codePointsToString(stream);
9818 }
9819
9820 return serializeStream.call(this, output);
9821 };
9822
9823 // 8.2 Interface TextEncoder
9824
9825 /**
9826 * @constructor
9827 * @param {string=} label The label of the encoding. NONSTANDARD.
9828 * @param {Object=} options NONSTANDARD.
9829 */
9830 function TextEncoder(label, options) {
9831 // Web IDL conventions
9832 if (!(this instanceof TextEncoder))
9833 throw TypeError('Called as a function. Did you forget \'new\'?');
9834 options = ToDictionary(options);
9835
9836 // A TextEncoder object has an associated encoding and encoder.
9837
9838 /** @private */
9839 this._encoding = null;
9840 /** @private @type {?Encoder} */
9841 this._encoder = null;
9842
9843 // Non-standard
9844 /** @private @type {boolean} */
9845 this._do_not_flush = false;
9846 /** @private @type {string} */
9847 this._fatal = Boolean(options['fatal']) ? 'fatal' : 'replacement';
9848
9849 // 1. Let enc be a new TextEncoder object.
9850 var enc = this;
9851
9852 // 2. Set enc's encoding to UTF-8's encoder.
9853 if (Boolean(options['NONSTANDARD_allowLegacyEncoding'])) {
9854 // NONSTANDARD behavior.
9855 label = label !== undefined ? String(label) : DEFAULT_ENCODING;
9856 var encoding = getEncoding(label);
9857 if (encoding === null || encoding.name === 'replacement')
9858 throw RangeError('Unknown encoding: ' + label);
9859 if (!encoders[encoding.name]) {
9860 throw Error('Encoder not present.' +
9861 ' Did you forget to include encoding-indexes.js first?');
9862 }
9863 enc._encoding = encoding;
9864 } else {
9865 // Standard behavior.
9866 enc._encoding = getEncoding('utf-8');
9867
9868 if (label !== undefined && 'console' in global) {
9869 console.warn('TextEncoder constructor called with encoding label, '
9870 + 'which is ignored.');
9871 }
9872 }
9873
9874 // For pre-ES5 runtimes:
9875 if (!Object.defineProperty)
9876 this.encoding = enc._encoding.name.toLowerCase();
9877
9878 // 3. Return enc.
9879 return enc;
9880 }
9881
9882 if (Object.defineProperty) {
9883 // The encoding attribute's getter must return encoding's name.
9884 Object.defineProperty(TextEncoder.prototype, 'encoding', {
9885 /** @this {TextEncoder} */
9886 get: function() { return this._encoding.name.toLowerCase(); }
9887 });
9888 }
9889
9890 /**
9891 * @param {string=} opt_string The string to encode.
9892 * @param {Object=} options
9893 * @return {!Uint8Array} Encoded bytes, as a Uint8Array.
9894 */
9895 TextEncoder.prototype.encode = function encode(opt_string, options) {
9896 opt_string = opt_string === undefined ? '' : String(opt_string);
9897 options = ToDictionary(options);
9898
9899 // NOTE: This option is nonstandard. None of the encodings
9900 // permitted for encoding (i.e. UTF-8, UTF-16) are stateful when
9901 // the input is a USVString so streaming is not necessary.
9902 if (!this._do_not_flush)
9903 this._encoder = encoders[this._encoding.name]({
9904 fatal: this._fatal === 'fatal'});
9905 this._do_not_flush = Boolean(options['stream']);
9906
9907 // 1. Convert input to a stream.
9908 var input = new Stream(stringToCodePoints(opt_string));
9909
9910 // 2. Let output be a new stream
9911 var output = [];
9912
9913 /** @type {?(number|!Array.<number>)} */
9914 var result;
9915 // 3. While true, run these substeps:
9916 while (true) {
9917 // 1. Let token be the result of reading from input.
9918 var token = input.read();
9919 if (token === end_of_stream)
9920 break;
9921 // 2. Let result be the result of processing token for encoder,
9922 // input, output.
9923 result = this._encoder.handler(input, token);
9924 if (result === finished)
9925 break;
9926 if (Array.isArray(result))
9927 output.push.apply(output, /**@type {!Array.<number>}*/(result));
9928 else
9929 output.push(result);
9930 }
9931 // TODO: Align with spec algorithm.
9932 if (!this._do_not_flush) {
9933 while (true) {
9934 result = this._encoder.handler(input, input.read());
9935 if (result === finished)
9936 break;
9937 if (Array.isArray(result))
9938 output.push.apply(output, /**@type {!Array.<number>}*/(result));
9939 else
9940 output.push(result);
9941 }
9942 this._encoder = null;
9943 }
9944 // 3. If result is finished, convert output into a byte sequence,
9945 // and then return a Uint8Array object wrapping an ArrayBuffer
9946 // containing output.
9947 return new Uint8Array(output);
9948 };
9949
9950
9951 //
9952 // 9. The encoding
9953 //
9954
9955 // 9.1 utf-8
9956
9957 // 9.1.1 utf-8 decoder
9958 /**
9959 * @constructor
9960 * @implements {Decoder}
9961 * @param {{fatal: boolean}} options
9962 */
9963 function UTF8Decoder(options) {
9964 var fatal = options.fatal;
9965
9966 // utf-8's decoder's has an associated utf-8 code point, utf-8
9967 // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8
9968 // lower boundary (initially 0x80), and a utf-8 upper boundary
9969 // (initially 0xBF).
9970 var /** @type {number} */ utf8_code_point = 0,
9971 /** @type {number} */ utf8_bytes_seen = 0,
9972 /** @type {number} */ utf8_bytes_needed = 0,
9973 /** @type {number} */ utf8_lower_boundary = 0x80,
9974 /** @type {number} */ utf8_upper_boundary = 0xBF;
9975
9976 /**
9977 * @param {Stream} stream The stream of bytes being decoded.
9978 * @param {number} bite The next byte read from the stream.
9979 * @return {?(number|!Array.<number>)} The next code point(s)
9980 * decoded, or null if not enough data exists in the input
9981 * stream to decode a complete code point.
9982 */
9983 this.handler = function(stream, bite) {
9984 // 1. If byte is end-of-stream and utf-8 bytes needed is not 0,
9985 // set utf-8 bytes needed to 0 and return error.
9986 if (bite === end_of_stream && utf8_bytes_needed !== 0) {
9987 utf8_bytes_needed = 0;
9988 return decoderError(fatal);
9989 }
9990
9991 // 2. If byte is end-of-stream, return finished.
9992 if (bite === end_of_stream)
9993 return finished;
9994
9995 // 3. If utf-8 bytes needed is 0, based on byte:
9996 if (utf8_bytes_needed === 0) {
9997
9998 // 0x00 to 0x7F
9999 if (inRange(bite, 0x00, 0x7F)) {
10000 // Return a code point whose value is byte.
10001 return bite;
10002 }
10003
10004 // 0xC2 to 0xDF
10005 else if (inRange(bite, 0xC2, 0xDF)) {
10006 // 1. Set utf-8 bytes needed to 1.
10007 utf8_bytes_needed = 1;
10008
10009 // 2. Set UTF-8 code point to byte & 0x1F.
10010 utf8_code_point = bite & 0x1F;
10011 }
10012
10013 // 0xE0 to 0xEF
10014 else if (inRange(bite, 0xE0, 0xEF)) {
10015 // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0.
10016 if (bite === 0xE0)
10017 utf8_lower_boundary = 0xA0;
10018 // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F.
10019 if (bite === 0xED)
10020 utf8_upper_boundary = 0x9F;
10021 // 3. Set utf-8 bytes needed to 2.
10022 utf8_bytes_needed = 2;
10023 // 4. Set UTF-8 code point to byte & 0xF.
10024 utf8_code_point = bite & 0xF;
10025 }
10026
10027 // 0xF0 to 0xF4
10028 else if (inRange(bite, 0xF0, 0xF4)) {
10029 // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90.
10030 if (bite === 0xF0)
10031 utf8_lower_boundary = 0x90;
10032 // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F.
10033 if (bite === 0xF4)
10034 utf8_upper_boundary = 0x8F;
10035 // 3. Set utf-8 bytes needed to 3.
10036 utf8_bytes_needed = 3;
10037 // 4. Set UTF-8 code point to byte & 0x7.
10038 utf8_code_point = bite & 0x7;
10039 }
10040
10041 // Otherwise
10042 else {
10043 // Return error.
10044 return decoderError(fatal);
10045 }
10046
10047 // Return continue.
10048 return null;
10049 }
10050
10051 // 4. If byte is not in the range utf-8 lower boundary to utf-8
10052 // upper boundary, inclusive, run these substeps:
10053 if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) {
10054
10055 // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8
10056 // bytes seen to 0, set utf-8 lower boundary to 0x80, and set
10057 // utf-8 upper boundary to 0xBF.
10058 utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0;
10059 utf8_lower_boundary = 0x80;
10060 utf8_upper_boundary = 0xBF;
10061
10062 // 2. Prepend byte to stream.
10063 stream.prepend(bite);
10064
10065 // 3. Return error.
10066 return decoderError(fatal);
10067 }
10068
10069 // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary
10070 // to 0xBF.
10071 utf8_lower_boundary = 0x80;
10072 utf8_upper_boundary = 0xBF;
10073
10074 // 6. Set UTF-8 code point to (UTF-8 code point << 6) | (byte &
10075 // 0x3F)
10076 utf8_code_point = (utf8_code_point << 6) | (bite & 0x3F);
10077
10078 // 7. Increase utf-8 bytes seen by one.
10079 utf8_bytes_seen += 1;
10080
10081 // 8. If utf-8 bytes seen is not equal to utf-8 bytes needed,
10082 // continue.
10083 if (utf8_bytes_seen !== utf8_bytes_needed)
10084 return null;
10085
10086 // 9. Let code point be utf-8 code point.
10087 var code_point = utf8_code_point;
10088
10089 // 10. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes
10090 // seen to 0.
10091 utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0;
10092
10093 // 11. Return a code point whose value is code point.
10094 return code_point;
10095 };
10096 }
10097
10098 // 9.1.2 utf-8 encoder
10099 /**
10100 * @constructor
10101 * @implements {Encoder}
10102 * @param {{fatal: boolean}} options
10103 */
10104 function UTF8Encoder(options) {
10105 var fatal = options.fatal;
10106 /**
10107 * @param {Stream} stream Input stream.
10108 * @param {number} code_point Next code point read from the stream.
10109 * @return {(number|!Array.<number>)} Byte(s) to emit.
10110 */
10111 this.handler = function(stream, code_point) {
10112 // 1. If code point is end-of-stream, return finished.
10113 if (code_point === end_of_stream)
10114 return finished;
10115
10116 // 2. If code point is an ASCII code point, return a byte whose
10117 // value is code point.
10118 if (isASCIICodePoint(code_point))
10119 return code_point;
10120
10121 // 3. Set count and offset based on the range code point is in:
10122 var count, offset;
10123 // U+0080 to U+07FF, inclusive:
10124 if (inRange(code_point, 0x0080, 0x07FF)) {
10125 // 1 and 0xC0
10126 count = 1;
10127 offset = 0xC0;
10128 }
10129 // U+0800 to U+FFFF, inclusive:
10130 else if (inRange(code_point, 0x0800, 0xFFFF)) {
10131 // 2 and 0xE0
10132 count = 2;
10133 offset = 0xE0;
10134 }
10135 // U+10000 to U+10FFFF, inclusive:
10136 else if (inRange(code_point, 0x10000, 0x10FFFF)) {
10137 // 3 and 0xF0
10138 count = 3;
10139 offset = 0xF0;
10140 }
10141
10142 // 4. Let bytes be a byte sequence whose first byte is (code
10143 // point >> (6 × count)) + offset.
10144 var bytes = [(code_point >> (6 * count)) + offset];
10145
10146 // 5. Run these substeps while count is greater than 0:
10147 while (count > 0) {
10148
10149 // 1. Set temp to code point >> (6 × (count − 1)).
10150 var temp = code_point >> (6 * (count - 1));
10151
10152 // 2. Append to bytes 0x80 | (temp & 0x3F).
10153 bytes.push(0x80 | (temp & 0x3F));
10154
10155 // 3. Decrease count by one.
10156 count -= 1;
10157 }
10158
10159 // 6. Return bytes bytes, in order.
10160 return bytes;
10161 };
10162 }
10163
10164 /** @param {{fatal: boolean}} options */
10165 encoders['UTF-8'] = function(options) {
10166 return new UTF8Encoder(options);
10167 };
10168 /** @param {{fatal: boolean}} options */
10169 decoders['UTF-8'] = function(options) {
10170 return new UTF8Decoder(options);
10171 };
10172
10173 //
10174 // 10. Legacy single-byte encodings
10175 //
10176
10177 // 10.1 single-byte decoder
10178 /**
10179 * @constructor
10180 * @implements {Decoder}
10181 * @param {!Array.<number>} index The encoding index.
10182 * @param {{fatal: boolean}} options
10183 */
10184 function SingleByteDecoder(index, options) {
10185 var fatal = options.fatal;
10186 /**
10187 * @param {Stream} stream The stream of bytes being decoded.
10188 * @param {number} bite The next byte read from the stream.
10189 * @return {?(number|!Array.<number>)} The next code point(s)
10190 * decoded, or null if not enough data exists in the input
10191 * stream to decode a complete code point.
10192 */
10193 this.handler = function(stream, bite) {
10194 // 1. If byte is end-of-stream, return finished.
10195 if (bite === end_of_stream)
10196 return finished;
10197
10198 // 2. If byte is an ASCII byte, return a code point whose value
10199 // is byte.
10200 if (isASCIIByte(bite))
10201 return bite;
10202
10203 // 3. Let code point be the index code point for byte − 0x80 in
10204 // index single-byte.
10205 var code_point = index[bite - 0x80];
10206
10207 // 4. If code point is null, return error.
10208 if (code_point === null)
10209 return decoderError(fatal);
10210
10211 // 5. Return a code point whose value is code point.
10212 return code_point;
10213 };
10214 }
10215
10216 // 10.2 single-byte encoder
10217 /**
10218 * @constructor
10219 * @implements {Encoder}
10220 * @param {!Array.<?number>} index The encoding index.
10221 * @param {{fatal: boolean}} options
10222 */
10223 function SingleByteEncoder(index, options) {
10224 var fatal = options.fatal;
10225 /**
10226 * @param {Stream} stream Input stream.
10227 * @param {number} code_point Next code point read from the stream.
10228 * @return {(number|!Array.<number>)} Byte(s) to emit.
10229 */
10230 this.handler = function(stream, code_point) {
10231 // 1. If code point is end-of-stream, return finished.
10232 if (code_point === end_of_stream)
10233 return finished;
10234
10235 // 2. If code point is an ASCII code point, return a byte whose
10236 // value is code point.
10237 if (isASCIICodePoint(code_point))
10238 return code_point;
10239
10240 // 3. Let pointer be the index pointer for code point in index
10241 // single-byte.
10242 var pointer = indexPointerFor(code_point, index);
10243
10244 // 4. If pointer is null, return error with code point.
10245 if (pointer === null)
10246 encoderError(code_point);
10247
10248 // 5. Return a byte whose value is pointer + 0x80.
10249 return pointer + 0x80;
10250 };
10251 }
10252
10253 (function() {
10254 if (!('encoding-indexes' in global))
10255 return;
10256 encodings.forEach(function(category) {
10257 if (category.heading !== 'Legacy single-byte encodings')
10258 return;
10259 category.encodings.forEach(function(encoding) {
10260 var name = encoding.name;
10261 var idx = index(name.toLowerCase());
10262 /** @param {{fatal: boolean}} options */
10263 decoders[name] = function(options) {
10264 return new SingleByteDecoder(idx, options);
10265 };
10266 /** @param {{fatal: boolean}} options */
10267 encoders[name] = function(options) {
10268 return new SingleByteEncoder(idx, options);
10269 };
10270 });
10271 });
10272 }());
10273
10274 //
10275 // 11. Legacy multi-byte Chinese (simplified) encodings
10276 //
10277
10278 // 11.1 gbk
10279
10280 // 11.1.1 gbk decoder
10281 // gbk's decoder is gb18030's decoder.
10282 /** @param {{fatal: boolean}} options */
10283 decoders['GBK'] = function(options) {
10284 return new GB18030Decoder(options);
10285 };
10286
10287 // 11.1.2 gbk encoder
10288 // gbk's encoder is gb18030's encoder with its gbk flag set.
10289 /** @param {{fatal: boolean}} options */
10290 encoders['GBK'] = function(options) {
10291 return new GB18030Encoder(options, true);
10292 };
10293
10294 // 11.2 gb18030
10295
10296 // 11.2.1 gb18030 decoder
10297 /**
10298 * @constructor
10299 * @implements {Decoder}
10300 * @param {{fatal: boolean}} options
10301 */
10302 function GB18030Decoder(options) {
10303 var fatal = options.fatal;
10304 // gb18030's decoder has an associated gb18030 first, gb18030
10305 // second, and gb18030 third (all initially 0x00).
10306 var /** @type {number} */ gb18030_first = 0x00,
10307 /** @type {number} */ gb18030_second = 0x00,
10308 /** @type {number} */ gb18030_third = 0x00;
10309 /**
10310 * @param {Stream} stream The stream of bytes being decoded.
10311 * @param {number} bite The next byte read from the stream.
10312 * @return {?(number|!Array.<number>)} The next code point(s)
10313 * decoded, or null if not enough data exists in the input
10314 * stream to decode a complete code point.
10315 */
10316 this.handler = function(stream, bite) {
10317 // 1. If byte is end-of-stream and gb18030 first, gb18030
10318 // second, and gb18030 third are 0x00, return finished.
10319 if (bite === end_of_stream && gb18030_first === 0x00 &&
10320 gb18030_second === 0x00 && gb18030_third === 0x00) {
10321 return finished;
10322 }
10323 // 2. If byte is end-of-stream, and gb18030 first, gb18030
10324 // second, or gb18030 third is not 0x00, set gb18030 first,
10325 // gb18030 second, and gb18030 third to 0x00, and return error.
10326 if (bite === end_of_stream &&
10327 (gb18030_first !== 0x00 || gb18030_second !== 0x00 ||
10328 gb18030_third !== 0x00)) {
10329 gb18030_first = 0x00;
10330 gb18030_second = 0x00;
10331 gb18030_third = 0x00;
10332 decoderError(fatal);
10333 }
10334 var code_point;
10335 // 3. If gb18030 third is not 0x00, run these substeps:
10336 if (gb18030_third !== 0x00) {
10337 // 1. Let code point be null.
10338 code_point = null;
10339 // 2. If byte is in the range 0x30 to 0x39, inclusive, set
10340 // code point to the index gb18030 ranges code point for
10341 // (((gb18030 first − 0x81) × 10 + gb18030 second − 0x30) ×
10342 // 126 + gb18030 third − 0x81) × 10 + byte − 0x30.
10343 if (inRange(bite, 0x30, 0x39)) {
10344 code_point = indexGB18030RangesCodePointFor(
10345 (((gb18030_first - 0x81) * 10 + gb18030_second - 0x30) * 126 +
10346 gb18030_third - 0x81) * 10 + bite - 0x30);
10347 }
10348
10349 // 3. Let buffer be a byte sequence consisting of gb18030
10350 // second, gb18030 third, and byte, in order.
10351 var buffer = [gb18030_second, gb18030_third, bite];
10352
10353 // 4. Set gb18030 first, gb18030 second, and gb18030 third to
10354 // 0x00.
10355 gb18030_first = 0x00;
10356 gb18030_second = 0x00;
10357 gb18030_third = 0x00;
10358
10359 // 5. If code point is null, prepend buffer to stream and
10360 // return error.
10361 if (code_point === null) {
10362 stream.prepend(buffer);
10363 return decoderError(fatal);
10364 }
10365
10366 // 6. Return a code point whose value is code point.
10367 return code_point;
10368 }
10369
10370 // 4. If gb18030 second is not 0x00, run these substeps:
10371 if (gb18030_second !== 0x00) {
10372
10373 // 1. If byte is in the range 0x81 to 0xFE, inclusive, set
10374 // gb18030 third to byte and return continue.
10375 if (inRange(bite, 0x81, 0xFE)) {
10376 gb18030_third = bite;
10377 return null;
10378 }
10379
10380 // 2. Prepend gb18030 second followed by byte to stream, set
10381 // gb18030 first and gb18030 second to 0x00, and return error.
10382 stream.prepend([gb18030_second, bite]);
10383 gb18030_first = 0x00;
10384 gb18030_second = 0x00;
10385 return decoderError(fatal);
10386 }
10387
10388 // 5. If gb18030 first is not 0x00, run these substeps:
10389 if (gb18030_first !== 0x00) {
10390
10391 // 1. If byte is in the range 0x30 to 0x39, inclusive, set
10392 // gb18030 second to byte and return continue.
10393 if (inRange(bite, 0x30, 0x39)) {
10394 gb18030_second = bite;
10395 return null;
10396 }
10397
10398 // 2. Let lead be gb18030 first, let pointer be null, and set
10399 // gb18030 first to 0x00.
10400 var lead = gb18030_first;
10401 var pointer = null;
10402 gb18030_first = 0x00;
10403
10404 // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41
10405 // otherwise.
10406 var offset = bite < 0x7F ? 0x40 : 0x41;
10407
10408 // 4. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80
10409 // to 0xFE, inclusive, set pointer to (lead − 0x81) × 190 +
10410 // (byte − offset).
10411 if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE))
10412 pointer = (lead - 0x81) * 190 + (bite - offset);
10413
10414 // 5. Let code point be null if pointer is null and the index
10415 // code point for pointer in index gb18030 otherwise.
10416 code_point = pointer === null ? null :
10417 indexCodePointFor(pointer, index('gb18030'));
10418
10419 // 6. If code point is null and byte is an ASCII byte, prepend
10420 // byte to stream.
10421 if (code_point === null && isASCIIByte(bite))
10422 stream.prepend(bite);
10423
10424 // 7. If code point is null, return error.
10425 if (code_point === null)
10426 return decoderError(fatal);
10427
10428 // 8. Return a code point whose value is code point.
10429 return code_point;
10430 }
10431
10432 // 6. If byte is an ASCII byte, return a code point whose value
10433 // is byte.
10434 if (isASCIIByte(bite))
10435 return bite;
10436
10437 // 7. If byte is 0x80, return code point U+20AC.
10438 if (bite === 0x80)
10439 return 0x20AC;
10440
10441 // 8. If byte is in the range 0x81 to 0xFE, inclusive, set
10442 // gb18030 first to byte and return continue.
10443 if (inRange(bite, 0x81, 0xFE)) {
10444 gb18030_first = bite;
10445 return null;
10446 }
10447
10448 // 9. Return error.
10449 return decoderError(fatal);
10450 };
10451 }
10452
10453 // 11.2.2 gb18030 encoder
10454 /**
10455 * @constructor
10456 * @implements {Encoder}
10457 * @param {{fatal: boolean}} options
10458 * @param {boolean=} gbk_flag
10459 */
10460 function GB18030Encoder(options, gbk_flag) {
10461 var fatal = options.fatal;
10462 // gb18030's decoder has an associated gbk flag (initially unset).
10463 /**
10464 * @param {Stream} stream Input stream.
10465 * @param {number} code_point Next code point read from the stream.
10466 * @return {(number|!Array.<number>)} Byte(s) to emit.
10467 */
10468 this.handler = function(stream, code_point) {
10469 // 1. If code point is end-of-stream, return finished.
10470 if (code_point === end_of_stream)
10471 return finished;
10472
10473 // 2. If code point is an ASCII code point, return a byte whose
10474 // value is code point.
10475 if (isASCIICodePoint(code_point))
10476 return code_point;
10477
10478 // 3. If code point is U+E5E5, return error with code point.
10479 if (code_point === 0xE5E5)
10480 return encoderError(code_point);
10481
10482 // 4. If the gbk flag is set and code point is U+20AC, return
10483 // byte 0x80.
10484 if (gbk_flag && code_point === 0x20AC)
10485 return 0x80;
10486
10487 // 5. Let pointer be the index pointer for code point in index
10488 // gb18030.
10489 var pointer = indexPointerFor(code_point, index('gb18030'));
10490
10491 // 6. If pointer is not null, run these substeps:
10492 if (pointer !== null) {
10493
10494 // 1. Let lead be floor(pointer / 190) + 0x81.
10495 var lead = floor(pointer / 190) + 0x81;
10496
10497 // 2. Let trail be pointer % 190.
10498 var trail = pointer % 190;
10499
10500 // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise.
10501 var offset = trail < 0x3F ? 0x40 : 0x41;
10502
10503 // 4. Return two bytes whose values are lead and trail + offset.
10504 return [lead, trail + offset];
10505 }
10506
10507 // 7. If gbk flag is set, return error with code point.
10508 if (gbk_flag)
10509 return encoderError(code_point);
10510
10511 // 8. Set pointer to the index gb18030 ranges pointer for code
10512 // point.
10513 pointer = indexGB18030RangesPointerFor(code_point);
10514
10515 // 9. Let byte1 be floor(pointer / 10 / 126 / 10).
10516 var byte1 = floor(pointer / 10 / 126 / 10);
10517
10518 // 10. Set pointer to pointer − byte1 × 10 × 126 × 10.
10519 pointer = pointer - byte1 * 10 * 126 * 10;
10520
10521 // 11. Let byte2 be floor(pointer / 10 / 126).
10522 var byte2 = floor(pointer / 10 / 126);
10523
10524 // 12. Set pointer to pointer − byte2 × 10 × 126.
10525 pointer = pointer - byte2 * 10 * 126;
10526
10527 // 13. Let byte3 be floor(pointer / 10).
10528 var byte3 = floor(pointer / 10);
10529
10530 // 14. Let byte4 be pointer − byte3 × 10.
10531 var byte4 = pointer - byte3 * 10;
10532
10533 // 15. Return four bytes whose values are byte1 + 0x81, byte2 +
10534 // 0x30, byte3 + 0x81, byte4 + 0x30.
10535 return [byte1 + 0x81,
10536 byte2 + 0x30,
10537 byte3 + 0x81,
10538 byte4 + 0x30];
10539 };
10540 }
10541
10542 /** @param {{fatal: boolean}} options */
10543 encoders['gb18030'] = function(options) {
10544 return new GB18030Encoder(options);
10545 };
10546 /** @param {{fatal: boolean}} options */
10547 decoders['gb18030'] = function(options) {
10548 return new GB18030Decoder(options);
10549 };
10550
10551
10552 //
10553 // 12. Legacy multi-byte Chinese (traditional) encodings
10554 //
10555
10556 // 12.1 Big5
10557
10558 // 12.1.1 Big5 decoder
10559 /**
10560 * @constructor
10561 * @implements {Decoder}
10562 * @param {{fatal: boolean}} options
10563 */
10564 function Big5Decoder(options) {
10565 var fatal = options.fatal;
10566 // Big5's decoder has an associated Big5 lead (initially 0x00).
10567 var /** @type {number} */ Big5_lead = 0x00;
10568
10569 /**
10570 * @param {Stream} stream The stream of bytes being decoded.
10571 * @param {number} bite The next byte read from the stream.
10572 * @return {?(number|!Array.<number>)} The next code point(s)
10573 * decoded, or null if not enough data exists in the input
10574 * stream to decode a complete code point.
10575 */
10576 this.handler = function(stream, bite) {
10577 // 1. If byte is end-of-stream and Big5 lead is not 0x00, set
10578 // Big5 lead to 0x00 and return error.
10579 if (bite === end_of_stream && Big5_lead !== 0x00) {
10580 Big5_lead = 0x00;
10581 return decoderError(fatal);
10582 }
10583
10584 // 2. If byte is end-of-stream and Big5 lead is 0x00, return
10585 // finished.
10586 if (bite === end_of_stream && Big5_lead === 0x00)
10587 return finished;
10588
10589 // 3. If Big5 lead is not 0x00, let lead be Big5 lead, let
10590 // pointer be null, set Big5 lead to 0x00, and then run these
10591 // substeps:
10592 if (Big5_lead !== 0x00) {
10593 var lead = Big5_lead;
10594 var pointer = null;
10595 Big5_lead = 0x00;
10596
10597 // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62
10598 // otherwise.
10599 var offset = bite < 0x7F ? 0x40 : 0x62;
10600
10601 // 2. If byte is in the range 0x40 to 0x7E, inclusive, or 0xA1
10602 // to 0xFE, inclusive, set pointer to (lead − 0x81) × 157 +
10603 // (byte − offset).
10604 if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE))
10605 pointer = (lead - 0x81) * 157 + (bite - offset);
10606
10607 // 3. If there is a row in the table below whose first column
10608 // is pointer, return the two code points listed in its second
10609 // column
10610 // Pointer | Code points
10611 // --------+--------------
10612 // 1133 | U+00CA U+0304
10613 // 1135 | U+00CA U+030C
10614 // 1164 | U+00EA U+0304
10615 // 1166 | U+00EA U+030C
10616 switch (pointer) {
10617 case 1133: return [0x00CA, 0x0304];
10618 case 1135: return [0x00CA, 0x030C];
10619 case 1164: return [0x00EA, 0x0304];
10620 case 1166: return [0x00EA, 0x030C];
10621 }
10622
10623 // 4. Let code point be null if pointer is null and the index
10624 // code point for pointer in index Big5 otherwise.
10625 var code_point = (pointer === null) ? null :
10626 indexCodePointFor(pointer, index('big5'));
10627
10628 // 5. If code point is null and byte is an ASCII byte, prepend
10629 // byte to stream.
10630 if (code_point === null && isASCIIByte(bite))
10631 stream.prepend(bite);
10632
10633 // 6. If code point is null, return error.
10634 if (code_point === null)
10635 return decoderError(fatal);
10636
10637 // 7. Return a code point whose value is code point.
10638 return code_point;
10639 }
10640
10641 // 4. If byte is an ASCII byte, return a code point whose value
10642 // is byte.
10643 if (isASCIIByte(bite))
10644 return bite;
10645
10646 // 5. If byte is in the range 0x81 to 0xFE, inclusive, set Big5
10647 // lead to byte and return continue.
10648 if (inRange(bite, 0x81, 0xFE)) {
10649 Big5_lead = bite;
10650 return null;
10651 }
10652
10653 // 6. Return error.
10654 return decoderError(fatal);
10655 };
10656 }
10657
10658 // 12.1.2 Big5 encoder
10659 /**
10660 * @constructor
10661 * @implements {Encoder}
10662 * @param {{fatal: boolean}} options
10663 */
10664 function Big5Encoder(options) {
10665 var fatal = options.fatal;
10666 /**
10667 * @param {Stream} stream Input stream.
10668 * @param {number} code_point Next code point read from the stream.
10669 * @return {(number|!Array.<number>)} Byte(s) to emit.
10670 */
10671 this.handler = function(stream, code_point) {
10672 // 1. If code point is end-of-stream, return finished.
10673 if (code_point === end_of_stream)
10674 return finished;
10675
10676 // 2. If code point is an ASCII code point, return a byte whose
10677 // value is code point.
10678 if (isASCIICodePoint(code_point))
10679 return code_point;
10680
10681 // 3. Let pointer be the index Big5 pointer for code point.
10682 var pointer = indexBig5PointerFor(code_point);
10683
10684 // 4. If pointer is null, return error with code point.
10685 if (pointer === null)
10686 return encoderError(code_point);
10687
10688 // 5. Let lead be floor(pointer / 157) + 0x81.
10689 var lead = floor(pointer / 157) + 0x81;
10690
10691 // 6. If lead is less than 0xA1, return error with code point.
10692 if (lead < 0xA1)
10693 return encoderError(code_point);
10694
10695 // 7. Let trail be pointer % 157.
10696 var trail = pointer % 157;
10697
10698 // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62
10699 // otherwise.
10700 var offset = trail < 0x3F ? 0x40 : 0x62;
10701
10702 // Return two bytes whose values are lead and trail + offset.
10703 return [lead, trail + offset];
10704 };
10705 }
10706
10707 /** @param {{fatal: boolean}} options */
10708 encoders['Big5'] = function(options) {
10709 return new Big5Encoder(options);
10710 };
10711 /** @param {{fatal: boolean}} options */
10712 decoders['Big5'] = function(options) {
10713 return new Big5Decoder(options);
10714 };
10715
10716
10717 //
10718 // 13. Legacy multi-byte Japanese encodings
10719 //
10720
10721 // 13.1 euc-jp
10722
10723 // 13.1.1 euc-jp decoder
10724 /**
10725 * @constructor
10726 * @implements {Decoder}
10727 * @param {{fatal: boolean}} options
10728 */
10729 function EUCJPDecoder(options) {
10730 var fatal = options.fatal;
10731
10732 // euc-jp's decoder has an associated euc-jp jis0212 flag
10733 // (initially unset) and euc-jp lead (initially 0x00).
10734 var /** @type {boolean} */ eucjp_jis0212_flag = false,
10735 /** @type {number} */ eucjp_lead = 0x00;
10736
10737 /**
10738 * @param {Stream} stream The stream of bytes being decoded.
10739 * @param {number} bite The next byte read from the stream.
10740 * @return {?(number|!Array.<number>)} The next code point(s)
10741 * decoded, or null if not enough data exists in the input
10742 * stream to decode a complete code point.
10743 */
10744 this.handler = function(stream, bite) {
10745 // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set
10746 // euc-jp lead to 0x00, and return error.
10747 if (bite === end_of_stream && eucjp_lead !== 0x00) {
10748 eucjp_lead = 0x00;
10749 return decoderError(fatal);
10750 }
10751
10752 // 2. If byte is end-of-stream and euc-jp lead is 0x00, return
10753 // finished.
10754 if (bite === end_of_stream && eucjp_lead === 0x00)
10755 return finished;
10756
10757 // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to
10758 // 0xDF, inclusive, set euc-jp lead to 0x00 and return a code
10759 // point whose value is 0xFF61 − 0xA1 + byte.
10760 if (eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) {
10761 eucjp_lead = 0x00;
10762 return 0xFF61 - 0xA1 + bite;
10763 }
10764
10765 // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to
10766 // 0xFE, inclusive, set the euc-jp jis0212 flag, set euc-jp lead
10767 // to byte, and return continue.
10768 if (eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) {
10769 eucjp_jis0212_flag = true;
10770 eucjp_lead = bite;
10771 return null;
10772 }
10773
10774 // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set
10775 // euc-jp lead to 0x00, and run these substeps:
10776 if (eucjp_lead !== 0x00) {
10777 var lead = eucjp_lead;
10778 eucjp_lead = 0x00;
10779
10780 // 1. Let code point be null.
10781 var code_point = null;
10782
10783 // 2. If lead and byte are both in the range 0xA1 to 0xFE,
10784 // inclusive, set code point to the index code point for (lead
10785 // − 0xA1) × 94 + byte − 0xA1 in index jis0208 if the euc-jp
10786 // jis0212 flag is unset and in index jis0212 otherwise.
10787 if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) {
10788 code_point = indexCodePointFor(
10789 (lead - 0xA1) * 94 + (bite - 0xA1),
10790 index(!eucjp_jis0212_flag ? 'jis0208' : 'jis0212'));
10791 }
10792
10793 // 3. Unset the euc-jp jis0212 flag.
10794 eucjp_jis0212_flag = false;
10795
10796 // 4. If byte is not in the range 0xA1 to 0xFE, inclusive,
10797 // prepend byte to stream.
10798 if (!inRange(bite, 0xA1, 0xFE))
10799 stream.prepend(bite);
10800
10801 // 5. If code point is null, return error.
10802 if (code_point === null)
10803 return decoderError(fatal);
10804
10805 // 6. Return a code point whose value is code point.
10806 return code_point;
10807 }
10808
10809 // 6. If byte is an ASCII byte, return a code point whose value
10810 // is byte.
10811 if (isASCIIByte(bite))
10812 return bite;
10813
10814 // 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE,
10815 // inclusive, set euc-jp lead to byte and return continue.
10816 if (bite === 0x8E || bite === 0x8F || inRange(bite, 0xA1, 0xFE)) {
10817 eucjp_lead = bite;
10818 return null;
10819 }
10820
10821 // 8. Return error.
10822 return decoderError(fatal);
10823 };
10824 }
10825
10826 // 13.1.2 euc-jp encoder
10827 /**
10828 * @constructor
10829 * @implements {Encoder}
10830 * @param {{fatal: boolean}} options
10831 */
10832 function EUCJPEncoder(options) {
10833 var fatal = options.fatal;
10834 /**
10835 * @param {Stream} stream Input stream.
10836 * @param {number} code_point Next code point read from the stream.
10837 * @return {(number|!Array.<number>)} Byte(s) to emit.
10838 */
10839 this.handler = function(stream, code_point) {
10840 // 1. If code point is end-of-stream, return finished.
10841 if (code_point === end_of_stream)
10842 return finished;
10843
10844 // 2. If code point is an ASCII code point, return a byte whose
10845 // value is code point.
10846 if (isASCIICodePoint(code_point))
10847 return code_point;
10848
10849 // 3. If code point is U+00A5, return byte 0x5C.
10850 if (code_point === 0x00A5)
10851 return 0x5C;
10852
10853 // 4. If code point is U+203E, return byte 0x7E.
10854 if (code_point === 0x203E)
10855 return 0x7E;
10856
10857 // 5. If code point is in the range U+FF61 to U+FF9F, inclusive,
10858 // return two bytes whose values are 0x8E and code point −
10859 // 0xFF61 + 0xA1.
10860 if (inRange(code_point, 0xFF61, 0xFF9F))
10861 return [0x8E, code_point - 0xFF61 + 0xA1];
10862
10863 // 6. If code point is U+2212, set it to U+FF0D.
10864 if (code_point === 0x2212)
10865 code_point = 0xFF0D;
10866
10867 // 7. Let pointer be the index pointer for code point in index
10868 // jis0208.
10869 var pointer = indexPointerFor(code_point, index('jis0208'));
10870
10871 // 8. If pointer is null, return error with code point.
10872 if (pointer === null)
10873 return encoderError(code_point);
10874
10875 // 9. Let lead be floor(pointer / 94) + 0xA1.
10876 var lead = floor(pointer / 94) + 0xA1;
10877
10878 // 10. Let trail be pointer % 94 + 0xA1.
10879 var trail = pointer % 94 + 0xA1;
10880
10881 // 11. Return two bytes whose values are lead and trail.
10882 return [lead, trail];
10883 };
10884 }
10885
10886 /** @param {{fatal: boolean}} options */
10887 encoders['EUC-JP'] = function(options) {
10888 return new EUCJPEncoder(options);
10889 };
10890 /** @param {{fatal: boolean}} options */
10891 decoders['EUC-JP'] = function(options) {
10892 return new EUCJPDecoder(options);
10893 };
10894
10895 // 13.2 iso-2022-jp
10896
10897 // 13.2.1 iso-2022-jp decoder
10898 /**
10899 * @constructor
10900 * @implements {Decoder}
10901 * @param {{fatal: boolean}} options
10902 */
10903 function ISO2022JPDecoder(options) {
10904 var fatal = options.fatal;
10905 /** @enum */
10906 var states = {
10907 ASCII: 0,
10908 Roman: 1,
10909 Katakana: 2,
10910 LeadByte: 3,
10911 TrailByte: 4,
10912 EscapeStart: 5,
10913 Escape: 6
10914 };
10915 // iso-2022-jp's decoder has an associated iso-2022-jp decoder
10916 // state (initially ASCII), iso-2022-jp decoder output state
10917 // (initially ASCII), iso-2022-jp lead (initially 0x00), and
10918 // iso-2022-jp output flag (initially unset).
10919 var /** @type {number} */ iso2022jp_decoder_state = states.ASCII,
10920 /** @type {number} */ iso2022jp_decoder_output_state = states.ASCII,
10921 /** @type {number} */ iso2022jp_lead = 0x00,
10922 /** @type {boolean} */ iso2022jp_output_flag = false;
10923 /**
10924 * @param {Stream} stream The stream of bytes being decoded.
10925 * @param {number} bite The next byte read from the stream.
10926 * @return {?(number|!Array.<number>)} The next code point(s)
10927 * decoded, or null if not enough data exists in the input
10928 * stream to decode a complete code point.
10929 */
10930 this.handler = function(stream, bite) {
10931 // switching on iso-2022-jp decoder state:
10932 switch (iso2022jp_decoder_state) {
10933 default:
10934 case states.ASCII:
10935 // ASCII
10936 // Based on byte:
10937
10938 // 0x1B
10939 if (bite === 0x1B) {
10940 // Set iso-2022-jp decoder state to escape start and return
10941 // continue.
10942 iso2022jp_decoder_state = states.EscapeStart;
10943 return null;
10944 }
10945
10946 // 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B
10947 if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E
10948 && bite !== 0x0F && bite !== 0x1B) {
10949 // Unset the iso-2022-jp output flag and return a code point
10950 // whose value is byte.
10951 iso2022jp_output_flag = false;
10952 return bite;
10953 }
10954
10955 // end-of-stream
10956 if (bite === end_of_stream) {
10957 // Return finished.
10958 return finished;
10959 }
10960
10961 // Otherwise
10962 // Unset the iso-2022-jp output flag and return error.
10963 iso2022jp_output_flag = false;
10964 return decoderError(fatal);
10965
10966 case states.Roman:
10967 // Roman
10968 // Based on byte:
10969
10970 // 0x1B
10971 if (bite === 0x1B) {
10972 // Set iso-2022-jp decoder state to escape start and return
10973 // continue.
10974 iso2022jp_decoder_state = states.EscapeStart;
10975 return null;
10976 }
10977
10978 // 0x5C
10979 if (bite === 0x5C) {
10980 // Unset the iso-2022-jp output flag and return code point
10981 // U+00A5.
10982 iso2022jp_output_flag = false;
10983 return 0x00A5;
10984 }
10985
10986 // 0x7E
10987 if (bite === 0x7E) {
10988 // Unset the iso-2022-jp output flag and return code point
10989 // U+203E.
10990 iso2022jp_output_flag = false;
10991 return 0x203E;
10992 }
10993
10994 // 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E
10995 if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F
10996 && bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) {
10997 // Unset the iso-2022-jp output flag and return a code point
10998 // whose value is byte.
10999 iso2022jp_output_flag = false;
11000 return bite;
11001 }
11002
11003 // end-of-stream
11004 if (bite === end_of_stream) {
11005 // Return finished.
11006 return finished;
11007 }
11008
11009 // Otherwise
11010 // Unset the iso-2022-jp output flag and return error.
11011 iso2022jp_output_flag = false;
11012 return decoderError(fatal);
11013
11014 case states.Katakana:
11015 // Katakana
11016 // Based on byte:
11017
11018 // 0x1B
11019 if (bite === 0x1B) {
11020 // Set iso-2022-jp decoder state to escape start and return
11021 // continue.
11022 iso2022jp_decoder_state = states.EscapeStart;
11023 return null;
11024 }
11025
11026 // 0x21 to 0x5F
11027 if (inRange(bite, 0x21, 0x5F)) {
11028 // Unset the iso-2022-jp output flag and return a code point
11029 // whose value is 0xFF61 − 0x21 + byte.
11030 iso2022jp_output_flag = false;
11031 return 0xFF61 - 0x21 + bite;
11032 }
11033
11034 // end-of-stream
11035 if (bite === end_of_stream) {
11036 // Return finished.
11037 return finished;
11038 }
11039
11040 // Otherwise
11041 // Unset the iso-2022-jp output flag and return error.
11042 iso2022jp_output_flag = false;
11043 return decoderError(fatal);
11044
11045 case states.LeadByte:
11046 // Lead byte
11047 // Based on byte:
11048
11049 // 0x1B
11050 if (bite === 0x1B) {
11051 // Set iso-2022-jp decoder state to escape start and return
11052 // continue.
11053 iso2022jp_decoder_state = states.EscapeStart;
11054 return null;
11055 }
11056
11057 // 0x21 to 0x7E
11058 if (inRange(bite, 0x21, 0x7E)) {
11059 // Unset the iso-2022-jp output flag, set iso-2022-jp lead
11060 // to byte, iso-2022-jp decoder state to trail byte, and
11061 // return continue.
11062 iso2022jp_output_flag = false;
11063 iso2022jp_lead = bite;
11064 iso2022jp_decoder_state = states.TrailByte;
11065 return null;
11066 }
11067
11068 // end-of-stream
11069 if (bite === end_of_stream) {
11070 // Return finished.
11071 return finished;
11072 }
11073
11074 // Otherwise
11075 // Unset the iso-2022-jp output flag and return error.
11076 iso2022jp_output_flag = false;
11077 return decoderError(fatal);
11078
11079 case states.TrailByte:
11080 // Trail byte
11081 // Based on byte:
11082
11083 // 0x1B
11084 if (bite === 0x1B) {
11085 // Set iso-2022-jp decoder state to escape start and return
11086 // continue.
11087 iso2022jp_decoder_state = states.EscapeStart;
11088 return decoderError(fatal);
11089 }
11090
11091 // 0x21 to 0x7E
11092 if (inRange(bite, 0x21, 0x7E)) {
11093 // 1. Set the iso-2022-jp decoder state to lead byte.
11094 iso2022jp_decoder_state = states.LeadByte;
11095
11096 // 2. Let pointer be (iso-2022-jp lead − 0x21) × 94 + byte − 0x21.
11097 var pointer = (iso2022jp_lead - 0x21) * 94 + bite - 0x21;
11098
11099 // 3. Let code point be the index code point for pointer in
11100 // index jis0208.
11101 var code_point = indexCodePointFor(pointer, index('jis0208'));
11102
11103 // 4. If code point is null, return error.
11104 if (code_point === null)
11105 return decoderError(fatal);
11106
11107 // 5. Return a code point whose value is code point.
11108 return code_point;
11109 }
11110
11111 // end-of-stream
11112 if (bite === end_of_stream) {
11113 // Set the iso-2022-jp decoder state to lead byte, prepend
11114 // byte to stream, and return error.
11115 iso2022jp_decoder_state = states.LeadByte;
11116 stream.prepend(bite);
11117 return decoderError(fatal);
11118 }
11119
11120 // Otherwise
11121 // Set iso-2022-jp decoder state to lead byte and return
11122 // error.
11123 iso2022jp_decoder_state = states.LeadByte;
11124 return decoderError(fatal);
11125
11126 case states.EscapeStart:
11127 // Escape start
11128
11129 // 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to
11130 // byte, iso-2022-jp decoder state to escape, and return
11131 // continue.
11132 if (bite === 0x24 || bite === 0x28) {
11133 iso2022jp_lead = bite;
11134 iso2022jp_decoder_state = states.Escape;
11135 return null;
11136 }
11137
11138 // 2. Prepend byte to stream.
11139 stream.prepend(bite);
11140
11141 // 3. Unset the iso-2022-jp output flag, set iso-2022-jp
11142 // decoder state to iso-2022-jp decoder output state, and
11143 // return error.
11144 iso2022jp_output_flag = false;
11145 iso2022jp_decoder_state = iso2022jp_decoder_output_state;
11146 return decoderError(fatal);
11147
11148 case states.Escape:
11149 // Escape
11150
11151 // 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to
11152 // 0x00.
11153 var lead = iso2022jp_lead;
11154 iso2022jp_lead = 0x00;
11155
11156 // 2. Let state be null.
11157 var state = null;
11158
11159 // 3. If lead is 0x28 and byte is 0x42, set state to ASCII.
11160 if (lead === 0x28 && bite === 0x42)
11161 state = states.ASCII;
11162
11163 // 4. If lead is 0x28 and byte is 0x4A, set state to Roman.
11164 if (lead === 0x28 && bite === 0x4A)
11165 state = states.Roman;
11166
11167 // 5. If lead is 0x28 and byte is 0x49, set state to Katakana.
11168 if (lead === 0x28 && bite === 0x49)
11169 state = states.Katakana;
11170
11171 // 6. If lead is 0x24 and byte is either 0x40 or 0x42, set
11172 // state to lead byte.
11173 if (lead === 0x24 && (bite === 0x40 || bite === 0x42))
11174 state = states.LeadByte;
11175
11176 // 7. If state is non-null, run these substeps:
11177 if (state !== null) {
11178 // 1. Set iso-2022-jp decoder state and iso-2022-jp decoder
11179 // output state to states.
11180 iso2022jp_decoder_state = iso2022jp_decoder_state = state;
11181
11182 // 2. Let output flag be the iso-2022-jp output flag.
11183 var output_flag = iso2022jp_output_flag;
11184
11185 // 3. Set the iso-2022-jp output flag.
11186 iso2022jp_output_flag = true;
11187
11188 // 4. Return continue, if output flag is unset, and error
11189 // otherwise.
11190 return !output_flag ? null : decoderError(fatal);
11191 }
11192
11193 // 8. Prepend lead and byte to stream.
11194 stream.prepend([lead, bite]);
11195
11196 // 9. Unset the iso-2022-jp output flag, set iso-2022-jp
11197 // decoder state to iso-2022-jp decoder output state and
11198 // return error.
11199 iso2022jp_output_flag = false;
11200 iso2022jp_decoder_state = iso2022jp_decoder_output_state;
11201 return decoderError(fatal);
11202 }
11203 };
11204 }
11205
11206 // 13.2.2 iso-2022-jp encoder
11207 /**
11208 * @constructor
11209 * @implements {Encoder}
11210 * @param {{fatal: boolean}} options
11211 */
11212 function ISO2022JPEncoder(options) {
11213 var fatal = options.fatal;
11214 // iso-2022-jp's encoder has an associated iso-2022-jp encoder
11215 // state which is one of ASCII, Roman, and jis0208 (initially
11216 // ASCII).
11217 /** @enum */
11218 var states = {
11219 ASCII: 0,
11220 Roman: 1,
11221 jis0208: 2
11222 };
11223 var /** @type {number} */ iso2022jp_state = states.ASCII;
11224 /**
11225 * @param {Stream} stream Input stream.
11226 * @param {number} code_point Next code point read from the stream.
11227 * @return {(number|!Array.<number>)} Byte(s) to emit.
11228 */
11229 this.handler = function(stream, code_point) {
11230 // 1. If code point is end-of-stream and iso-2022-jp encoder
11231 // state is not ASCII, prepend code point to stream, set
11232 // iso-2022-jp encoder state to ASCII, and return three bytes
11233 // 0x1B 0x28 0x42.
11234 if (code_point === end_of_stream &&
11235 iso2022jp_state !== states.ASCII) {
11236 stream.prepend(code_point);
11237 iso2022jp_state = states.ASCII;
11238 return [0x1B, 0x28, 0x42];
11239 }
11240
11241 // 2. If code point is end-of-stream and iso-2022-jp encoder
11242 // state is ASCII, return finished.
11243 if (code_point === end_of_stream && iso2022jp_state === states.ASCII)
11244 return finished;
11245
11246 // 3. If ISO-2022-JP encoder state is ASCII or Roman, and code
11247 // point is U+000E, U+000F, or U+001B, return error with U+FFFD.
11248 if ((iso2022jp_state === states.ASCII ||
11249 iso2022jp_state === states.Roman) &&
11250 (code_point === 0x000E || code_point === 0x000F ||
11251 code_point === 0x001B)) {
11252 return encoderError(0xFFFD);
11253 }
11254
11255 // 4. If iso-2022-jp encoder state is ASCII and code point is an
11256 // ASCII code point, return a byte whose value is code point.
11257 if (iso2022jp_state === states.ASCII &&
11258 isASCIICodePoint(code_point))
11259 return code_point;
11260
11261 // 5. If iso-2022-jp encoder state is Roman and code point is an
11262 // ASCII code point, excluding U+005C and U+007E, or is U+00A5
11263 // or U+203E, run these substeps:
11264 if (iso2022jp_state === states.Roman &&
11265 ((isASCIICodePoint(code_point) &&
11266 code_point !== 0x005C && code_point !== 0x007E) ||
11267 (code_point == 0x00A5 || code_point == 0x203E))) {
11268
11269 // 1. If code point is an ASCII code point, return a byte
11270 // whose value is code point.
11271 if (isASCIICodePoint(code_point))
11272 return code_point;
11273
11274 // 2. If code point is U+00A5, return byte 0x5C.
11275 if (code_point === 0x00A5)
11276 return 0x5C;
11277
11278 // 3. If code point is U+203E, return byte 0x7E.
11279 if (code_point === 0x203E)
11280 return 0x7E;
11281 }
11282
11283 // 6. If code point is an ASCII code point, and iso-2022-jp
11284 // encoder state is not ASCII, prepend code point to stream, set
11285 // iso-2022-jp encoder state to ASCII, and return three bytes
11286 // 0x1B 0x28 0x42.
11287 if (isASCIICodePoint(code_point) &&
11288 iso2022jp_state !== states.ASCII) {
11289 stream.prepend(code_point);
11290 iso2022jp_state = states.ASCII;
11291 return [0x1B, 0x28, 0x42];
11292 }
11293
11294 // 7. If code point is either U+00A5 or U+203E, and iso-2022-jp
11295 // encoder state is not Roman, prepend code point to stream, set
11296 // iso-2022-jp encoder state to Roman, and return three bytes
11297 // 0x1B 0x28 0x4A.
11298 if ((code_point === 0x00A5 || code_point === 0x203E) &&
11299 iso2022jp_state !== states.Roman) {
11300 stream.prepend(code_point);
11301 iso2022jp_state = states.Roman;
11302 return [0x1B, 0x28, 0x4A];
11303 }
11304
11305 // 8. If code point is U+2212, set it to U+FF0D.
11306 if (code_point === 0x2212)
11307 code_point = 0xFF0D;
11308
11309 // 9. Let pointer be the index pointer for code point in index
11310 // jis0208.
11311 var pointer = indexPointerFor(code_point, index('jis0208'));
11312
11313 // 10. If pointer is null, return error with code point.
11314 if (pointer === null)
11315 return encoderError(code_point);
11316
11317 // 11. If iso-2022-jp encoder state is not jis0208, prepend code
11318 // point to stream, set iso-2022-jp encoder state to jis0208,
11319 // and return three bytes 0x1B 0x24 0x42.
11320 if (iso2022jp_state !== states.jis0208) {
11321 stream.prepend(code_point);
11322 iso2022jp_state = states.jis0208;
11323 return [0x1B, 0x24, 0x42];
11324 }
11325
11326 // 12. Let lead be floor(pointer / 94) + 0x21.
11327 var lead = floor(pointer / 94) + 0x21;
11328
11329 // 13. Let trail be pointer % 94 + 0x21.
11330 var trail = pointer % 94 + 0x21;
11331
11332 // 14. Return two bytes whose values are lead and trail.
11333 return [lead, trail];
11334 };
11335 }
11336
11337 /** @param {{fatal: boolean}} options */
11338 encoders['ISO-2022-JP'] = function(options) {
11339 return new ISO2022JPEncoder(options);
11340 };
11341 /** @param {{fatal: boolean}} options */
11342 decoders['ISO-2022-JP'] = function(options) {
11343 return new ISO2022JPDecoder(options);
11344 };
11345
11346 // 13.3 Shift_JIS
11347
11348 // 13.3.1 Shift_JIS decoder
11349 /**
11350 * @constructor
11351 * @implements {Decoder}
11352 * @param {{fatal: boolean}} options
11353 */
11354 function ShiftJISDecoder(options) {
11355 var fatal = options.fatal;
11356 // Shift_JIS's decoder has an associated Shift_JIS lead (initially
11357 // 0x00).
11358 var /** @type {number} */ Shift_JIS_lead = 0x00;
11359 /**
11360 * @param {Stream} stream The stream of bytes being decoded.
11361 * @param {number} bite The next byte read from the stream.
11362 * @return {?(number|!Array.<number>)} The next code point(s)
11363 * decoded, or null if not enough data exists in the input
11364 * stream to decode a complete code point.
11365 */
11366 this.handler = function(stream, bite) {
11367 // 1. If byte is end-of-stream and Shift_JIS lead is not 0x00,
11368 // set Shift_JIS lead to 0x00 and return error.
11369 if (bite === end_of_stream && Shift_JIS_lead !== 0x00) {
11370 Shift_JIS_lead = 0x00;
11371 return decoderError(fatal);
11372 }
11373
11374 // 2. If byte is end-of-stream and Shift_JIS lead is 0x00,
11375 // return finished.
11376 if (bite === end_of_stream && Shift_JIS_lead === 0x00)
11377 return finished;
11378
11379 // 3. If Shift_JIS lead is not 0x00, let lead be Shift_JIS lead,
11380 // let pointer be null, set Shift_JIS lead to 0x00, and then run
11381 // these substeps:
11382 if (Shift_JIS_lead !== 0x00) {
11383 var lead = Shift_JIS_lead;
11384 var pointer = null;
11385 Shift_JIS_lead = 0x00;
11386
11387 // 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41
11388 // otherwise.
11389 var offset = (bite < 0x7F) ? 0x40 : 0x41;
11390
11391 // 2. Let lead offset be 0x81, if lead is less than 0xA0, and
11392 // 0xC1 otherwise.
11393 var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1;
11394
11395 // 3. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80
11396 // to 0xFC, inclusive, set pointer to (lead − lead offset) ×
11397 // 188 + byte − offset.
11398 if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFC))
11399 pointer = (lead - lead_offset) * 188 + bite - offset;
11400
11401 // 4. If pointer is in the range 8836 to 10715, inclusive,
11402 // return a code point whose value is 0xE000 − 8836 + pointer.
11403 if (inRange(pointer, 8836, 10715))
11404 return 0xE000 - 8836 + pointer;
11405
11406 // 5. Let code point be null, if pointer is null, and the
11407 // index code point for pointer in index jis0208 otherwise.
11408 var code_point = (pointer === null) ? null :
11409 indexCodePointFor(pointer, index('jis0208'));
11410
11411 // 6. If code point is null and byte is an ASCII byte, prepend
11412 // byte to stream.
11413 if (code_point === null && isASCIIByte(bite))
11414 stream.prepend(bite);
11415
11416 // 7. If code point is null, return error.
11417 if (code_point === null)
11418 return decoderError(fatal);
11419
11420 // 8. Return a code point whose value is code point.
11421 return code_point;
11422 }
11423
11424 // 4. If byte is an ASCII byte or 0x80, return a code point
11425 // whose value is byte.
11426 if (isASCIIByte(bite) || bite === 0x80)
11427 return bite;
11428
11429 // 5. If byte is in the range 0xA1 to 0xDF, inclusive, return a
11430 // code point whose value is 0xFF61 − 0xA1 + byte.
11431 if (inRange(bite, 0xA1, 0xDF))
11432 return 0xFF61 - 0xA1 + bite;
11433
11434 // 6. If byte is in the range 0x81 to 0x9F, inclusive, or 0xE0
11435 // to 0xFC, inclusive, set Shift_JIS lead to byte and return
11436 // continue.
11437 if (inRange(bite, 0x81, 0x9F) || inRange(bite, 0xE0, 0xFC)) {
11438 Shift_JIS_lead = bite;
11439 return null;
11440 }
11441
11442 // 7. Return error.
11443 return decoderError(fatal);
11444 };
11445 }
11446
11447 // 13.3.2 Shift_JIS encoder
11448 /**
11449 * @constructor
11450 * @implements {Encoder}
11451 * @param {{fatal: boolean}} options
11452 */
11453 function ShiftJISEncoder(options) {
11454 var fatal = options.fatal;
11455 /**
11456 * @param {Stream} stream Input stream.
11457 * @param {number} code_point Next code point read from the stream.
11458 * @return {(number|!Array.<number>)} Byte(s) to emit.
11459 */
11460 this.handler = function(stream, code_point) {
11461 // 1. If code point is end-of-stream, return finished.
11462 if (code_point === end_of_stream)
11463 return finished;
11464
11465 // 2. If code point is an ASCII code point or U+0080, return a
11466 // byte whose value is code point.
11467 if (isASCIICodePoint(code_point) || code_point === 0x0080)
11468 return code_point;
11469
11470 // 3. If code point is U+00A5, return byte 0x5C.
11471 if (code_point === 0x00A5)
11472 return 0x5C;
11473
11474 // 4. If code point is U+203E, return byte 0x7E.
11475 if (code_point === 0x203E)
11476 return 0x7E;
11477
11478 // 5. If code point is in the range U+FF61 to U+FF9F, inclusive,
11479 // return a byte whose value is code point − 0xFF61 + 0xA1.
11480 if (inRange(code_point, 0xFF61, 0xFF9F))
11481 return code_point - 0xFF61 + 0xA1;
11482
11483 // 6. If code point is U+2212, set it to U+FF0D.
11484 if (code_point === 0x2212)
11485 code_point = 0xFF0D;
11486
11487 // 7. Let pointer be the index Shift_JIS pointer for code point.
11488 var pointer = indexShiftJISPointerFor(code_point);
11489
11490 // 8. If pointer is null, return error with code point.
11491 if (pointer === null)
11492 return encoderError(code_point);
11493
11494 // 9. Let lead be floor(pointer / 188).
11495 var lead = floor(pointer / 188);
11496
11497 // 10. Let lead offset be 0x81, if lead is less than 0x1F, and
11498 // 0xC1 otherwise.
11499 var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1;
11500
11501 // 11. Let trail be pointer % 188.
11502 var trail = pointer % 188;
11503
11504 // 12. Let offset be 0x40, if trail is less than 0x3F, and 0x41
11505 // otherwise.
11506 var offset = (trail < 0x3F) ? 0x40 : 0x41;
11507
11508 // 13. Return two bytes whose values are lead + lead offset and
11509 // trail + offset.
11510 return [lead + lead_offset, trail + offset];
11511 };
11512 }
11513
11514 /** @param {{fatal: boolean}} options */
11515 encoders['Shift_JIS'] = function(options) {
11516 return new ShiftJISEncoder(options);
11517 };
11518 /** @param {{fatal: boolean}} options */
11519 decoders['Shift_JIS'] = function(options) {
11520 return new ShiftJISDecoder(options);
11521 };
11522
11523 //
11524 // 14. Legacy multi-byte Korean encodings
11525 //
11526
11527 // 14.1 euc-kr
11528
11529 // 14.1.1 euc-kr decoder
11530 /**
11531 * @constructor
11532 * @implements {Decoder}
11533 * @param {{fatal: boolean}} options
11534 */
11535 function EUCKRDecoder(options) {
11536 var fatal = options.fatal;
11537
11538 // euc-kr's decoder has an associated euc-kr lead (initially 0x00).
11539 var /** @type {number} */ euckr_lead = 0x00;
11540 /**
11541 * @param {Stream} stream The stream of bytes being decoded.
11542 * @param {number} bite The next byte read from the stream.
11543 * @return {?(number|!Array.<number>)} The next code point(s)
11544 * decoded, or null if not enough data exists in the input
11545 * stream to decode a complete code point.
11546 */
11547 this.handler = function(stream, bite) {
11548 // 1. If byte is end-of-stream and euc-kr lead is not 0x00, set
11549 // euc-kr lead to 0x00 and return error.
11550 if (bite === end_of_stream && euckr_lead !== 0) {
11551 euckr_lead = 0x00;
11552 return decoderError(fatal);
11553 }
11554
11555 // 2. If byte is end-of-stream and euc-kr lead is 0x00, return
11556 // finished.
11557 if (bite === end_of_stream && euckr_lead === 0)
11558 return finished;
11559
11560 // 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let
11561 // pointer be null, set euc-kr lead to 0x00, and then run these
11562 // substeps:
11563 if (euckr_lead !== 0x00) {
11564 var lead = euckr_lead;
11565 var pointer = null;
11566 euckr_lead = 0x00;
11567
11568 // 1. If byte is in the range 0x41 to 0xFE, inclusive, set
11569 // pointer to (lead − 0x81) × 190 + (byte − 0x41).
11570 if (inRange(bite, 0x41, 0xFE))
11571 pointer = (lead - 0x81) * 190 + (bite - 0x41);
11572
11573 // 2. Let code point be null, if pointer is null, and the
11574 // index code point for pointer in index euc-kr otherwise.
11575 var code_point = (pointer === null)
11576 ? null : indexCodePointFor(pointer, index('euc-kr'));
11577
11578 // 3. If code point is null and byte is an ASCII byte, prepend
11579 // byte to stream.
11580 if (pointer === null && isASCIIByte(bite))
11581 stream.prepend(bite);
11582
11583 // 4. If code point is null, return error.
11584 if (code_point === null)
11585 return decoderError(fatal);
11586
11587 // 5. Return a code point whose value is code point.
11588 return code_point;
11589 }
11590
11591 // 4. If byte is an ASCII byte, return a code point whose value
11592 // is byte.
11593 if (isASCIIByte(bite))
11594 return bite;
11595
11596 // 5. If byte is in the range 0x81 to 0xFE, inclusive, set
11597 // euc-kr lead to byte and return continue.
11598 if (inRange(bite, 0x81, 0xFE)) {
11599 euckr_lead = bite;
11600 return null;
11601 }
11602
11603 // 6. Return error.
11604 return decoderError(fatal);
11605 };
11606 }
11607
11608 // 14.1.2 euc-kr encoder
11609 /**
11610 * @constructor
11611 * @implements {Encoder}
11612 * @param {{fatal: boolean}} options
11613 */
11614 function EUCKREncoder(options) {
11615 var fatal = options.fatal;
11616 /**
11617 * @param {Stream} stream Input stream.
11618 * @param {number} code_point Next code point read from the stream.
11619 * @return {(number|!Array.<number>)} Byte(s) to emit.
11620 */
11621 this.handler = function(stream, code_point) {
11622 // 1. If code point is end-of-stream, return finished.
11623 if (code_point === end_of_stream)
11624 return finished;
11625
11626 // 2. If code point is an ASCII code point, return a byte whose
11627 // value is code point.
11628 if (isASCIICodePoint(code_point))
11629 return code_point;
11630
11631 // 3. Let pointer be the index pointer for code point in index
11632 // euc-kr.
11633 var pointer = indexPointerFor(code_point, index('euc-kr'));
11634
11635 // 4. If pointer is null, return error with code point.
11636 if (pointer === null)
11637 return encoderError(code_point);
11638
11639 // 5. Let lead be floor(pointer / 190) + 0x81.
11640 var lead = floor(pointer / 190) + 0x81;
11641
11642 // 6. Let trail be pointer % 190 + 0x41.
11643 var trail = (pointer % 190) + 0x41;
11644
11645 // 7. Return two bytes whose values are lead and trail.
11646 return [lead, trail];
11647 };
11648 }
11649
11650 /** @param {{fatal: boolean}} options */
11651 encoders['EUC-KR'] = function(options) {
11652 return new EUCKREncoder(options);
11653 };
11654 /** @param {{fatal: boolean}} options */
11655 decoders['EUC-KR'] = function(options) {
11656 return new EUCKRDecoder(options);
11657 };
11658
11659
11660 //
11661 // 15. Legacy miscellaneous encodings
11662 //
11663
11664 // 15.1 replacement
11665
11666 // Not needed - API throws RangeError
11667
11668 // 15.2 Common infrastructure for utf-16be and utf-16le
11669
11670 /**
11671 * @param {number} code_unit
11672 * @param {boolean} utf16be
11673 * @return {!Array.<number>} bytes
11674 */
11675 function convertCodeUnitToBytes(code_unit, utf16be) {
11676 // 1. Let byte1 be code unit >> 8.
11677 var byte1 = code_unit >> 8;
11678
11679 // 2. Let byte2 be code unit & 0x00FF.
11680 var byte2 = code_unit & 0x00FF;
11681
11682 // 3. Then return the bytes in order:
11683 // utf-16be flag is set: byte1, then byte2.
11684 if (utf16be)
11685 return [byte1, byte2];
11686 // utf-16be flag is unset: byte2, then byte1.
11687 return [byte2, byte1];
11688 }
11689
11690 // 15.2.1 shared utf-16 decoder
11691 /**
11692 * @constructor
11693 * @implements {Decoder}
11694 * @param {boolean} utf16_be True if big-endian, false if little-endian.
11695 * @param {{fatal: boolean}} options
11696 */
11697 function UTF16Decoder(utf16_be, options) {
11698 var fatal = options.fatal;
11699 var /** @type {?number} */ utf16_lead_byte = null,
11700 /** @type {?number} */ utf16_lead_surrogate = null;
11701 /**
11702 * @param {Stream} stream The stream of bytes being decoded.
11703 * @param {number} bite The next byte read from the stream.
11704 * @return {?(number|!Array.<number>)} The next code point(s)
11705 * decoded, or null if not enough data exists in the input
11706 * stream to decode a complete code point.
11707 */
11708 this.handler = function(stream, bite) {
11709 // 1. If byte is end-of-stream and either utf-16 lead byte or
11710 // utf-16 lead surrogate is not null, set utf-16 lead byte and
11711 // utf-16 lead surrogate to null, and return error.
11712 if (bite === end_of_stream && (utf16_lead_byte !== null ||
11713 utf16_lead_surrogate !== null)) {
11714 return decoderError(fatal);
11715 }
11716
11717 // 2. If byte is end-of-stream and utf-16 lead byte and utf-16
11718 // lead surrogate are null, return finished.
11719 if (bite === end_of_stream && utf16_lead_byte === null &&
11720 utf16_lead_surrogate === null) {
11721 return finished;
11722 }
11723
11724 // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte
11725 // and return continue.
11726 if (utf16_lead_byte === null) {
11727 utf16_lead_byte = bite;
11728 return null;
11729 }
11730
11731 // 4. Let code unit be the result of:
11732 var code_unit;
11733 if (utf16_be) {
11734 // utf-16be decoder flag is set
11735 // (utf-16 lead byte << 8) + byte.
11736 code_unit = (utf16_lead_byte << 8) + bite;
11737 } else {
11738 // utf-16be decoder flag is unset
11739 // (byte << 8) + utf-16 lead byte.
11740 code_unit = (bite << 8) + utf16_lead_byte;
11741 }
11742 // Then set utf-16 lead byte to null.
11743 utf16_lead_byte = null;
11744
11745 // 5. If utf-16 lead surrogate is not null, let lead surrogate
11746 // be utf-16 lead surrogate, set utf-16 lead surrogate to null,
11747 // and then run these substeps:
11748 if (utf16_lead_surrogate !== null) {
11749 var lead_surrogate = utf16_lead_surrogate;
11750 utf16_lead_surrogate = null;
11751
11752 // 1. If code unit is in the range U+DC00 to U+DFFF,
11753 // inclusive, return a code point whose value is 0x10000 +
11754 // ((lead surrogate − 0xD800) << 10) + (code unit − 0xDC00).
11755 if (inRange(code_unit, 0xDC00, 0xDFFF)) {
11756 return 0x10000 + (lead_surrogate - 0xD800) * 0x400 +
11757 (code_unit - 0xDC00);
11758 }
11759
11760 // 2. Prepend the sequence resulting of converting code unit
11761 // to bytes using utf-16be decoder flag to stream and return
11762 // error.
11763 stream.prepend(convertCodeUnitToBytes(code_unit, utf16_be));
11764 return decoderError(fatal);
11765 }
11766
11767 // 6. If code unit is in the range U+D800 to U+DBFF, inclusive,
11768 // set utf-16 lead surrogate to code unit and return continue.
11769 if (inRange(code_unit, 0xD800, 0xDBFF)) {
11770 utf16_lead_surrogate = code_unit;
11771 return null;
11772 }
11773
11774 // 7. If code unit is in the range U+DC00 to U+DFFF, inclusive,
11775 // return error.
11776 if (inRange(code_unit, 0xDC00, 0xDFFF))
11777 return decoderError(fatal);
11778
11779 // 8. Return code point code unit.
11780 return code_unit;
11781 };
11782 }
11783
11784 // 15.2.2 shared utf-16 encoder
11785 /**
11786 * @constructor
11787 * @implements {Encoder}
11788 * @param {boolean} utf16_be True if big-endian, false if little-endian.
11789 * @param {{fatal: boolean}} options
11790 */
11791 function UTF16Encoder(utf16_be, options) {
11792 var fatal = options.fatal;
11793 /**
11794 * @param {Stream} stream Input stream.
11795 * @param {number} code_point Next code point read from the stream.
11796 * @return {(number|!Array.<number>)} Byte(s) to emit.
11797 */
11798 this.handler = function(stream, code_point) {
11799 // 1. If code point is end-of-stream, return finished.
11800 if (code_point === end_of_stream)
11801 return finished;
11802
11803 // 2. If code point is in the range U+0000 to U+FFFF, inclusive,
11804 // return the sequence resulting of converting code point to
11805 // bytes using utf-16be encoder flag.
11806 if (inRange(code_point, 0x0000, 0xFFFF))
11807 return convertCodeUnitToBytes(code_point, utf16_be);
11808
11809 // 3. Let lead be ((code point − 0x10000) >> 10) + 0xD800,
11810 // converted to bytes using utf-16be encoder flag.
11811 var lead = convertCodeUnitToBytes(
11812 ((code_point - 0x10000) >> 10) + 0xD800, utf16_be);
11813
11814 // 4. Let trail be ((code point − 0x10000) & 0x3FF) + 0xDC00,
11815 // converted to bytes using utf-16be encoder flag.
11816 var trail = convertCodeUnitToBytes(
11817 ((code_point - 0x10000) & 0x3FF) + 0xDC00, utf16_be);
11818
11819 // 5. Return a byte sequence of lead followed by trail.
11820 return lead.concat(trail);
11821 };
11822 }
11823
11824 // 15.3 utf-16be
11825 // 15.3.1 utf-16be decoder
11826 /** @param {{fatal: boolean}} options */
11827 encoders['UTF-16BE'] = function(options) {
11828 return new UTF16Encoder(true, options);
11829 };
11830 // 15.3.2 utf-16be encoder
11831 /** @param {{fatal: boolean}} options */
11832 decoders['UTF-16BE'] = function(options) {
11833 return new UTF16Decoder(true, options);
11834 };
11835
11836 // 15.4 utf-16le
11837 // 15.4.1 utf-16le decoder
11838 /** @param {{fatal: boolean}} options */
11839 encoders['UTF-16LE'] = function(options) {
11840 return new UTF16Encoder(false, options);
11841 };
11842 // 15.4.2 utf-16le encoder
11843 /** @param {{fatal: boolean}} options */
11844 decoders['UTF-16LE'] = function(options) {
11845 return new UTF16Decoder(false, options);
11846 };
11847
11848 // 15.5 x-user-defined
11849
11850 // 15.5.1 x-user-defined decoder
11851 /**
11852 * @constructor
11853 * @implements {Decoder}
11854 * @param {{fatal: boolean}} options
11855 */
11856 function XUserDefinedDecoder(options) {
11857 var fatal = options.fatal;
11858 /**
11859 * @param {Stream} stream The stream of bytes being decoded.
11860 * @param {number} bite The next byte read from the stream.
11861 * @return {?(number|!Array.<number>)} The next code point(s)
11862 * decoded, or null if not enough data exists in the input
11863 * stream to decode a complete code point.
11864 */
11865 this.handler = function(stream, bite) {
11866 // 1. If byte is end-of-stream, return finished.
11867 if (bite === end_of_stream)
11868 return finished;
11869
11870 // 2. If byte is an ASCII byte, return a code point whose value
11871 // is byte.
11872 if (isASCIIByte(bite))
11873 return bite;
11874
11875 // 3. Return a code point whose value is 0xF780 + byte − 0x80.
11876 return 0xF780 + bite - 0x80;
11877 };
11878 }
11879
11880 // 15.5.2 x-user-defined encoder
11881 /**
11882 * @constructor
11883 * @implements {Encoder}
11884 * @param {{fatal: boolean}} options
11885 */
11886 function XUserDefinedEncoder(options) {
11887 var fatal = options.fatal;
11888 /**
11889 * @param {Stream} stream Input stream.
11890 * @param {number} code_point Next code point read from the stream.
11891 * @return {(number|!Array.<number>)} Byte(s) to emit.
11892 */
11893 this.handler = function(stream, code_point) {
11894 // 1.If code point is end-of-stream, return finished.
11895 if (code_point === end_of_stream)
11896 return finished;
11897
11898 // 2. If code point is an ASCII code point, return a byte whose
11899 // value is code point.
11900 if (isASCIICodePoint(code_point))
11901 return code_point;
11902
11903 // 3. If code point is in the range U+F780 to U+F7FF, inclusive,
11904 // return a byte whose value is code point − 0xF780 + 0x80.
11905 if (inRange(code_point, 0xF780, 0xF7FF))
11906 return code_point - 0xF780 + 0x80;
11907
11908 // 4. Return error with code point.
11909 return encoderError(code_point);
11910 };
11911 }
11912
11913 /** @param {{fatal: boolean}} options */
11914 encoders['x-user-defined'] = function(options) {
11915 return new XUserDefinedEncoder(options);
11916 };
11917 /** @param {{fatal: boolean}} options */
11918 decoders['x-user-defined'] = function(options) {
11919 return new XUserDefinedDecoder(options);
11920 };
11921
11922 if (!global['TextEncoder'])
11923 global['TextEncoder'] = TextEncoder;
11924 if (!global['TextDecoder'])
11925 global['TextDecoder'] = TextDecoder;
11926
11927 if (typeof module !== "undefined" && module.exports) {
11928 module.exports = {
11929 TextEncoder: global['TextEncoder'],
11930 TextDecoder: global['TextDecoder'],
11931 EncodingIndexes: global["encoding-indexes"]
11932 };
11933 }
11934
11935// For strict environments where `this` inside the global scope
11936// is `undefined`, take a pure object instead
11937}(this || {}));
11938},{"./encoding-indexes.js":126}],128:[function(require,module,exports){
11939if (typeof Object.create === 'function') {
11940 // implementation from standard node.js 'util' module
11941 module.exports = function inherits(ctor, superCtor) {
11942 ctor.super_ = superCtor
11943 ctor.prototype = Object.create(superCtor.prototype, {
11944 constructor: {
11945 value: ctor,
11946 enumerable: false,
11947 writable: true,
11948 configurable: true
11949 }
11950 });
11951 };
11952} else {
11953 // old school shim for old browsers
11954 module.exports = function inherits(ctor, superCtor) {
11955 ctor.super_ = superCtor
11956 var TempCtor = function () {}
11957 TempCtor.prototype = superCtor.prototype
11958 ctor.prototype = new TempCtor()
11959 ctor.prototype.constructor = ctor
11960 }
11961}
11962
11963},{}],129:[function(require,module,exports){
11964module.exports = function isBuffer(arg) {
11965 return arg && typeof arg === 'object'
11966 && typeof arg.copy === 'function'
11967 && typeof arg.fill === 'function'
11968 && typeof arg.readUInt8 === 'function';
11969}
11970},{}],130:[function(require,module,exports){
11971// Copyright Joyent, Inc. and other Node contributors.
11972//
11973// Permission is hereby granted, free of charge, to any person obtaining a
11974// copy of this software and associated documentation files (the
11975// "Software"), to deal in the Software without restriction, including
11976// without limitation the rights to use, copy, modify, merge, publish,
11977// distribute, sublicense, and/or sell copies of the Software, and to permit
11978// persons to whom the Software is furnished to do so, subject to the
11979// following conditions:
11980//
11981// The above copyright notice and this permission notice shall be included
11982// in all copies or substantial portions of the Software.
11983//
11984// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11985// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11986// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11987// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11988// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11989// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11990// USE OR OTHER DEALINGS IN THE SOFTWARE.
11991
11992var formatRegExp = /%[sdj%]/g;
11993exports.format = function(f) {
11994 if (!isString(f)) {
11995 var objects = [];
11996 for (var i = 0; i < arguments.length; i++) {
11997 objects.push(inspect(arguments[i]));
11998 }
11999 return objects.join(' ');
12000 }
12001
12002 var i = 1;
12003 var args = arguments;
12004 var len = args.length;
12005 var str = String(f).replace(formatRegExp, function(x) {
12006 if (x === '%%') return '%';
12007 if (i >= len) return x;
12008 switch (x) {
12009 case '%s': return String(args[i++]);
12010 case '%d': return Number(args[i++]);
12011 case '%j':
12012 try {
12013 return JSON.stringify(args[i++]);
12014 } catch (_) {
12015 return '[Circular]';
12016 }
12017 default:
12018 return x;
12019 }
12020 });
12021 for (var x = args[i]; i < len; x = args[++i]) {
12022 if (isNull(x) || !isObject(x)) {
12023 str += ' ' + x;
12024 } else {
12025 str += ' ' + inspect(x);
12026 }
12027 }
12028 return str;
12029};
12030
12031
12032// Mark that a method should not be used.
12033// Returns a modified function which warns once by default.
12034// If --no-deprecation is set, then it is a no-op.
12035exports.deprecate = function(fn, msg) {
12036 // Allow for deprecating things in the process of starting up.
12037 if (isUndefined(global.process)) {
12038 return function() {
12039 return exports.deprecate(fn, msg).apply(this, arguments);
12040 };
12041 }
12042
12043 if (process.noDeprecation === true) {
12044 return fn;
12045 }
12046
12047 var warned = false;
12048 function deprecated() {
12049 if (!warned) {
12050 if (process.throwDeprecation) {
12051 throw new Error(msg);
12052 } else if (process.traceDeprecation) {
12053 console.trace(msg);
12054 } else {
12055 console.error(msg);
12056 }
12057 warned = true;
12058 }
12059 return fn.apply(this, arguments);
12060 }
12061
12062 return deprecated;
12063};
12064
12065
12066var debugs = {};
12067var debugEnviron;
12068exports.debuglog = function(set) {
12069 if (isUndefined(debugEnviron))
12070 debugEnviron = process.env.NODE_DEBUG || '';
12071 set = set.toUpperCase();
12072 if (!debugs[set]) {
12073 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
12074 var pid = process.pid;
12075 debugs[set] = function() {
12076 var msg = exports.format.apply(exports, arguments);
12077 console.error('%s %d: %s', set, pid, msg);
12078 };
12079 } else {
12080 debugs[set] = function() {};
12081 }
12082 }
12083 return debugs[set];
12084};
12085
12086
12087/**
12088 * Echos the value of a value. Trys to print the value out
12089 * in the best way possible given the different types.
12090 *
12091 * @param {Object} obj The object to print out.
12092 * @param {Object} opts Optional options object that alters the output.
12093 */
12094/* legacy: obj, showHidden, depth, colors*/
12095function inspect(obj, opts) {
12096 // default options
12097 var ctx = {
12098 seen: [],
12099 stylize: stylizeNoColor
12100 };
12101 // legacy...
12102 if (arguments.length >= 3) ctx.depth = arguments[2];
12103 if (arguments.length >= 4) ctx.colors = arguments[3];
12104 if (isBoolean(opts)) {
12105 // legacy...
12106 ctx.showHidden = opts;
12107 } else if (opts) {
12108 // got an "options" object
12109 exports._extend(ctx, opts);
12110 }
12111 // set default options
12112 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
12113 if (isUndefined(ctx.depth)) ctx.depth = 2;
12114 if (isUndefined(ctx.colors)) ctx.colors = false;
12115 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
12116 if (ctx.colors) ctx.stylize = stylizeWithColor;
12117 return formatValue(ctx, obj, ctx.depth);
12118}
12119exports.inspect = inspect;
12120
12121
12122// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
12123inspect.colors = {
12124 'bold' : [1, 22],
12125 'italic' : [3, 23],
12126 'underline' : [4, 24],
12127 'inverse' : [7, 27],
12128 'white' : [37, 39],
12129 'grey' : [90, 39],
12130 'black' : [30, 39],
12131 'blue' : [34, 39],
12132 'cyan' : [36, 39],
12133 'green' : [32, 39],
12134 'magenta' : [35, 39],
12135 'red' : [31, 39],
12136 'yellow' : [33, 39]
12137};
12138
12139// Don't use 'blue' not visible on cmd.exe
12140inspect.styles = {
12141 'special': 'cyan',
12142 'number': 'yellow',
12143 'boolean': 'yellow',
12144 'undefined': 'grey',
12145 'null': 'bold',
12146 'string': 'green',
12147 'date': 'magenta',
12148 // "name": intentionally not styling
12149 'regexp': 'red'
12150};
12151
12152
12153function stylizeWithColor(str, styleType) {
12154 var style = inspect.styles[styleType];
12155
12156 if (style) {
12157 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
12158 '\u001b[' + inspect.colors[style][1] + 'm';
12159 } else {
12160 return str;
12161 }
12162}
12163
12164
12165function stylizeNoColor(str, styleType) {
12166 return str;
12167}
12168
12169
12170function arrayToHash(array) {
12171 var hash = {};
12172
12173 array.forEach(function(val, idx) {
12174 hash[val] = true;
12175 });
12176
12177 return hash;
12178}
12179
12180
12181function formatValue(ctx, value, recurseTimes) {
12182 // Provide a hook for user-specified inspect functions.
12183 // Check that value is an object with an inspect function on it
12184 if (ctx.customInspect &&
12185 value &&
12186 isFunction(value.inspect) &&
12187 // Filter out the util module, it's inspect function is special
12188 value.inspect !== exports.inspect &&
12189 // Also filter out any prototype objects using the circular check.
12190 !(value.constructor && value.constructor.prototype === value)) {
12191 var ret = value.inspect(recurseTimes, ctx);
12192 if (!isString(ret)) {
12193 ret = formatValue(ctx, ret, recurseTimes);
12194 }
12195 return ret;
12196 }
12197
12198 // Primitive types cannot have properties
12199 var primitive = formatPrimitive(ctx, value);
12200 if (primitive) {
12201 return primitive;
12202 }
12203
12204 // Look up the keys of the object.
12205 var keys = Object.keys(value);
12206 var visibleKeys = arrayToHash(keys);
12207
12208 if (ctx.showHidden) {
12209 keys = Object.getOwnPropertyNames(value);
12210 }
12211
12212 // IE doesn't make error fields non-enumerable
12213 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
12214 if (isError(value)
12215 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
12216 return formatError(value);
12217 }
12218
12219 // Some type of object without properties can be shortcutted.
12220 if (keys.length === 0) {
12221 if (isFunction(value)) {
12222 var name = value.name ? ': ' + value.name : '';
12223 return ctx.stylize('[Function' + name + ']', 'special');
12224 }
12225 if (isRegExp(value)) {
12226 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
12227 }
12228 if (isDate(value)) {
12229 return ctx.stylize(Date.prototype.toString.call(value), 'date');
12230 }
12231 if (isError(value)) {
12232 return formatError(value);
12233 }
12234 }
12235
12236 var base = '', array = false, braces = ['{', '}'];
12237
12238 // Make Array say that they are Array
12239 if (isArray(value)) {
12240 array = true;
12241 braces = ['[', ']'];
12242 }
12243
12244 // Make functions say that they are functions
12245 if (isFunction(value)) {
12246 var n = value.name ? ': ' + value.name : '';
12247 base = ' [Function' + n + ']';
12248 }
12249
12250 // Make RegExps say that they are RegExps
12251 if (isRegExp(value)) {
12252 base = ' ' + RegExp.prototype.toString.call(value);
12253 }
12254
12255 // Make dates with properties first say the date
12256 if (isDate(value)) {
12257 base = ' ' + Date.prototype.toUTCString.call(value);
12258 }
12259
12260 // Make error with message first say the error
12261 if (isError(value)) {
12262 base = ' ' + formatError(value);
12263 }
12264
12265 if (keys.length === 0 && (!array || value.length == 0)) {
12266 return braces[0] + base + braces[1];
12267 }
12268
12269 if (recurseTimes < 0) {
12270 if (isRegExp(value)) {
12271 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
12272 } else {
12273 return ctx.stylize('[Object]', 'special');
12274 }
12275 }
12276
12277 ctx.seen.push(value);
12278
12279 var output;
12280 if (array) {
12281 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
12282 } else {
12283 output = keys.map(function(key) {
12284 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
12285 });
12286 }
12287
12288 ctx.seen.pop();
12289
12290 return reduceToSingleString(output, base, braces);
12291}
12292
12293
12294function formatPrimitive(ctx, value) {
12295 if (isUndefined(value))
12296 return ctx.stylize('undefined', 'undefined');
12297 if (isString(value)) {
12298 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
12299 .replace(/'/g, "\\'")
12300 .replace(/\\"/g, '"') + '\'';
12301 return ctx.stylize(simple, 'string');
12302 }
12303 if (isNumber(value))
12304 return ctx.stylize('' + value, 'number');
12305 if (isBoolean(value))
12306 return ctx.stylize('' + value, 'boolean');
12307 // For some reason typeof null is "object", so special case here.
12308 if (isNull(value))
12309 return ctx.stylize('null', 'null');
12310}
12311
12312
12313function formatError(value) {
12314 return '[' + Error.prototype.toString.call(value) + ']';
12315}
12316
12317
12318function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
12319 var output = [];
12320 for (var i = 0, l = value.length; i < l; ++i) {
12321 if (hasOwnProperty(value, String(i))) {
12322 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
12323 String(i), true));
12324 } else {
12325 output.push('');
12326 }
12327 }
12328 keys.forEach(function(key) {
12329 if (!key.match(/^\d+$/)) {
12330 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
12331 key, true));
12332 }
12333 });
12334 return output;
12335}
12336
12337
12338function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
12339 var name, str, desc;
12340 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
12341 if (desc.get) {
12342 if (desc.set) {
12343 str = ctx.stylize('[Getter/Setter]', 'special');
12344 } else {
12345 str = ctx.stylize('[Getter]', 'special');
12346 }
12347 } else {
12348 if (desc.set) {
12349 str = ctx.stylize('[Setter]', 'special');
12350 }
12351 }
12352 if (!hasOwnProperty(visibleKeys, key)) {
12353 name = '[' + key + ']';
12354 }
12355 if (!str) {
12356 if (ctx.seen.indexOf(desc.value) < 0) {
12357 if (isNull(recurseTimes)) {
12358 str = formatValue(ctx, desc.value, null);
12359 } else {
12360 str = formatValue(ctx, desc.value, recurseTimes - 1);
12361 }
12362 if (str.indexOf('\n') > -1) {
12363 if (array) {
12364 str = str.split('\n').map(function(line) {
12365 return ' ' + line;
12366 }).join('\n').substr(2);
12367 } else {
12368 str = '\n' + str.split('\n').map(function(line) {
12369 return ' ' + line;
12370 }).join('\n');
12371 }
12372 }
12373 } else {
12374 str = ctx.stylize('[Circular]', 'special');
12375 }
12376 }
12377 if (isUndefined(name)) {
12378 if (array && key.match(/^\d+$/)) {
12379 return str;
12380 }
12381 name = JSON.stringify('' + key);
12382 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
12383 name = name.substr(1, name.length - 2);
12384 name = ctx.stylize(name, 'name');
12385 } else {
12386 name = name.replace(/'/g, "\\'")
12387 .replace(/\\"/g, '"')
12388 .replace(/(^"|"$)/g, "'");
12389 name = ctx.stylize(name, 'string');
12390 }
12391 }
12392
12393 return name + ': ' + str;
12394}
12395
12396
12397function reduceToSingleString(output, base, braces) {
12398 var numLinesEst = 0;
12399 var length = output.reduce(function(prev, cur) {
12400 numLinesEst++;
12401 if (cur.indexOf('\n') >= 0) numLinesEst++;
12402 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
12403 }, 0);
12404
12405 if (length > 60) {
12406 return braces[0] +
12407 (base === '' ? '' : base + '\n ') +
12408 ' ' +
12409 output.join(',\n ') +
12410 ' ' +
12411 braces[1];
12412 }
12413
12414 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
12415}
12416
12417
12418// NOTE: These type checking functions intentionally don't use `instanceof`
12419// because it is fragile and can be easily faked with `Object.create()`.
12420function isArray(ar) {
12421 return Array.isArray(ar);
12422}
12423exports.isArray = isArray;
12424
12425function isBoolean(arg) {
12426 return typeof arg === 'boolean';
12427}
12428exports.isBoolean = isBoolean;
12429
12430function isNull(arg) {
12431 return arg === null;
12432}
12433exports.isNull = isNull;
12434
12435function isNullOrUndefined(arg) {
12436 return arg == null;
12437}
12438exports.isNullOrUndefined = isNullOrUndefined;
12439
12440function isNumber(arg) {
12441 return typeof arg === 'number';
12442}
12443exports.isNumber = isNumber;
12444
12445function isString(arg) {
12446 return typeof arg === 'string';
12447}
12448exports.isString = isString;
12449
12450function isSymbol(arg) {
12451 return typeof arg === 'symbol';
12452}
12453exports.isSymbol = isSymbol;
12454
12455function isUndefined(arg) {
12456 return arg === void 0;
12457}
12458exports.isUndefined = isUndefined;
12459
12460function isRegExp(re) {
12461 return isObject(re) && objectToString(re) === '[object RegExp]';
12462}
12463exports.isRegExp = isRegExp;
12464
12465function isObject(arg) {
12466 return typeof arg === 'object' && arg !== null;
12467}
12468exports.isObject = isObject;
12469
12470function isDate(d) {
12471 return isObject(d) && objectToString(d) === '[object Date]';
12472}
12473exports.isDate = isDate;
12474
12475function isError(e) {
12476 return isObject(e) &&
12477 (objectToString(e) === '[object Error]' || e instanceof Error);
12478}
12479exports.isError = isError;
12480
12481function isFunction(arg) {
12482 return typeof arg === 'function';
12483}
12484exports.isFunction = isFunction;
12485
12486function isPrimitive(arg) {
12487 return arg === null ||
12488 typeof arg === 'boolean' ||
12489 typeof arg === 'number' ||
12490 typeof arg === 'string' ||
12491 typeof arg === 'symbol' || // ES6 symbol
12492 typeof arg === 'undefined';
12493}
12494exports.isPrimitive = isPrimitive;
12495
12496exports.isBuffer = require('./support/isBuffer');
12497
12498function objectToString(o) {
12499 return Object.prototype.toString.call(o);
12500}
12501
12502
12503function pad(n) {
12504 return n < 10 ? '0' + n.toString(10) : n.toString(10);
12505}
12506
12507
12508var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
12509 'Oct', 'Nov', 'Dec'];
12510
12511// 26 Feb 16:19:34
12512function timestamp() {
12513 var d = new Date();
12514 var time = [pad(d.getHours()),
12515 pad(d.getMinutes()),
12516 pad(d.getSeconds())].join(':');
12517 return [d.getDate(), months[d.getMonth()], time].join(' ');
12518}
12519
12520
12521// log is just a thin wrapper to console.log that prepends a timestamp
12522exports.log = function() {
12523 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
12524};
12525
12526
12527/**
12528 * Inherit the prototype methods from one constructor into another.
12529 *
12530 * The Function.prototype.inherits from lang.js rewritten as a standalone
12531 * function (not on Function.prototype). NOTE: If this file is to be loaded
12532 * during bootstrapping this function needs to be rewritten using some native
12533 * functions as prototype setup using normal JavaScript does not work as
12534 * expected during bootstrapping (see mirror.js in r114903).
12535 *
12536 * @param {function} ctor Constructor function which needs to inherit the
12537 * prototype.
12538 * @param {function} superCtor Constructor function to inherit prototype from.
12539 */
12540exports.inherits = require('inherits');
12541
12542exports._extend = function(origin, add) {
12543 // Don't do anything if add isn't an object
12544 if (!add || !isObject(add)) return origin;
12545
12546 var keys = Object.keys(add);
12547 var i = keys.length;
12548 while (i--) {
12549 origin[keys[i]] = add[keys[i]];
12550 }
12551 return origin;
12552};
12553
12554function hasOwnProperty(obj, prop) {
12555 return Object.prototype.hasOwnProperty.call(obj, prop);
12556}
12557
12558},{"./support/isBuffer":129,"inherits":128}],131:[function(require,module,exports){
12559/*!
12560
12561 diff v5.1.0
12562
12563Software License Agreement (BSD License)
12564
12565Copyright (c) 2009-2015, Kevin Decker <kpdecker@gmail.com>
12566
12567All rights reserved.
12568
12569Redistribution and use of this software in source and binary forms, with or without modification,
12570are permitted provided that the following conditions are met:
12571
12572* Redistributions of source code must retain the above
12573 copyright notice, this list of conditions and the
12574 following disclaimer.
12575
12576* Redistributions in binary form must reproduce the above
12577 copyright notice, this list of conditions and the
12578 following disclaimer in the documentation and/or other
12579 materials provided with the distribution.
12580
12581* Neither the name of Kevin Decker nor the names of its
12582 contributors may be used to endorse or promote products
12583 derived from this software without specific prior
12584 written permission.
12585
12586THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
12587IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
12588FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
12589CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
12590DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
12591DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
12592IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
12593OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
12594@license
12595*/
12596(function (global, factory) {
12597 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
12598 typeof define === 'function' && define.amd ? define(['exports'], factory) :
12599 (global = global || self, factory(global.Diff = {}));
12600}(this, (function (exports) { 'use strict';
12601
12602 function Diff() {}
12603 Diff.prototype = {
12604 diff: function diff(oldString, newString) {
12605 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
12606 var callback = options.callback;
12607
12608 if (typeof options === 'function') {
12609 callback = options;
12610 options = {};
12611 }
12612
12613 this.options = options;
12614 var self = this;
12615
12616 function done(value) {
12617 if (callback) {
12618 setTimeout(function () {
12619 callback(undefined, value);
12620 }, 0);
12621 return true;
12622 } else {
12623 return value;
12624 }
12625 } // Allow subclasses to massage the input prior to running
12626
12627
12628 oldString = this.castInput(oldString);
12629 newString = this.castInput(newString);
12630 oldString = this.removeEmpty(this.tokenize(oldString));
12631 newString = this.removeEmpty(this.tokenize(newString));
12632 var newLen = newString.length,
12633 oldLen = oldString.length;
12634 var editLength = 1;
12635 var maxEditLength = newLen + oldLen;
12636
12637 if (options.maxEditLength) {
12638 maxEditLength = Math.min(maxEditLength, options.maxEditLength);
12639 }
12640
12641 var bestPath = [{
12642 newPos: -1,
12643 components: []
12644 }]; // Seed editLength = 0, i.e. the content starts with the same values
12645
12646 var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
12647
12648 if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
12649 // Identity per the equality and tokenizer
12650 return done([{
12651 value: this.join(newString),
12652 count: newString.length
12653 }]);
12654 } // Main worker method. checks all permutations of a given edit length for acceptance.
12655
12656
12657 function execEditLength() {
12658 for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
12659 var basePath = void 0;
12660
12661 var addPath = bestPath[diagonalPath - 1],
12662 removePath = bestPath[diagonalPath + 1],
12663 _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
12664
12665 if (addPath) {
12666 // No one else is going to attempt to use this value, clear it
12667 bestPath[diagonalPath - 1] = undefined;
12668 }
12669
12670 var canAdd = addPath && addPath.newPos + 1 < newLen,
12671 canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
12672
12673 if (!canAdd && !canRemove) {
12674 // If this path is a terminal then prune
12675 bestPath[diagonalPath] = undefined;
12676 continue;
12677 } // Select the diagonal that we want to branch from. We select the prior
12678 // path whose position in the new string is the farthest from the origin
12679 // and does not pass the bounds of the diff graph
12680
12681
12682 if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
12683 basePath = clonePath(removePath);
12684 self.pushComponent(basePath.components, undefined, true);
12685 } else {
12686 basePath = addPath; // No need to clone, we've pulled it from the list
12687
12688 basePath.newPos++;
12689 self.pushComponent(basePath.components, true, undefined);
12690 }
12691
12692 _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done
12693
12694 if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
12695 return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
12696 } else {
12697 // Otherwise track this path as a potential candidate and continue.
12698 bestPath[diagonalPath] = basePath;
12699 }
12700 }
12701
12702 editLength++;
12703 } // Performs the length of edit iteration. Is a bit fugly as this has to support the
12704 // sync and async mode which is never fun. Loops over execEditLength until a value
12705 // is produced, or until the edit length exceeds options.maxEditLength (if given),
12706 // in which case it will return undefined.
12707
12708
12709 if (callback) {
12710 (function exec() {
12711 setTimeout(function () {
12712 if (editLength > maxEditLength) {
12713 return callback();
12714 }
12715
12716 if (!execEditLength()) {
12717 exec();
12718 }
12719 }, 0);
12720 })();
12721 } else {
12722 while (editLength <= maxEditLength) {
12723 var ret = execEditLength();
12724
12725 if (ret) {
12726 return ret;
12727 }
12728 }
12729 }
12730 },
12731 pushComponent: function pushComponent(components, added, removed) {
12732 var last = components[components.length - 1];
12733
12734 if (last && last.added === added && last.removed === removed) {
12735 // We need to clone here as the component clone operation is just
12736 // as shallow array clone
12737 components[components.length - 1] = {
12738 count: last.count + 1,
12739 added: added,
12740 removed: removed
12741 };
12742 } else {
12743 components.push({
12744 count: 1,
12745 added: added,
12746 removed: removed
12747 });
12748 }
12749 },
12750 extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
12751 var newLen = newString.length,
12752 oldLen = oldString.length,
12753 newPos = basePath.newPos,
12754 oldPos = newPos - diagonalPath,
12755 commonCount = 0;
12756
12757 while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
12758 newPos++;
12759 oldPos++;
12760 commonCount++;
12761 }
12762
12763 if (commonCount) {
12764 basePath.components.push({
12765 count: commonCount
12766 });
12767 }
12768
12769 basePath.newPos = newPos;
12770 return oldPos;
12771 },
12772 equals: function equals(left, right) {
12773 if (this.options.comparator) {
12774 return this.options.comparator(left, right);
12775 } else {
12776 return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase();
12777 }
12778 },
12779 removeEmpty: function removeEmpty(array) {
12780 var ret = [];
12781
12782 for (var i = 0; i < array.length; i++) {
12783 if (array[i]) {
12784 ret.push(array[i]);
12785 }
12786 }
12787
12788 return ret;
12789 },
12790 castInput: function castInput(value) {
12791 return value;
12792 },
12793 tokenize: function tokenize(value) {
12794 return value.split('');
12795 },
12796 join: function join(chars) {
12797 return chars.join('');
12798 }
12799 };
12800
12801 function buildValues(diff, components, newString, oldString, useLongestToken) {
12802 var componentPos = 0,
12803 componentLen = components.length,
12804 newPos = 0,
12805 oldPos = 0;
12806
12807 for (; componentPos < componentLen; componentPos++) {
12808 var component = components[componentPos];
12809
12810 if (!component.removed) {
12811 if (!component.added && useLongestToken) {
12812 var value = newString.slice(newPos, newPos + component.count);
12813 value = value.map(function (value, i) {
12814 var oldValue = oldString[oldPos + i];
12815 return oldValue.length > value.length ? oldValue : value;
12816 });
12817 component.value = diff.join(value);
12818 } else {
12819 component.value = diff.join(newString.slice(newPos, newPos + component.count));
12820 }
12821
12822 newPos += component.count; // Common case
12823
12824 if (!component.added) {
12825 oldPos += component.count;
12826 }
12827 } else {
12828 component.value = diff.join(oldString.slice(oldPos, oldPos + component.count));
12829 oldPos += component.count; // Reverse add and remove so removes are output first to match common convention
12830 // The diffing algorithm is tied to add then remove output and this is the simplest
12831 // route to get the desired output with minimal overhead.
12832
12833 if (componentPos && components[componentPos - 1].added) {
12834 var tmp = components[componentPos - 1];
12835 components[componentPos - 1] = components[componentPos];
12836 components[componentPos] = tmp;
12837 }
12838 }
12839 } // Special case handle for when one terminal is ignored (i.e. whitespace).
12840 // For this case we merge the terminal into the prior string and drop the change.
12841 // This is only available for string mode.
12842
12843
12844 var lastComponent = components[componentLen - 1];
12845
12846 if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
12847 components[componentLen - 2].value += lastComponent.value;
12848 components.pop();
12849 }
12850
12851 return components;
12852 }
12853
12854 function clonePath(path) {
12855 return {
12856 newPos: path.newPos,
12857 components: path.components.slice(0)
12858 };
12859 }
12860
12861 var characterDiff = new Diff();
12862 function diffChars(oldStr, newStr, options) {
12863 return characterDiff.diff(oldStr, newStr, options);
12864 }
12865
12866 function generateOptions(options, defaults) {
12867 if (typeof options === 'function') {
12868 defaults.callback = options;
12869 } else if (options) {
12870 for (var name in options) {
12871 /* istanbul ignore else */
12872 if (options.hasOwnProperty(name)) {
12873 defaults[name] = options[name];
12874 }
12875 }
12876 }
12877
12878 return defaults;
12879 }
12880
12881 //
12882 // Ranges and exceptions:
12883 // Latin-1 Supplement, 0080–00FF
12884 // - U+00D7 × Multiplication sign
12885 // - U+00F7 ÷ Division sign
12886 // Latin Extended-A, 0100–017F
12887 // Latin Extended-B, 0180–024F
12888 // IPA Extensions, 0250–02AF
12889 // Spacing Modifier Letters, 02B0–02FF
12890 // - U+02C7 ˇ &#711; Caron
12891 // - U+02D8 ˘ &#728; Breve
12892 // - U+02D9 ˙ &#729; Dot Above
12893 // - U+02DA ˚ &#730; Ring Above
12894 // - U+02DB ˛ &#731; Ogonek
12895 // - U+02DC ˜ &#732; Small Tilde
12896 // - U+02DD ˝ &#733; Double Acute Accent
12897 // Latin Extended Additional, 1E00–1EFF
12898
12899 var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/;
12900 var reWhitespace = /\S/;
12901 var wordDiff = new Diff();
12902
12903 wordDiff.equals = function (left, right) {
12904 if (this.options.ignoreCase) {
12905 left = left.toLowerCase();
12906 right = right.toLowerCase();
12907 }
12908
12909 return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right);
12910 };
12911
12912 wordDiff.tokenize = function (value) {
12913 // All whitespace symbols except newline group into one token, each newline - in separate token
12914 var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); // Join the boundary splits that we do not consider to be boundaries. This is primarily the extended Latin character set.
12915
12916 for (var i = 0; i < tokens.length - 1; i++) {
12917 // If we have an empty string in the next field and we have only word chars before and after, merge
12918 if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) {
12919 tokens[i] += tokens[i + 2];
12920 tokens.splice(i + 1, 2);
12921 i--;
12922 }
12923 }
12924
12925 return tokens;
12926 };
12927
12928 function diffWords(oldStr, newStr, options) {
12929 options = generateOptions(options, {
12930 ignoreWhitespace: true
12931 });
12932 return wordDiff.diff(oldStr, newStr, options);
12933 }
12934 function diffWordsWithSpace(oldStr, newStr, options) {
12935 return wordDiff.diff(oldStr, newStr, options);
12936 }
12937
12938 var lineDiff = new Diff();
12939
12940 lineDiff.tokenize = function (value) {
12941 var retLines = [],
12942 linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line
12943
12944 if (!linesAndNewlines[linesAndNewlines.length - 1]) {
12945 linesAndNewlines.pop();
12946 } // Merge the content and line separators into single tokens
12947
12948
12949 for (var i = 0; i < linesAndNewlines.length; i++) {
12950 var line = linesAndNewlines[i];
12951
12952 if (i % 2 && !this.options.newlineIsToken) {
12953 retLines[retLines.length - 1] += line;
12954 } else {
12955 if (this.options.ignoreWhitespace) {
12956 line = line.trim();
12957 }
12958
12959 retLines.push(line);
12960 }
12961 }
12962
12963 return retLines;
12964 };
12965
12966 function diffLines(oldStr, newStr, callback) {
12967 return lineDiff.diff(oldStr, newStr, callback);
12968 }
12969 function diffTrimmedLines(oldStr, newStr, callback) {
12970 var options = generateOptions(callback, {
12971 ignoreWhitespace: true
12972 });
12973 return lineDiff.diff(oldStr, newStr, options);
12974 }
12975
12976 var sentenceDiff = new Diff();
12977
12978 sentenceDiff.tokenize = function (value) {
12979 return value.split(/(\S.+?[.!?])(?=\s+|$)/);
12980 };
12981
12982 function diffSentences(oldStr, newStr, callback) {
12983 return sentenceDiff.diff(oldStr, newStr, callback);
12984 }
12985
12986 var cssDiff = new Diff();
12987
12988 cssDiff.tokenize = function (value) {
12989 return value.split(/([{}:;,]|\s+)/);
12990 };
12991
12992 function diffCss(oldStr, newStr, callback) {
12993 return cssDiff.diff(oldStr, newStr, callback);
12994 }
12995
12996 function _typeof(obj) {
12997 "@babel/helpers - typeof";
12998
12999 if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
13000 _typeof = function (obj) {
13001 return typeof obj;
13002 };
13003 } else {
13004 _typeof = function (obj) {
13005 return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
13006 };
13007 }
13008
13009 return _typeof(obj);
13010 }
13011
13012 function _toConsumableArray(arr) {
13013 return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
13014 }
13015
13016 function _arrayWithoutHoles(arr) {
13017 if (Array.isArray(arr)) return _arrayLikeToArray(arr);
13018 }
13019
13020 function _iterableToArray(iter) {
13021 if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
13022 }
13023
13024 function _unsupportedIterableToArray(o, minLen) {
13025 if (!o) return;
13026 if (typeof o === "string") return _arrayLikeToArray(o, minLen);
13027 var n = Object.prototype.toString.call(o).slice(8, -1);
13028 if (n === "Object" && o.constructor) n = o.constructor.name;
13029 if (n === "Map" || n === "Set") return Array.from(o);
13030 if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
13031 }
13032
13033 function _arrayLikeToArray(arr, len) {
13034 if (len == null || len > arr.length) len = arr.length;
13035
13036 for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
13037
13038 return arr2;
13039 }
13040
13041 function _nonIterableSpread() {
13042 throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
13043 }
13044
13045 var objectPrototypeToString = Object.prototype.toString;
13046 var jsonDiff = new Diff(); // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a
13047 // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:
13048
13049 jsonDiff.useLongestToken = true;
13050 jsonDiff.tokenize = lineDiff.tokenize;
13051
13052 jsonDiff.castInput = function (value) {
13053 var _this$options = this.options,
13054 undefinedReplacement = _this$options.undefinedReplacement,
13055 _this$options$stringi = _this$options.stringifyReplacer,
13056 stringifyReplacer = _this$options$stringi === void 0 ? function (k, v) {
13057 return typeof v === 'undefined' ? undefinedReplacement : v;
13058 } : _this$options$stringi;
13059 return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, ' ');
13060 };
13061
13062 jsonDiff.equals = function (left, right) {
13063 return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, '$1'), right.replace(/,([\r\n])/g, '$1'));
13064 };
13065
13066 function diffJson(oldObj, newObj, options) {
13067 return jsonDiff.diff(oldObj, newObj, options);
13068 } // This function handles the presence of circular references by bailing out when encountering an
13069 // object that is already on the "stack" of items being processed. Accepts an optional replacer
13070
13071 function canonicalize(obj, stack, replacementStack, replacer, key) {
13072 stack = stack || [];
13073 replacementStack = replacementStack || [];
13074
13075 if (replacer) {
13076 obj = replacer(key, obj);
13077 }
13078
13079 var i;
13080
13081 for (i = 0; i < stack.length; i += 1) {
13082 if (stack[i] === obj) {
13083 return replacementStack[i];
13084 }
13085 }
13086
13087 var canonicalizedObj;
13088
13089 if ('[object Array]' === objectPrototypeToString.call(obj)) {
13090 stack.push(obj);
13091 canonicalizedObj = new Array(obj.length);
13092 replacementStack.push(canonicalizedObj);
13093
13094 for (i = 0; i < obj.length; i += 1) {
13095 canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key);
13096 }
13097
13098 stack.pop();
13099 replacementStack.pop();
13100 return canonicalizedObj;
13101 }
13102
13103 if (obj && obj.toJSON) {
13104 obj = obj.toJSON();
13105 }
13106
13107 if (_typeof(obj) === 'object' && obj !== null) {
13108 stack.push(obj);
13109 canonicalizedObj = {};
13110 replacementStack.push(canonicalizedObj);
13111
13112 var sortedKeys = [],
13113 _key;
13114
13115 for (_key in obj) {
13116 /* istanbul ignore else */
13117 if (obj.hasOwnProperty(_key)) {
13118 sortedKeys.push(_key);
13119 }
13120 }
13121
13122 sortedKeys.sort();
13123
13124 for (i = 0; i < sortedKeys.length; i += 1) {
13125 _key = sortedKeys[i];
13126 canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key);
13127 }
13128
13129 stack.pop();
13130 replacementStack.pop();
13131 } else {
13132 canonicalizedObj = obj;
13133 }
13134
13135 return canonicalizedObj;
13136 }
13137
13138 var arrayDiff = new Diff();
13139
13140 arrayDiff.tokenize = function (value) {
13141 return value.slice();
13142 };
13143
13144 arrayDiff.join = arrayDiff.removeEmpty = function (value) {
13145 return value;
13146 };
13147
13148 function diffArrays(oldArr, newArr, callback) {
13149 return arrayDiff.diff(oldArr, newArr, callback);
13150 }
13151
13152 function parsePatch(uniDiff) {
13153 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
13154 var diffstr = uniDiff.split(/\r\n|[\n\v\f\r\x85]/),
13155 delimiters = uniDiff.match(/\r\n|[\n\v\f\r\x85]/g) || [],
13156 list = [],
13157 i = 0;
13158
13159 function parseIndex() {
13160 var index = {};
13161 list.push(index); // Parse diff metadata
13162
13163 while (i < diffstr.length) {
13164 var line = diffstr[i]; // File header found, end parsing diff metadata
13165
13166 if (/^(\-\-\-|\+\+\+|@@)\s/.test(line)) {
13167 break;
13168 } // Diff index
13169
13170
13171 var header = /^(?:Index:|diff(?: -r \w+)+)\s+(.+?)\s*$/.exec(line);
13172
13173 if (header) {
13174 index.index = header[1];
13175 }
13176
13177 i++;
13178 } // Parse file headers if they are defined. Unified diff requires them, but
13179 // there's no technical issues to have an isolated hunk without file header
13180
13181
13182 parseFileHeader(index);
13183 parseFileHeader(index); // Parse hunks
13184
13185 index.hunks = [];
13186
13187 while (i < diffstr.length) {
13188 var _line = diffstr[i];
13189
13190 if (/^(Index:|diff|\-\-\-|\+\+\+)\s/.test(_line)) {
13191 break;
13192 } else if (/^@@/.test(_line)) {
13193 index.hunks.push(parseHunk());
13194 } else if (_line && options.strict) {
13195 // Ignore unexpected content unless in strict mode
13196 throw new Error('Unknown line ' + (i + 1) + ' ' + JSON.stringify(_line));
13197 } else {
13198 i++;
13199 }
13200 }
13201 } // Parses the --- and +++ headers, if none are found, no lines
13202 // are consumed.
13203
13204
13205 function parseFileHeader(index) {
13206 var fileHeader = /^(---|\+\+\+)\s+(.*)$/.exec(diffstr[i]);
13207
13208 if (fileHeader) {
13209 var keyPrefix = fileHeader[1] === '---' ? 'old' : 'new';
13210 var data = fileHeader[2].split('\t', 2);
13211 var fileName = data[0].replace(/\\\\/g, '\\');
13212
13213 if (/^".*"$/.test(fileName)) {
13214 fileName = fileName.substr(1, fileName.length - 2);
13215 }
13216
13217 index[keyPrefix + 'FileName'] = fileName;
13218 index[keyPrefix + 'Header'] = (data[1] || '').trim();
13219 i++;
13220 }
13221 } // Parses a hunk
13222 // This assumes that we are at the start of a hunk.
13223
13224
13225 function parseHunk() {
13226 var chunkHeaderIndex = i,
13227 chunkHeaderLine = diffstr[i++],
13228 chunkHeader = chunkHeaderLine.split(/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
13229 var hunk = {
13230 oldStart: +chunkHeader[1],
13231 oldLines: typeof chunkHeader[2] === 'undefined' ? 1 : +chunkHeader[2],
13232 newStart: +chunkHeader[3],
13233 newLines: typeof chunkHeader[4] === 'undefined' ? 1 : +chunkHeader[4],
13234 lines: [],
13235 linedelimiters: []
13236 }; // Unified Diff Format quirk: If the chunk size is 0,
13237 // the first number is one lower than one would expect.
13238 // https://www.artima.com/weblogs/viewpost.jsp?thread=164293
13239
13240 if (hunk.oldLines === 0) {
13241 hunk.oldStart += 1;
13242 }
13243
13244 if (hunk.newLines === 0) {
13245 hunk.newStart += 1;
13246 }
13247
13248 var addCount = 0,
13249 removeCount = 0;
13250
13251 for (; i < diffstr.length; i++) {
13252 // Lines starting with '---' could be mistaken for the "remove line" operation
13253 // But they could be the header for the next file. Therefore prune such cases out.
13254 if (diffstr[i].indexOf('--- ') === 0 && i + 2 < diffstr.length && diffstr[i + 1].indexOf('+++ ') === 0 && diffstr[i + 2].indexOf('@@') === 0) {
13255 break;
13256 }
13257
13258 var operation = diffstr[i].length == 0 && i != diffstr.length - 1 ? ' ' : diffstr[i][0];
13259
13260 if (operation === '+' || operation === '-' || operation === ' ' || operation === '\\') {
13261 hunk.lines.push(diffstr[i]);
13262 hunk.linedelimiters.push(delimiters[i] || '\n');
13263
13264 if (operation === '+') {
13265 addCount++;
13266 } else if (operation === '-') {
13267 removeCount++;
13268 } else if (operation === ' ') {
13269 addCount++;
13270 removeCount++;
13271 }
13272 } else {
13273 break;
13274 }
13275 } // Handle the empty block count case
13276
13277
13278 if (!addCount && hunk.newLines === 1) {
13279 hunk.newLines = 0;
13280 }
13281
13282 if (!removeCount && hunk.oldLines === 1) {
13283 hunk.oldLines = 0;
13284 } // Perform optional sanity checking
13285
13286
13287 if (options.strict) {
13288 if (addCount !== hunk.newLines) {
13289 throw new Error('Added line count did not match for hunk at line ' + (chunkHeaderIndex + 1));
13290 }
13291
13292 if (removeCount !== hunk.oldLines) {
13293 throw new Error('Removed line count did not match for hunk at line ' + (chunkHeaderIndex + 1));
13294 }
13295 }
13296
13297 return hunk;
13298 }
13299
13300 while (i < diffstr.length) {
13301 parseIndex();
13302 }
13303
13304 return list;
13305 }
13306
13307 // Iterator that traverses in the range of [min, max], stepping
13308 // by distance from a given start position. I.e. for [0, 4], with
13309 // start of 2, this will iterate 2, 3, 1, 4, 0.
13310 function distanceIterator (start, minLine, maxLine) {
13311 var wantForward = true,
13312 backwardExhausted = false,
13313 forwardExhausted = false,
13314 localOffset = 1;
13315 return function iterator() {
13316 if (wantForward && !forwardExhausted) {
13317 if (backwardExhausted) {
13318 localOffset++;
13319 } else {
13320 wantForward = false;
13321 } // Check if trying to fit beyond text length, and if not, check it fits
13322 // after offset location (or desired location on first iteration)
13323
13324
13325 if (start + localOffset <= maxLine) {
13326 return localOffset;
13327 }
13328
13329 forwardExhausted = true;
13330 }
13331
13332 if (!backwardExhausted) {
13333 if (!forwardExhausted) {
13334 wantForward = true;
13335 } // Check if trying to fit before text beginning, and if not, check it fits
13336 // before offset location
13337
13338
13339 if (minLine <= start - localOffset) {
13340 return -localOffset++;
13341 }
13342
13343 backwardExhausted = true;
13344 return iterator();
13345 } // We tried to fit hunk before text beginning and beyond text length, then
13346 // hunk can't fit on the text. Return undefined
13347
13348 };
13349 }
13350
13351 function applyPatch(source, uniDiff) {
13352 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
13353
13354 if (typeof uniDiff === 'string') {
13355 uniDiff = parsePatch(uniDiff);
13356 }
13357
13358 if (Array.isArray(uniDiff)) {
13359 if (uniDiff.length > 1) {
13360 throw new Error('applyPatch only works with a single input.');
13361 }
13362
13363 uniDiff = uniDiff[0];
13364 } // Apply the diff to the input
13365
13366
13367 var lines = source.split(/\r\n|[\n\v\f\r\x85]/),
13368 delimiters = source.match(/\r\n|[\n\v\f\r\x85]/g) || [],
13369 hunks = uniDiff.hunks,
13370 compareLine = options.compareLine || function (lineNumber, line, operation, patchContent) {
13371 return line === patchContent;
13372 },
13373 errorCount = 0,
13374 fuzzFactor = options.fuzzFactor || 0,
13375 minLine = 0,
13376 offset = 0,
13377 removeEOFNL,
13378 addEOFNL;
13379 /**
13380 * Checks if the hunk exactly fits on the provided location
13381 */
13382
13383
13384 function hunkFits(hunk, toPos) {
13385 for (var j = 0; j < hunk.lines.length; j++) {
13386 var line = hunk.lines[j],
13387 operation = line.length > 0 ? line[0] : ' ',
13388 content = line.length > 0 ? line.substr(1) : line;
13389
13390 if (operation === ' ' || operation === '-') {
13391 // Context sanity check
13392 if (!compareLine(toPos + 1, lines[toPos], operation, content)) {
13393 errorCount++;
13394
13395 if (errorCount > fuzzFactor) {
13396 return false;
13397 }
13398 }
13399
13400 toPos++;
13401 }
13402 }
13403
13404 return true;
13405 } // Search best fit offsets for each hunk based on the previous ones
13406
13407
13408 for (var i = 0; i < hunks.length; i++) {
13409 var hunk = hunks[i],
13410 maxLine = lines.length - hunk.oldLines,
13411 localOffset = 0,
13412 toPos = offset + hunk.oldStart - 1;
13413 var iterator = distanceIterator(toPos, minLine, maxLine);
13414
13415 for (; localOffset !== undefined; localOffset = iterator()) {
13416 if (hunkFits(hunk, toPos + localOffset)) {
13417 hunk.offset = offset += localOffset;
13418 break;
13419 }
13420 }
13421
13422 if (localOffset === undefined) {
13423 return false;
13424 } // Set lower text limit to end of the current hunk, so next ones don't try
13425 // to fit over already patched text
13426
13427
13428 minLine = hunk.offset + hunk.oldStart + hunk.oldLines;
13429 } // Apply patch hunks
13430
13431
13432 var diffOffset = 0;
13433
13434 for (var _i = 0; _i < hunks.length; _i++) {
13435 var _hunk = hunks[_i],
13436 _toPos = _hunk.oldStart + _hunk.offset + diffOffset - 1;
13437
13438 diffOffset += _hunk.newLines - _hunk.oldLines;
13439
13440 for (var j = 0; j < _hunk.lines.length; j++) {
13441 var line = _hunk.lines[j],
13442 operation = line.length > 0 ? line[0] : ' ',
13443 content = line.length > 0 ? line.substr(1) : line,
13444 delimiter = _hunk.linedelimiters[j];
13445
13446 if (operation === ' ') {
13447 _toPos++;
13448 } else if (operation === '-') {
13449 lines.splice(_toPos, 1);
13450 delimiters.splice(_toPos, 1);
13451 /* istanbul ignore else */
13452 } else if (operation === '+') {
13453 lines.splice(_toPos, 0, content);
13454 delimiters.splice(_toPos, 0, delimiter);
13455 _toPos++;
13456 } else if (operation === '\\') {
13457 var previousOperation = _hunk.lines[j - 1] ? _hunk.lines[j - 1][0] : null;
13458
13459 if (previousOperation === '+') {
13460 removeEOFNL = true;
13461 } else if (previousOperation === '-') {
13462 addEOFNL = true;
13463 }
13464 }
13465 }
13466 } // Handle EOFNL insertion/removal
13467
13468
13469 if (removeEOFNL) {
13470 while (!lines[lines.length - 1]) {
13471 lines.pop();
13472 delimiters.pop();
13473 }
13474 } else if (addEOFNL) {
13475 lines.push('');
13476 delimiters.push('\n');
13477 }
13478
13479 for (var _k = 0; _k < lines.length - 1; _k++) {
13480 lines[_k] = lines[_k] + delimiters[_k];
13481 }
13482
13483 return lines.join('');
13484 } // Wrapper that supports multiple file patches via callbacks.
13485
13486 function applyPatches(uniDiff, options) {
13487 if (typeof uniDiff === 'string') {
13488 uniDiff = parsePatch(uniDiff);
13489 }
13490
13491 var currentIndex = 0;
13492
13493 function processIndex() {
13494 var index = uniDiff[currentIndex++];
13495
13496 if (!index) {
13497 return options.complete();
13498 }
13499
13500 options.loadFile(index, function (err, data) {
13501 if (err) {
13502 return options.complete(err);
13503 }
13504
13505 var updatedContent = applyPatch(data, index, options);
13506 options.patched(index, updatedContent, function (err) {
13507 if (err) {
13508 return options.complete(err);
13509 }
13510
13511 processIndex();
13512 });
13513 });
13514 }
13515
13516 processIndex();
13517 }
13518
13519 function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
13520 if (!options) {
13521 options = {};
13522 }
13523
13524 if (typeof options.context === 'undefined') {
13525 options.context = 4;
13526 }
13527
13528 var diff = diffLines(oldStr, newStr, options);
13529
13530 if (!diff) {
13531 return;
13532 }
13533
13534 diff.push({
13535 value: '',
13536 lines: []
13537 }); // Append an empty value to make cleanup easier
13538
13539 function contextLines(lines) {
13540 return lines.map(function (entry) {
13541 return ' ' + entry;
13542 });
13543 }
13544
13545 var hunks = [];
13546 var oldRangeStart = 0,
13547 newRangeStart = 0,
13548 curRange = [],
13549 oldLine = 1,
13550 newLine = 1;
13551
13552 var _loop = function _loop(i) {
13553 var current = diff[i],
13554 lines = current.lines || current.value.replace(/\n$/, '').split('\n');
13555 current.lines = lines;
13556
13557 if (current.added || current.removed) {
13558 var _curRange;
13559
13560 // If we have previous context, start with that
13561 if (!oldRangeStart) {
13562 var prev = diff[i - 1];
13563 oldRangeStart = oldLine;
13564 newRangeStart = newLine;
13565
13566 if (prev) {
13567 curRange = options.context > 0 ? contextLines(prev.lines.slice(-options.context)) : [];
13568 oldRangeStart -= curRange.length;
13569 newRangeStart -= curRange.length;
13570 }
13571 } // Output our changes
13572
13573
13574 (_curRange = curRange).push.apply(_curRange, _toConsumableArray(lines.map(function (entry) {
13575 return (current.added ? '+' : '-') + entry;
13576 }))); // Track the updated file position
13577
13578
13579 if (current.added) {
13580 newLine += lines.length;
13581 } else {
13582 oldLine += lines.length;
13583 }
13584 } else {
13585 // Identical context lines. Track line changes
13586 if (oldRangeStart) {
13587 // Close out any changes that have been output (or join overlapping)
13588 if (lines.length <= options.context * 2 && i < diff.length - 2) {
13589 var _curRange2;
13590
13591 // Overlapping
13592 (_curRange2 = curRange).push.apply(_curRange2, _toConsumableArray(contextLines(lines)));
13593 } else {
13594 var _curRange3;
13595
13596 // end the range and output
13597 var contextSize = Math.min(lines.length, options.context);
13598
13599 (_curRange3 = curRange).push.apply(_curRange3, _toConsumableArray(contextLines(lines.slice(0, contextSize))));
13600
13601 var hunk = {
13602 oldStart: oldRangeStart,
13603 oldLines: oldLine - oldRangeStart + contextSize,
13604 newStart: newRangeStart,
13605 newLines: newLine - newRangeStart + contextSize,
13606 lines: curRange
13607 };
13608
13609 if (i >= diff.length - 2 && lines.length <= options.context) {
13610 // EOF is inside this hunk
13611 var oldEOFNewline = /\n$/.test(oldStr);
13612 var newEOFNewline = /\n$/.test(newStr);
13613 var noNlBeforeAdds = lines.length == 0 && curRange.length > hunk.oldLines;
13614
13615 if (!oldEOFNewline && noNlBeforeAdds && oldStr.length > 0) {
13616 // special case: old has no eol and no trailing context; no-nl can end up before adds
13617 // however, if the old file is empty, do not output the no-nl line
13618 curRange.splice(hunk.oldLines, 0, '\\ No newline at end of file');
13619 }
13620
13621 if (!oldEOFNewline && !noNlBeforeAdds || !newEOFNewline) {
13622 curRange.push('\\ No newline at end of file');
13623 }
13624 }
13625
13626 hunks.push(hunk);
13627 oldRangeStart = 0;
13628 newRangeStart = 0;
13629 curRange = [];
13630 }
13631 }
13632
13633 oldLine += lines.length;
13634 newLine += lines.length;
13635 }
13636 };
13637
13638 for (var i = 0; i < diff.length; i++) {
13639 _loop(i);
13640 }
13641
13642 return {
13643 oldFileName: oldFileName,
13644 newFileName: newFileName,
13645 oldHeader: oldHeader,
13646 newHeader: newHeader,
13647 hunks: hunks
13648 };
13649 }
13650 function formatPatch(diff) {
13651 var ret = [];
13652
13653 if (diff.oldFileName == diff.newFileName) {
13654 ret.push('Index: ' + diff.oldFileName);
13655 }
13656
13657 ret.push('===================================================================');
13658 ret.push('--- ' + diff.oldFileName + (typeof diff.oldHeader === 'undefined' ? '' : '\t' + diff.oldHeader));
13659 ret.push('+++ ' + diff.newFileName + (typeof diff.newHeader === 'undefined' ? '' : '\t' + diff.newHeader));
13660
13661 for (var i = 0; i < diff.hunks.length; i++) {
13662 var hunk = diff.hunks[i]; // Unified Diff Format quirk: If the chunk size is 0,
13663 // the first number is one lower than one would expect.
13664 // https://www.artima.com/weblogs/viewpost.jsp?thread=164293
13665
13666 if (hunk.oldLines === 0) {
13667 hunk.oldStart -= 1;
13668 }
13669
13670 if (hunk.newLines === 0) {
13671 hunk.newStart -= 1;
13672 }
13673
13674 ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines + ' +' + hunk.newStart + ',' + hunk.newLines + ' @@');
13675 ret.push.apply(ret, hunk.lines);
13676 }
13677
13678 return ret.join('\n') + '\n';
13679 }
13680 function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {
13681 return formatPatch(structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options));
13682 }
13683 function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {
13684 return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);
13685 }
13686
13687 function arrayEqual(a, b) {
13688 if (a.length !== b.length) {
13689 return false;
13690 }
13691
13692 return arrayStartsWith(a, b);
13693 }
13694 function arrayStartsWith(array, start) {
13695 if (start.length > array.length) {
13696 return false;
13697 }
13698
13699 for (var i = 0; i < start.length; i++) {
13700 if (start[i] !== array[i]) {
13701 return false;
13702 }
13703 }
13704
13705 return true;
13706 }
13707
13708 function calcLineCount(hunk) {
13709 var _calcOldNewLineCount = calcOldNewLineCount(hunk.lines),
13710 oldLines = _calcOldNewLineCount.oldLines,
13711 newLines = _calcOldNewLineCount.newLines;
13712
13713 if (oldLines !== undefined) {
13714 hunk.oldLines = oldLines;
13715 } else {
13716 delete hunk.oldLines;
13717 }
13718
13719 if (newLines !== undefined) {
13720 hunk.newLines = newLines;
13721 } else {
13722 delete hunk.newLines;
13723 }
13724 }
13725 function merge(mine, theirs, base) {
13726 mine = loadPatch(mine, base);
13727 theirs = loadPatch(theirs, base);
13728 var ret = {}; // For index we just let it pass through as it doesn't have any necessary meaning.
13729 // Leaving sanity checks on this to the API consumer that may know more about the
13730 // meaning in their own context.
13731
13732 if (mine.index || theirs.index) {
13733 ret.index = mine.index || theirs.index;
13734 }
13735
13736 if (mine.newFileName || theirs.newFileName) {
13737 if (!fileNameChanged(mine)) {
13738 // No header or no change in ours, use theirs (and ours if theirs does not exist)
13739 ret.oldFileName = theirs.oldFileName || mine.oldFileName;
13740 ret.newFileName = theirs.newFileName || mine.newFileName;
13741 ret.oldHeader = theirs.oldHeader || mine.oldHeader;
13742 ret.newHeader = theirs.newHeader || mine.newHeader;
13743 } else if (!fileNameChanged(theirs)) {
13744 // No header or no change in theirs, use ours
13745 ret.oldFileName = mine.oldFileName;
13746 ret.newFileName = mine.newFileName;
13747 ret.oldHeader = mine.oldHeader;
13748 ret.newHeader = mine.newHeader;
13749 } else {
13750 // Both changed... figure it out
13751 ret.oldFileName = selectField(ret, mine.oldFileName, theirs.oldFileName);
13752 ret.newFileName = selectField(ret, mine.newFileName, theirs.newFileName);
13753 ret.oldHeader = selectField(ret, mine.oldHeader, theirs.oldHeader);
13754 ret.newHeader = selectField(ret, mine.newHeader, theirs.newHeader);
13755 }
13756 }
13757
13758 ret.hunks = [];
13759 var mineIndex = 0,
13760 theirsIndex = 0,
13761 mineOffset = 0,
13762 theirsOffset = 0;
13763
13764 while (mineIndex < mine.hunks.length || theirsIndex < theirs.hunks.length) {
13765 var mineCurrent = mine.hunks[mineIndex] || {
13766 oldStart: Infinity
13767 },
13768 theirsCurrent = theirs.hunks[theirsIndex] || {
13769 oldStart: Infinity
13770 };
13771
13772 if (hunkBefore(mineCurrent, theirsCurrent)) {
13773 // This patch does not overlap with any of the others, yay.
13774 ret.hunks.push(cloneHunk(mineCurrent, mineOffset));
13775 mineIndex++;
13776 theirsOffset += mineCurrent.newLines - mineCurrent.oldLines;
13777 } else if (hunkBefore(theirsCurrent, mineCurrent)) {
13778 // This patch does not overlap with any of the others, yay.
13779 ret.hunks.push(cloneHunk(theirsCurrent, theirsOffset));
13780 theirsIndex++;
13781 mineOffset += theirsCurrent.newLines - theirsCurrent.oldLines;
13782 } else {
13783 // Overlap, merge as best we can
13784 var mergedHunk = {
13785 oldStart: Math.min(mineCurrent.oldStart, theirsCurrent.oldStart),
13786 oldLines: 0,
13787 newStart: Math.min(mineCurrent.newStart + mineOffset, theirsCurrent.oldStart + theirsOffset),
13788 newLines: 0,
13789 lines: []
13790 };
13791 mergeLines(mergedHunk, mineCurrent.oldStart, mineCurrent.lines, theirsCurrent.oldStart, theirsCurrent.lines);
13792 theirsIndex++;
13793 mineIndex++;
13794 ret.hunks.push(mergedHunk);
13795 }
13796 }
13797
13798 return ret;
13799 }
13800
13801 function loadPatch(param, base) {
13802 if (typeof param === 'string') {
13803 if (/^@@/m.test(param) || /^Index:/m.test(param)) {
13804 return parsePatch(param)[0];
13805 }
13806
13807 if (!base) {
13808 throw new Error('Must provide a base reference or pass in a patch');
13809 }
13810
13811 return structuredPatch(undefined, undefined, base, param);
13812 }
13813
13814 return param;
13815 }
13816
13817 function fileNameChanged(patch) {
13818 return patch.newFileName && patch.newFileName !== patch.oldFileName;
13819 }
13820
13821 function selectField(index, mine, theirs) {
13822 if (mine === theirs) {
13823 return mine;
13824 } else {
13825 index.conflict = true;
13826 return {
13827 mine: mine,
13828 theirs: theirs
13829 };
13830 }
13831 }
13832
13833 function hunkBefore(test, check) {
13834 return test.oldStart < check.oldStart && test.oldStart + test.oldLines < check.oldStart;
13835 }
13836
13837 function cloneHunk(hunk, offset) {
13838 return {
13839 oldStart: hunk.oldStart,
13840 oldLines: hunk.oldLines,
13841 newStart: hunk.newStart + offset,
13842 newLines: hunk.newLines,
13843 lines: hunk.lines
13844 };
13845 }
13846
13847 function mergeLines(hunk, mineOffset, mineLines, theirOffset, theirLines) {
13848 // This will generally result in a conflicted hunk, but there are cases where the context
13849 // is the only overlap where we can successfully merge the content here.
13850 var mine = {
13851 offset: mineOffset,
13852 lines: mineLines,
13853 index: 0
13854 },
13855 their = {
13856 offset: theirOffset,
13857 lines: theirLines,
13858 index: 0
13859 }; // Handle any leading content
13860
13861 insertLeading(hunk, mine, their);
13862 insertLeading(hunk, their, mine); // Now in the overlap content. Scan through and select the best changes from each.
13863
13864 while (mine.index < mine.lines.length && their.index < their.lines.length) {
13865 var mineCurrent = mine.lines[mine.index],
13866 theirCurrent = their.lines[their.index];
13867
13868 if ((mineCurrent[0] === '-' || mineCurrent[0] === '+') && (theirCurrent[0] === '-' || theirCurrent[0] === '+')) {
13869 // Both modified ...
13870 mutualChange(hunk, mine, their);
13871 } else if (mineCurrent[0] === '+' && theirCurrent[0] === ' ') {
13872 var _hunk$lines;
13873
13874 // Mine inserted
13875 (_hunk$lines = hunk.lines).push.apply(_hunk$lines, _toConsumableArray(collectChange(mine)));
13876 } else if (theirCurrent[0] === '+' && mineCurrent[0] === ' ') {
13877 var _hunk$lines2;
13878
13879 // Theirs inserted
13880 (_hunk$lines2 = hunk.lines).push.apply(_hunk$lines2, _toConsumableArray(collectChange(their)));
13881 } else if (mineCurrent[0] === '-' && theirCurrent[0] === ' ') {
13882 // Mine removed or edited
13883 removal(hunk, mine, their);
13884 } else if (theirCurrent[0] === '-' && mineCurrent[0] === ' ') {
13885 // Their removed or edited
13886 removal(hunk, their, mine, true);
13887 } else if (mineCurrent === theirCurrent) {
13888 // Context identity
13889 hunk.lines.push(mineCurrent);
13890 mine.index++;
13891 their.index++;
13892 } else {
13893 // Context mismatch
13894 conflict(hunk, collectChange(mine), collectChange(their));
13895 }
13896 } // Now push anything that may be remaining
13897
13898
13899 insertTrailing(hunk, mine);
13900 insertTrailing(hunk, their);
13901 calcLineCount(hunk);
13902 }
13903
13904 function mutualChange(hunk, mine, their) {
13905 var myChanges = collectChange(mine),
13906 theirChanges = collectChange(their);
13907
13908 if (allRemoves(myChanges) && allRemoves(theirChanges)) {
13909 // Special case for remove changes that are supersets of one another
13910 if (arrayStartsWith(myChanges, theirChanges) && skipRemoveSuperset(their, myChanges, myChanges.length - theirChanges.length)) {
13911 var _hunk$lines3;
13912
13913 (_hunk$lines3 = hunk.lines).push.apply(_hunk$lines3, _toConsumableArray(myChanges));
13914
13915 return;
13916 } else if (arrayStartsWith(theirChanges, myChanges) && skipRemoveSuperset(mine, theirChanges, theirChanges.length - myChanges.length)) {
13917 var _hunk$lines4;
13918
13919 (_hunk$lines4 = hunk.lines).push.apply(_hunk$lines4, _toConsumableArray(theirChanges));
13920
13921 return;
13922 }
13923 } else if (arrayEqual(myChanges, theirChanges)) {
13924 var _hunk$lines5;
13925
13926 (_hunk$lines5 = hunk.lines).push.apply(_hunk$lines5, _toConsumableArray(myChanges));
13927
13928 return;
13929 }
13930
13931 conflict(hunk, myChanges, theirChanges);
13932 }
13933
13934 function removal(hunk, mine, their, swap) {
13935 var myChanges = collectChange(mine),
13936 theirChanges = collectContext(their, myChanges);
13937
13938 if (theirChanges.merged) {
13939 var _hunk$lines6;
13940
13941 (_hunk$lines6 = hunk.lines).push.apply(_hunk$lines6, _toConsumableArray(theirChanges.merged));
13942 } else {
13943 conflict(hunk, swap ? theirChanges : myChanges, swap ? myChanges : theirChanges);
13944 }
13945 }
13946
13947 function conflict(hunk, mine, their) {
13948 hunk.conflict = true;
13949 hunk.lines.push({
13950 conflict: true,
13951 mine: mine,
13952 theirs: their
13953 });
13954 }
13955
13956 function insertLeading(hunk, insert, their) {
13957 while (insert.offset < their.offset && insert.index < insert.lines.length) {
13958 var line = insert.lines[insert.index++];
13959 hunk.lines.push(line);
13960 insert.offset++;
13961 }
13962 }
13963
13964 function insertTrailing(hunk, insert) {
13965 while (insert.index < insert.lines.length) {
13966 var line = insert.lines[insert.index++];
13967 hunk.lines.push(line);
13968 }
13969 }
13970
13971 function collectChange(state) {
13972 var ret = [],
13973 operation = state.lines[state.index][0];
13974
13975 while (state.index < state.lines.length) {
13976 var line = state.lines[state.index]; // Group additions that are immediately after subtractions and treat them as one "atomic" modify change.
13977
13978 if (operation === '-' && line[0] === '+') {
13979 operation = '+';
13980 }
13981
13982 if (operation === line[0]) {
13983 ret.push(line);
13984 state.index++;
13985 } else {
13986 break;
13987 }
13988 }
13989
13990 return ret;
13991 }
13992
13993 function collectContext(state, matchChanges) {
13994 var changes = [],
13995 merged = [],
13996 matchIndex = 0,
13997 contextChanges = false,
13998 conflicted = false;
13999
14000 while (matchIndex < matchChanges.length && state.index < state.lines.length) {
14001 var change = state.lines[state.index],
14002 match = matchChanges[matchIndex]; // Once we've hit our add, then we are done
14003
14004 if (match[0] === '+') {
14005 break;
14006 }
14007
14008 contextChanges = contextChanges || change[0] !== ' ';
14009 merged.push(match);
14010 matchIndex++; // Consume any additions in the other block as a conflict to attempt
14011 // to pull in the remaining context after this
14012
14013 if (change[0] === '+') {
14014 conflicted = true;
14015
14016 while (change[0] === '+') {
14017 changes.push(change);
14018 change = state.lines[++state.index];
14019 }
14020 }
14021
14022 if (match.substr(1) === change.substr(1)) {
14023 changes.push(change);
14024 state.index++;
14025 } else {
14026 conflicted = true;
14027 }
14028 }
14029
14030 if ((matchChanges[matchIndex] || '')[0] === '+' && contextChanges) {
14031 conflicted = true;
14032 }
14033
14034 if (conflicted) {
14035 return changes;
14036 }
14037
14038 while (matchIndex < matchChanges.length) {
14039 merged.push(matchChanges[matchIndex++]);
14040 }
14041
14042 return {
14043 merged: merged,
14044 changes: changes
14045 };
14046 }
14047
14048 function allRemoves(changes) {
14049 return changes.reduce(function (prev, change) {
14050 return prev && change[0] === '-';
14051 }, true);
14052 }
14053
14054 function skipRemoveSuperset(state, removeChanges, delta) {
14055 for (var i = 0; i < delta; i++) {
14056 var changeContent = removeChanges[removeChanges.length - delta + i].substr(1);
14057
14058 if (state.lines[state.index + i] !== ' ' + changeContent) {
14059 return false;
14060 }
14061 }
14062
14063 state.index += delta;
14064 return true;
14065 }
14066
14067 function calcOldNewLineCount(lines) {
14068 var oldLines = 0;
14069 var newLines = 0;
14070 lines.forEach(function (line) {
14071 if (typeof line !== 'string') {
14072 var myCount = calcOldNewLineCount(line.mine);
14073 var theirCount = calcOldNewLineCount(line.theirs);
14074
14075 if (oldLines !== undefined) {
14076 if (myCount.oldLines === theirCount.oldLines) {
14077 oldLines += myCount.oldLines;
14078 } else {
14079 oldLines = undefined;
14080 }
14081 }
14082
14083 if (newLines !== undefined) {
14084 if (myCount.newLines === theirCount.newLines) {
14085 newLines += myCount.newLines;
14086 } else {
14087 newLines = undefined;
14088 }
14089 }
14090 } else {
14091 if (newLines !== undefined && (line[0] === '+' || line[0] === ' ')) {
14092 newLines++;
14093 }
14094
14095 if (oldLines !== undefined && (line[0] === '-' || line[0] === ' ')) {
14096 oldLines++;
14097 }
14098 }
14099 });
14100 return {
14101 oldLines: oldLines,
14102 newLines: newLines
14103 };
14104 }
14105
14106 // See: http://code.google.com/p/google-diff-match-patch/wiki/API
14107 function convertChangesToDMP(changes) {
14108 var ret = [],
14109 change,
14110 operation;
14111
14112 for (var i = 0; i < changes.length; i++) {
14113 change = changes[i];
14114
14115 if (change.added) {
14116 operation = 1;
14117 } else if (change.removed) {
14118 operation = -1;
14119 } else {
14120 operation = 0;
14121 }
14122
14123 ret.push([operation, change.value]);
14124 }
14125
14126 return ret;
14127 }
14128
14129 function convertChangesToXML(changes) {
14130 var ret = [];
14131
14132 for (var i = 0; i < changes.length; i++) {
14133 var change = changes[i];
14134
14135 if (change.added) {
14136 ret.push('<ins>');
14137 } else if (change.removed) {
14138 ret.push('<del>');
14139 }
14140
14141 ret.push(escapeHTML(change.value));
14142
14143 if (change.added) {
14144 ret.push('</ins>');
14145 } else if (change.removed) {
14146 ret.push('</del>');
14147 }
14148 }
14149
14150 return ret.join('');
14151 }
14152
14153 function escapeHTML(s) {
14154 var n = s;
14155 n = n.replace(/&/g, '&amp;');
14156 n = n.replace(/</g, '&lt;');
14157 n = n.replace(/>/g, '&gt;');
14158 n = n.replace(/"/g, '&quot;');
14159 return n;
14160 }
14161
14162 exports.Diff = Diff;
14163 exports.applyPatch = applyPatch;
14164 exports.applyPatches = applyPatches;
14165 exports.canonicalize = canonicalize;
14166 exports.convertChangesToDMP = convertChangesToDMP;
14167 exports.convertChangesToXML = convertChangesToXML;
14168 exports.createPatch = createPatch;
14169 exports.createTwoFilesPatch = createTwoFilesPatch;
14170 exports.diffArrays = diffArrays;
14171 exports.diffChars = diffChars;
14172 exports.diffCss = diffCss;
14173 exports.diffJson = diffJson;
14174 exports.diffLines = diffLines;
14175 exports.diffSentences = diffSentences;
14176 exports.diffTrimmedLines = diffTrimmedLines;
14177 exports.diffWords = diffWords;
14178 exports.diffWordsWithSpace = diffWordsWithSpace;
14179 exports.merge = merge;
14180 exports.parsePatch = parsePatch;
14181 exports.structuredPatch = structuredPatch;
14182
14183 Object.defineProperty(exports, '__esModule', { value: true });
14184
14185})));
14186
14187},{}],132:[function(require,module,exports){
14188module.exports = extend;
14189
14190/*
14191 var obj = {a: 3, b: 5};
14192 extend(obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8}
14193 obj; // {a: 4, b: 5, c: 8}
14194
14195 var obj = {a: 3, b: 5};
14196 extend({}, obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8}
14197 obj; // {a: 3, b: 5}
14198
14199 var arr = [1, 2, 3];
14200 var obj = {a: 3, b: 5};
14201 extend(obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]}
14202 arr.push(4);
14203 obj; // {a: 3, b: 5, c: [1, 2, 3, 4]}
14204
14205 var arr = [1, 2, 3];
14206 var obj = {a: 3, b: 5};
14207 extend(true, obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]}
14208 arr.push(4);
14209 obj; // {a: 3, b: 5, c: [1, 2, 3]}
14210
14211 extend({a: 4, b: 5}); // {a: 4, b: 5}
14212 extend({a: 4, b: 5}, 3); {a: 4, b: 5}
14213 extend({a: 4, b: 5}, true); {a: 4, b: 5}
14214 extend('hello', {a: 4, b: 5}); // throws
14215 extend(3, {a: 4, b: 5}); // throws
14216*/
14217
14218function extend(/* [deep], obj1, obj2, [objn] */) {
14219 var args = [].slice.call(arguments);
14220 var deep = false;
14221 if (typeof args[0] == 'boolean') {
14222 deep = args.shift();
14223 }
14224 var result = args[0];
14225 if (isUnextendable(result)) {
14226 throw new Error('extendee must be an object');
14227 }
14228 var extenders = args.slice(1);
14229 var len = extenders.length;
14230 for (var i = 0; i < len; i++) {
14231 var extender = extenders[i];
14232 for (var key in extender) {
14233 if (Object.prototype.hasOwnProperty.call(extender, key)) {
14234 var value = extender[key];
14235 if (deep && isCloneable(value)) {
14236 var base = Array.isArray(value) ? [] : {};
14237 result[key] = extend(
14238 true,
14239 Object.prototype.hasOwnProperty.call(result, key) && !isUnextendable(result[key])
14240 ? result[key]
14241 : base,
14242 value
14243 );
14244 } else {
14245 result[key] = value;
14246 }
14247 }
14248 }
14249 }
14250 return result;
14251}
14252
14253function isCloneable(obj) {
14254 return Array.isArray(obj) || {}.toString.call(obj) == '[object Object]';
14255}
14256
14257function isUnextendable(val) {
14258 return !val || (typeof val != 'object' && typeof val != 'function');
14259}
14260
14261},{}],133:[function(require,module,exports){
14262/**
14263 * lodash (Custom Build) <https://lodash.com/>
14264 * Build: `lodash modularize exports="npm" -o ./`
14265 * Copyright jQuery Foundation and other contributors <https://jquery.org/>
14266 * Released under MIT license <https://lodash.com/license>
14267 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
14268 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
14269 */
14270
14271/** Used as the `TypeError` message for "Functions" methods. */
14272var FUNC_ERROR_TEXT = 'Expected a function';
14273
14274/** Used to stand-in for `undefined` hash values. */
14275var HASH_UNDEFINED = '__lodash_hash_undefined__';
14276
14277/** Used as references for various `Number` constants. */
14278var INFINITY = 1 / 0;
14279
14280/** `Object#toString` result references. */
14281var funcTag = '[object Function]',
14282 genTag = '[object GeneratorFunction]',
14283 symbolTag = '[object Symbol]';
14284
14285/** Used to match property names within property paths. */
14286var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
14287 reIsPlainProp = /^\w*$/,
14288 reLeadingDot = /^\./,
14289 rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
14290
14291/**
14292 * Used to match `RegExp`
14293 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
14294 */
14295var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
14296
14297/** Used to match backslashes in property paths. */
14298var reEscapeChar = /\\(\\)?/g;
14299
14300/** Used to detect host constructors (Safari). */
14301var reIsHostCtor = /^\[object .+?Constructor\]$/;
14302
14303/** Detect free variable `global` from Node.js. */
14304var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
14305
14306/** Detect free variable `self`. */
14307var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
14308
14309/** Used as a reference to the global object. */
14310var root = freeGlobal || freeSelf || Function('return this')();
14311
14312/**
14313 * Gets the value at `key` of `object`.
14314 *
14315 * @private
14316 * @param {Object} [object] The object to query.
14317 * @param {string} key The key of the property to get.
14318 * @returns {*} Returns the property value.
14319 */
14320function getValue(object, key) {
14321 return object == null ? undefined : object[key];
14322}
14323
14324/**
14325 * Checks if `value` is a host object in IE < 9.
14326 *
14327 * @private
14328 * @param {*} value The value to check.
14329 * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
14330 */
14331function isHostObject(value) {
14332 // Many host objects are `Object` objects that can coerce to strings
14333 // despite having improperly defined `toString` methods.
14334 var result = false;
14335 if (value != null && typeof value.toString != 'function') {
14336 try {
14337 result = !!(value + '');
14338 } catch (e) {}
14339 }
14340 return result;
14341}
14342
14343/** Used for built-in method references. */
14344var arrayProto = Array.prototype,
14345 funcProto = Function.prototype,
14346 objectProto = Object.prototype;
14347
14348/** Used to detect overreaching core-js shims. */
14349var coreJsData = root['__core-js_shared__'];
14350
14351/** Used to detect methods masquerading as native. */
14352var maskSrcKey = (function() {
14353 var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
14354 return uid ? ('Symbol(src)_1.' + uid) : '';
14355}());
14356
14357/** Used to resolve the decompiled source of functions. */
14358var funcToString = funcProto.toString;
14359
14360/** Used to check objects for own properties. */
14361var hasOwnProperty = objectProto.hasOwnProperty;
14362
14363/**
14364 * Used to resolve the
14365 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
14366 * of values.
14367 */
14368var objectToString = objectProto.toString;
14369
14370/** Used to detect if a method is native. */
14371var reIsNative = RegExp('^' +
14372 funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
14373 .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
14374);
14375
14376/** Built-in value references. */
14377var Symbol = root.Symbol,
14378 splice = arrayProto.splice;
14379
14380/* Built-in method references that are verified to be native. */
14381var Map = getNative(root, 'Map'),
14382 nativeCreate = getNative(Object, 'create');
14383
14384/** Used to convert symbols to primitives and strings. */
14385var symbolProto = Symbol ? Symbol.prototype : undefined,
14386 symbolToString = symbolProto ? symbolProto.toString : undefined;
14387
14388/**
14389 * Creates a hash object.
14390 *
14391 * @private
14392 * @constructor
14393 * @param {Array} [entries] The key-value pairs to cache.
14394 */
14395function Hash(entries) {
14396 var index = -1,
14397 length = entries ? entries.length : 0;
14398
14399 this.clear();
14400 while (++index < length) {
14401 var entry = entries[index];
14402 this.set(entry[0], entry[1]);
14403 }
14404}
14405
14406/**
14407 * Removes all key-value entries from the hash.
14408 *
14409 * @private
14410 * @name clear
14411 * @memberOf Hash
14412 */
14413function hashClear() {
14414 this.__data__ = nativeCreate ? nativeCreate(null) : {};
14415}
14416
14417/**
14418 * Removes `key` and its value from the hash.
14419 *
14420 * @private
14421 * @name delete
14422 * @memberOf Hash
14423 * @param {Object} hash The hash to modify.
14424 * @param {string} key The key of the value to remove.
14425 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
14426 */
14427function hashDelete(key) {
14428 return this.has(key) && delete this.__data__[key];
14429}
14430
14431/**
14432 * Gets the hash value for `key`.
14433 *
14434 * @private
14435 * @name get
14436 * @memberOf Hash
14437 * @param {string} key The key of the value to get.
14438 * @returns {*} Returns the entry value.
14439 */
14440function hashGet(key) {
14441 var data = this.__data__;
14442 if (nativeCreate) {
14443 var result = data[key];
14444 return result === HASH_UNDEFINED ? undefined : result;
14445 }
14446 return hasOwnProperty.call(data, key) ? data[key] : undefined;
14447}
14448
14449/**
14450 * Checks if a hash value for `key` exists.
14451 *
14452 * @private
14453 * @name has
14454 * @memberOf Hash
14455 * @param {string} key The key of the entry to check.
14456 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
14457 */
14458function hashHas(key) {
14459 var data = this.__data__;
14460 return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
14461}
14462
14463/**
14464 * Sets the hash `key` to `value`.
14465 *
14466 * @private
14467 * @name set
14468 * @memberOf Hash
14469 * @param {string} key The key of the value to set.
14470 * @param {*} value The value to set.
14471 * @returns {Object} Returns the hash instance.
14472 */
14473function hashSet(key, value) {
14474 var data = this.__data__;
14475 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
14476 return this;
14477}
14478
14479// Add methods to `Hash`.
14480Hash.prototype.clear = hashClear;
14481Hash.prototype['delete'] = hashDelete;
14482Hash.prototype.get = hashGet;
14483Hash.prototype.has = hashHas;
14484Hash.prototype.set = hashSet;
14485
14486/**
14487 * Creates an list cache object.
14488 *
14489 * @private
14490 * @constructor
14491 * @param {Array} [entries] The key-value pairs to cache.
14492 */
14493function ListCache(entries) {
14494 var index = -1,
14495 length = entries ? entries.length : 0;
14496
14497 this.clear();
14498 while (++index < length) {
14499 var entry = entries[index];
14500 this.set(entry[0], entry[1]);
14501 }
14502}
14503
14504/**
14505 * Removes all key-value entries from the list cache.
14506 *
14507 * @private
14508 * @name clear
14509 * @memberOf ListCache
14510 */
14511function listCacheClear() {
14512 this.__data__ = [];
14513}
14514
14515/**
14516 * Removes `key` and its value from the list cache.
14517 *
14518 * @private
14519 * @name delete
14520 * @memberOf ListCache
14521 * @param {string} key The key of the value to remove.
14522 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
14523 */
14524function listCacheDelete(key) {
14525 var data = this.__data__,
14526 index = assocIndexOf(data, key);
14527
14528 if (index < 0) {
14529 return false;
14530 }
14531 var lastIndex = data.length - 1;
14532 if (index == lastIndex) {
14533 data.pop();
14534 } else {
14535 splice.call(data, index, 1);
14536 }
14537 return true;
14538}
14539
14540/**
14541 * Gets the list cache value for `key`.
14542 *
14543 * @private
14544 * @name get
14545 * @memberOf ListCache
14546 * @param {string} key The key of the value to get.
14547 * @returns {*} Returns the entry value.
14548 */
14549function listCacheGet(key) {
14550 var data = this.__data__,
14551 index = assocIndexOf(data, key);
14552
14553 return index < 0 ? undefined : data[index][1];
14554}
14555
14556/**
14557 * Checks if a list cache value for `key` exists.
14558 *
14559 * @private
14560 * @name has
14561 * @memberOf ListCache
14562 * @param {string} key The key of the entry to check.
14563 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
14564 */
14565function listCacheHas(key) {
14566 return assocIndexOf(this.__data__, key) > -1;
14567}
14568
14569/**
14570 * Sets the list cache `key` to `value`.
14571 *
14572 * @private
14573 * @name set
14574 * @memberOf ListCache
14575 * @param {string} key The key of the value to set.
14576 * @param {*} value The value to set.
14577 * @returns {Object} Returns the list cache instance.
14578 */
14579function listCacheSet(key, value) {
14580 var data = this.__data__,
14581 index = assocIndexOf(data, key);
14582
14583 if (index < 0) {
14584 data.push([key, value]);
14585 } else {
14586 data[index][1] = value;
14587 }
14588 return this;
14589}
14590
14591// Add methods to `ListCache`.
14592ListCache.prototype.clear = listCacheClear;
14593ListCache.prototype['delete'] = listCacheDelete;
14594ListCache.prototype.get = listCacheGet;
14595ListCache.prototype.has = listCacheHas;
14596ListCache.prototype.set = listCacheSet;
14597
14598/**
14599 * Creates a map cache object to store key-value pairs.
14600 *
14601 * @private
14602 * @constructor
14603 * @param {Array} [entries] The key-value pairs to cache.
14604 */
14605function MapCache(entries) {
14606 var index = -1,
14607 length = entries ? entries.length : 0;
14608
14609 this.clear();
14610 while (++index < length) {
14611 var entry = entries[index];
14612 this.set(entry[0], entry[1]);
14613 }
14614}
14615
14616/**
14617 * Removes all key-value entries from the map.
14618 *
14619 * @private
14620 * @name clear
14621 * @memberOf MapCache
14622 */
14623function mapCacheClear() {
14624 this.__data__ = {
14625 'hash': new Hash,
14626 'map': new (Map || ListCache),
14627 'string': new Hash
14628 };
14629}
14630
14631/**
14632 * Removes `key` and its value from the map.
14633 *
14634 * @private
14635 * @name delete
14636 * @memberOf MapCache
14637 * @param {string} key The key of the value to remove.
14638 * @returns {boolean} Returns `true` if the entry was removed, else `false`.
14639 */
14640function mapCacheDelete(key) {
14641 return getMapData(this, key)['delete'](key);
14642}
14643
14644/**
14645 * Gets the map value for `key`.
14646 *
14647 * @private
14648 * @name get
14649 * @memberOf MapCache
14650 * @param {string} key The key of the value to get.
14651 * @returns {*} Returns the entry value.
14652 */
14653function mapCacheGet(key) {
14654 return getMapData(this, key).get(key);
14655}
14656
14657/**
14658 * Checks if a map value for `key` exists.
14659 *
14660 * @private
14661 * @name has
14662 * @memberOf MapCache
14663 * @param {string} key The key of the entry to check.
14664 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
14665 */
14666function mapCacheHas(key) {
14667 return getMapData(this, key).has(key);
14668}
14669
14670/**
14671 * Sets the map `key` to `value`.
14672 *
14673 * @private
14674 * @name set
14675 * @memberOf MapCache
14676 * @param {string} key The key of the value to set.
14677 * @param {*} value The value to set.
14678 * @returns {Object} Returns the map cache instance.
14679 */
14680function mapCacheSet(key, value) {
14681 getMapData(this, key).set(key, value);
14682 return this;
14683}
14684
14685// Add methods to `MapCache`.
14686MapCache.prototype.clear = mapCacheClear;
14687MapCache.prototype['delete'] = mapCacheDelete;
14688MapCache.prototype.get = mapCacheGet;
14689MapCache.prototype.has = mapCacheHas;
14690MapCache.prototype.set = mapCacheSet;
14691
14692/**
14693 * Gets the index at which the `key` is found in `array` of key-value pairs.
14694 *
14695 * @private
14696 * @param {Array} array The array to inspect.
14697 * @param {*} key The key to search for.
14698 * @returns {number} Returns the index of the matched value, else `-1`.
14699 */
14700function assocIndexOf(array, key) {
14701 var length = array.length;
14702 while (length--) {
14703 if (eq(array[length][0], key)) {
14704 return length;
14705 }
14706 }
14707 return -1;
14708}
14709
14710/**
14711 * The base implementation of `_.get` without support for default values.
14712 *
14713 * @private
14714 * @param {Object} object The object to query.
14715 * @param {Array|string} path The path of the property to get.
14716 * @returns {*} Returns the resolved value.
14717 */
14718function baseGet(object, path) {
14719 path = isKey(path, object) ? [path] : castPath(path);
14720
14721 var index = 0,
14722 length = path.length;
14723
14724 while (object != null && index < length) {
14725 object = object[toKey(path[index++])];
14726 }
14727 return (index && index == length) ? object : undefined;
14728}
14729
14730/**
14731 * The base implementation of `_.isNative` without bad shim checks.
14732 *
14733 * @private
14734 * @param {*} value The value to check.
14735 * @returns {boolean} Returns `true` if `value` is a native function,
14736 * else `false`.
14737 */
14738function baseIsNative(value) {
14739 if (!isObject(value) || isMasked(value)) {
14740 return false;
14741 }
14742 var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
14743 return pattern.test(toSource(value));
14744}
14745
14746/**
14747 * The base implementation of `_.toString` which doesn't convert nullish
14748 * values to empty strings.
14749 *
14750 * @private
14751 * @param {*} value The value to process.
14752 * @returns {string} Returns the string.
14753 */
14754function baseToString(value) {
14755 // Exit early for strings to avoid a performance hit in some environments.
14756 if (typeof value == 'string') {
14757 return value;
14758 }
14759 if (isSymbol(value)) {
14760 return symbolToString ? symbolToString.call(value) : '';
14761 }
14762 var result = (value + '');
14763 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
14764}
14765
14766/**
14767 * Casts `value` to a path array if it's not one.
14768 *
14769 * @private
14770 * @param {*} value The value to inspect.
14771 * @returns {Array} Returns the cast property path array.
14772 */
14773function castPath(value) {
14774 return isArray(value) ? value : stringToPath(value);
14775}
14776
14777/**
14778 * Gets the data for `map`.
14779 *
14780 * @private
14781 * @param {Object} map The map to query.
14782 * @param {string} key The reference key.
14783 * @returns {*} Returns the map data.
14784 */
14785function getMapData(map, key) {
14786 var data = map.__data__;
14787 return isKeyable(key)
14788 ? data[typeof key == 'string' ? 'string' : 'hash']
14789 : data.map;
14790}
14791
14792/**
14793 * Gets the native function at `key` of `object`.
14794 *
14795 * @private
14796 * @param {Object} object The object to query.
14797 * @param {string} key The key of the method to get.
14798 * @returns {*} Returns the function if it's native, else `undefined`.
14799 */
14800function getNative(object, key) {
14801 var value = getValue(object, key);
14802 return baseIsNative(value) ? value : undefined;
14803}
14804
14805/**
14806 * Checks if `value` is a property name and not a property path.
14807 *
14808 * @private
14809 * @param {*} value The value to check.
14810 * @param {Object} [object] The object to query keys on.
14811 * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
14812 */
14813function isKey(value, object) {
14814 if (isArray(value)) {
14815 return false;
14816 }
14817 var type = typeof value;
14818 if (type == 'number' || type == 'symbol' || type == 'boolean' ||
14819 value == null || isSymbol(value)) {
14820 return true;
14821 }
14822 return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
14823 (object != null && value in Object(object));
14824}
14825
14826/**
14827 * Checks if `value` is suitable for use as unique object key.
14828 *
14829 * @private
14830 * @param {*} value The value to check.
14831 * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
14832 */
14833function isKeyable(value) {
14834 var type = typeof value;
14835 return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
14836 ? (value !== '__proto__')
14837 : (value === null);
14838}
14839
14840/**
14841 * Checks if `func` has its source masked.
14842 *
14843 * @private
14844 * @param {Function} func The function to check.
14845 * @returns {boolean} Returns `true` if `func` is masked, else `false`.
14846 */
14847function isMasked(func) {
14848 return !!maskSrcKey && (maskSrcKey in func);
14849}
14850
14851/**
14852 * Converts `string` to a property path array.
14853 *
14854 * @private
14855 * @param {string} string The string to convert.
14856 * @returns {Array} Returns the property path array.
14857 */
14858var stringToPath = memoize(function(string) {
14859 string = toString(string);
14860
14861 var result = [];
14862 if (reLeadingDot.test(string)) {
14863 result.push('');
14864 }
14865 string.replace(rePropName, function(match, number, quote, string) {
14866 result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
14867 });
14868 return result;
14869});
14870
14871/**
14872 * Converts `value` to a string key if it's not a string or symbol.
14873 *
14874 * @private
14875 * @param {*} value The value to inspect.
14876 * @returns {string|symbol} Returns the key.
14877 */
14878function toKey(value) {
14879 if (typeof value == 'string' || isSymbol(value)) {
14880 return value;
14881 }
14882 var result = (value + '');
14883 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
14884}
14885
14886/**
14887 * Converts `func` to its source code.
14888 *
14889 * @private
14890 * @param {Function} func The function to process.
14891 * @returns {string} Returns the source code.
14892 */
14893function toSource(func) {
14894 if (func != null) {
14895 try {
14896 return funcToString.call(func);
14897 } catch (e) {}
14898 try {
14899 return (func + '');
14900 } catch (e) {}
14901 }
14902 return '';
14903}
14904
14905/**
14906 * Creates a function that memoizes the result of `func`. If `resolver` is
14907 * provided, it determines the cache key for storing the result based on the
14908 * arguments provided to the memoized function. By default, the first argument
14909 * provided to the memoized function is used as the map cache key. The `func`
14910 * is invoked with the `this` binding of the memoized function.
14911 *
14912 * **Note:** The cache is exposed as the `cache` property on the memoized
14913 * function. Its creation may be customized by replacing the `_.memoize.Cache`
14914 * constructor with one whose instances implement the
14915 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
14916 * method interface of `delete`, `get`, `has`, and `set`.
14917 *
14918 * @static
14919 * @memberOf _
14920 * @since 0.1.0
14921 * @category Function
14922 * @param {Function} func The function to have its output memoized.
14923 * @param {Function} [resolver] The function to resolve the cache key.
14924 * @returns {Function} Returns the new memoized function.
14925 * @example
14926 *
14927 * var object = { 'a': 1, 'b': 2 };
14928 * var other = { 'c': 3, 'd': 4 };
14929 *
14930 * var values = _.memoize(_.values);
14931 * values(object);
14932 * // => [1, 2]
14933 *
14934 * values(other);
14935 * // => [3, 4]
14936 *
14937 * object.a = 2;
14938 * values(object);
14939 * // => [1, 2]
14940 *
14941 * // Modify the result cache.
14942 * values.cache.set(object, ['a', 'b']);
14943 * values(object);
14944 * // => ['a', 'b']
14945 *
14946 * // Replace `_.memoize.Cache`.
14947 * _.memoize.Cache = WeakMap;
14948 */
14949function memoize(func, resolver) {
14950 if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
14951 throw new TypeError(FUNC_ERROR_TEXT);
14952 }
14953 var memoized = function() {
14954 var args = arguments,
14955 key = resolver ? resolver.apply(this, args) : args[0],
14956 cache = memoized.cache;
14957
14958 if (cache.has(key)) {
14959 return cache.get(key);
14960 }
14961 var result = func.apply(this, args);
14962 memoized.cache = cache.set(key, result);
14963 return result;
14964 };
14965 memoized.cache = new (memoize.Cache || MapCache);
14966 return memoized;
14967}
14968
14969// Assign cache to `_.memoize`.
14970memoize.Cache = MapCache;
14971
14972/**
14973 * Performs a
14974 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
14975 * comparison between two values to determine if they are equivalent.
14976 *
14977 * @static
14978 * @memberOf _
14979 * @since 4.0.0
14980 * @category Lang
14981 * @param {*} value The value to compare.
14982 * @param {*} other The other value to compare.
14983 * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
14984 * @example
14985 *
14986 * var object = { 'a': 1 };
14987 * var other = { 'a': 1 };
14988 *
14989 * _.eq(object, object);
14990 * // => true
14991 *
14992 * _.eq(object, other);
14993 * // => false
14994 *
14995 * _.eq('a', 'a');
14996 * // => true
14997 *
14998 * _.eq('a', Object('a'));
14999 * // => false
15000 *
15001 * _.eq(NaN, NaN);
15002 * // => true
15003 */
15004function eq(value, other) {
15005 return value === other || (value !== value && other !== other);
15006}
15007
15008/**
15009 * Checks if `value` is classified as an `Array` object.
15010 *
15011 * @static
15012 * @memberOf _
15013 * @since 0.1.0
15014 * @category Lang
15015 * @param {*} value The value to check.
15016 * @returns {boolean} Returns `true` if `value` is an array, else `false`.
15017 * @example
15018 *
15019 * _.isArray([1, 2, 3]);
15020 * // => true
15021 *
15022 * _.isArray(document.body.children);
15023 * // => false
15024 *
15025 * _.isArray('abc');
15026 * // => false
15027 *
15028 * _.isArray(_.noop);
15029 * // => false
15030 */
15031var isArray = Array.isArray;
15032
15033/**
15034 * Checks if `value` is classified as a `Function` object.
15035 *
15036 * @static
15037 * @memberOf _
15038 * @since 0.1.0
15039 * @category Lang
15040 * @param {*} value The value to check.
15041 * @returns {boolean} Returns `true` if `value` is a function, else `false`.
15042 * @example
15043 *
15044 * _.isFunction(_);
15045 * // => true
15046 *
15047 * _.isFunction(/abc/);
15048 * // => false
15049 */
15050function isFunction(value) {
15051 // The use of `Object#toString` avoids issues with the `typeof` operator
15052 // in Safari 8-9 which returns 'object' for typed array and other constructors.
15053 var tag = isObject(value) ? objectToString.call(value) : '';
15054 return tag == funcTag || tag == genTag;
15055}
15056
15057/**
15058 * Checks if `value` is the
15059 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
15060 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
15061 *
15062 * @static
15063 * @memberOf _
15064 * @since 0.1.0
15065 * @category Lang
15066 * @param {*} value The value to check.
15067 * @returns {boolean} Returns `true` if `value` is an object, else `false`.
15068 * @example
15069 *
15070 * _.isObject({});
15071 * // => true
15072 *
15073 * _.isObject([1, 2, 3]);
15074 * // => true
15075 *
15076 * _.isObject(_.noop);
15077 * // => true
15078 *
15079 * _.isObject(null);
15080 * // => false
15081 */
15082function isObject(value) {
15083 var type = typeof value;
15084 return !!value && (type == 'object' || type == 'function');
15085}
15086
15087/**
15088 * Checks if `value` is object-like. A value is object-like if it's not `null`
15089 * and has a `typeof` result of "object".
15090 *
15091 * @static
15092 * @memberOf _
15093 * @since 4.0.0
15094 * @category Lang
15095 * @param {*} value The value to check.
15096 * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
15097 * @example
15098 *
15099 * _.isObjectLike({});
15100 * // => true
15101 *
15102 * _.isObjectLike([1, 2, 3]);
15103 * // => true
15104 *
15105 * _.isObjectLike(_.noop);
15106 * // => false
15107 *
15108 * _.isObjectLike(null);
15109 * // => false
15110 */
15111function isObjectLike(value) {
15112 return !!value && typeof value == 'object';
15113}
15114
15115/**
15116 * Checks if `value` is classified as a `Symbol` primitive or object.
15117 *
15118 * @static
15119 * @memberOf _
15120 * @since 4.0.0
15121 * @category Lang
15122 * @param {*} value The value to check.
15123 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
15124 * @example
15125 *
15126 * _.isSymbol(Symbol.iterator);
15127 * // => true
15128 *
15129 * _.isSymbol('abc');
15130 * // => false
15131 */
15132function isSymbol(value) {
15133 return typeof value == 'symbol' ||
15134 (isObjectLike(value) && objectToString.call(value) == symbolTag);
15135}
15136
15137/**
15138 * Converts `value` to a string. An empty string is returned for `null`
15139 * and `undefined` values. The sign of `-0` is preserved.
15140 *
15141 * @static
15142 * @memberOf _
15143 * @since 4.0.0
15144 * @category Lang
15145 * @param {*} value The value to process.
15146 * @returns {string} Returns the string.
15147 * @example
15148 *
15149 * _.toString(null);
15150 * // => ''
15151 *
15152 * _.toString(-0);
15153 * // => '-0'
15154 *
15155 * _.toString([1, 2, 3]);
15156 * // => '1,2,3'
15157 */
15158function toString(value) {
15159 return value == null ? '' : baseToString(value);
15160}
15161
15162/**
15163 * Gets the value at `path` of `object`. If the resolved value is
15164 * `undefined`, the `defaultValue` is returned in its place.
15165 *
15166 * @static
15167 * @memberOf _
15168 * @since 3.7.0
15169 * @category Object
15170 * @param {Object} object The object to query.
15171 * @param {Array|string} path The path of the property to get.
15172 * @param {*} [defaultValue] The value returned for `undefined` resolved values.
15173 * @returns {*} Returns the resolved value.
15174 * @example
15175 *
15176 * var object = { 'a': [{ 'b': { 'c': 3 } }] };
15177 *
15178 * _.get(object, 'a[0].b.c');
15179 * // => 3
15180 *
15181 * _.get(object, ['a', '0', 'b', 'c']);
15182 * // => 3
15183 *
15184 * _.get(object, 'a.b.c', 'default');
15185 * // => 'default'
15186 */
15187function get(object, path, defaultValue) {
15188 var result = object == null ? undefined : baseGet(object, path);
15189 return result === undefined ? defaultValue : result;
15190}
15191
15192module.exports = get;
15193
15194},{}],134:[function(require,module,exports){
15195"use strict";
15196
15197// cache a reference to setTimeout, so that our reference won't be stubbed out
15198// when using fake timers and errors will still get logged
15199// https://github.com/cjohansen/Sinon.JS/issues/381
15200var realSetTimeout = setTimeout;
15201
15202function configureLogger(config) {
15203 // eslint-disable-next-line no-param-reassign
15204 config = config || {};
15205 // Function which prints errors.
15206 if (!config.hasOwnProperty("logger")) {
15207 // eslint-disable-next-line no-empty-function
15208 config.logger = function() {};
15209 }
15210 // When set to true, any errors logged will be thrown immediately;
15211 // If set to false, the errors will be thrown in separate execution frame.
15212 if (!config.hasOwnProperty("useImmediateExceptions")) {
15213 config.useImmediateExceptions = true;
15214 }
15215 // wrap realSetTimeout with something we can stub in tests
15216 if (!config.hasOwnProperty("setTimeout")) {
15217 config.setTimeout = realSetTimeout;
15218 }
15219
15220 return function logError(label, e) {
15221 var msg = `${label} threw exception: `;
15222 var err = {
15223 name: e.name || label,
15224 message: e.message || e.toString(),
15225 stack: e.stack
15226 };
15227
15228 function throwLoggedError() {
15229 err.message = msg + err.message;
15230 throw err;
15231 }
15232
15233 config.logger(`${msg}[${err.name}] ${err.message}`);
15234
15235 if (err.stack) {
15236 config.logger(err.stack);
15237 }
15238
15239 if (config.useImmediateExceptions) {
15240 throwLoggedError();
15241 } else {
15242 config.setTimeout(throwLoggedError, 0);
15243 }
15244 };
15245}
15246
15247module.exports = configureLogger;
15248
15249},{}],135:[function(require,module,exports){
15250"use strict";
15251
15252var Event = require("./event");
15253
15254function CustomEvent(type, customData, target) {
15255 this.initEvent(type, false, false, target);
15256 this.detail = customData.detail || null;
15257}
15258
15259CustomEvent.prototype = new Event();
15260
15261CustomEvent.prototype.constructor = CustomEvent;
15262
15263module.exports = CustomEvent;
15264
15265},{"./event":137}],136:[function(require,module,exports){
15266"use strict";
15267
15268function flattenOptions(options) {
15269 if (options !== Object(options)) {
15270 return {
15271 capture: Boolean(options),
15272 once: false,
15273 passive: false
15274 };
15275 }
15276 return {
15277 capture: Boolean(options.capture),
15278 once: Boolean(options.once),
15279 passive: Boolean(options.passive)
15280 };
15281}
15282function not(fn) {
15283 return function() {
15284 return !fn.apply(this, arguments);
15285 };
15286}
15287function hasListenerFilter(listener, capture) {
15288 return function(listenerSpec) {
15289 return (
15290 listenerSpec.capture === capture &&
15291 listenerSpec.listener === listener
15292 );
15293 };
15294}
15295
15296var EventTarget = {
15297 // https://dom.spec.whatwg.org/#dom-eventtarget-addeventlistener
15298 addEventListener: function addEventListener(
15299 event,
15300 listener,
15301 providedOptions
15302 ) {
15303 // 3. Let capture, passive, and once be the result of flattening more options.
15304 // Flatten property before executing step 2,
15305 // feture detection is usually based on registering handler with options object,
15306 // that has getter defined
15307 // addEventListener("load", () => {}, {
15308 // get once() { supportsOnce = true; }
15309 // });
15310 var options = flattenOptions(providedOptions);
15311
15312 // 2. If callback is null, then return.
15313 if (listener === null || listener === undefined) {
15314 return;
15315 }
15316
15317 this.eventListeners = this.eventListeners || {};
15318 this.eventListeners[event] = this.eventListeners[event] || [];
15319
15320 // 4. If context object’s associated list of event listener
15321 // does not contain an event listener whose type is type,
15322 // callback is callback, and capture is capture, then append
15323 // a new event listener to it, whose type is type, callback is
15324 // callback, capture is capture, passive is passive, and once is once.
15325 if (
15326 !this.eventListeners[event].some(
15327 hasListenerFilter(listener, options.capture)
15328 )
15329 ) {
15330 this.eventListeners[event].push({
15331 listener: listener,
15332 capture: options.capture,
15333 once: options.once
15334 });
15335 }
15336 },
15337
15338 // https://dom.spec.whatwg.org/#dom-eventtarget-removeeventlistener
15339 removeEventListener: function removeEventListener(
15340 event,
15341 listener,
15342 providedOptions
15343 ) {
15344 if (!this.eventListeners || !this.eventListeners[event]) {
15345 return;
15346 }
15347
15348 // 2. Let capture be the result of flattening options.
15349 var options = flattenOptions(providedOptions);
15350
15351 // 3. If there is an event listener in the associated list of
15352 // event listeners whose type is type, callback is callback,
15353 // and capture is capture, then set that event listener’s
15354 // removed to true and remove it from the associated list of event listeners.
15355 this.eventListeners[event] = this.eventListeners[event].filter(
15356 not(hasListenerFilter(listener, options.capture))
15357 );
15358 },
15359
15360 dispatchEvent: function dispatchEvent(event) {
15361 if (!this.eventListeners || !this.eventListeners[event.type]) {
15362 return Boolean(event.defaultPrevented);
15363 }
15364
15365 var self = this;
15366 var type = event.type;
15367 var listeners = self.eventListeners[type];
15368
15369 // Remove listeners, that should be dispatched once
15370 // before running dispatch loop to avoid nested dispatch issues
15371 self.eventListeners[type] = listeners.filter(function(listenerSpec) {
15372 return !listenerSpec.once;
15373 });
15374 listeners.forEach(function(listenerSpec) {
15375 var listener = listenerSpec.listener;
15376 if (typeof listener === "function") {
15377 listener.call(self, event);
15378 } else {
15379 listener.handleEvent(event);
15380 }
15381 });
15382
15383 return Boolean(event.defaultPrevented);
15384 }
15385};
15386
15387module.exports = EventTarget;
15388
15389},{}],137:[function(require,module,exports){
15390"use strict";
15391
15392function Event(type, bubbles, cancelable, target) {
15393 this.initEvent(type, bubbles, cancelable, target);
15394}
15395
15396Event.prototype = {
15397 initEvent: function(type, bubbles, cancelable, target) {
15398 this.type = type;
15399 this.bubbles = bubbles;
15400 this.cancelable = cancelable;
15401 this.target = target;
15402 this.currentTarget = target;
15403 },
15404
15405 // eslint-disable-next-line no-empty-function
15406 stopPropagation: function() {},
15407
15408 preventDefault: function() {
15409 this.defaultPrevented = true;
15410 }
15411};
15412
15413module.exports = Event;
15414
15415},{}],138:[function(require,module,exports){
15416"use strict";
15417
15418module.exports = {
15419 Event: require("./event"),
15420 ProgressEvent: require("./progress-event"),
15421 CustomEvent: require("./custom-event"),
15422 EventTarget: require("./event-target")
15423};
15424
15425},{"./custom-event":135,"./event":137,"./event-target":136,"./progress-event":139}],139:[function(require,module,exports){
15426"use strict";
15427
15428var Event = require("./event");
15429
15430function ProgressEvent(type, progressEventRaw, target) {
15431 this.initEvent(type, false, false, target);
15432 this.loaded =
15433 typeof progressEventRaw.loaded === "number"
15434 ? progressEventRaw.loaded
15435 : null;
15436 this.total =
15437 typeof progressEventRaw.total === "number"
15438 ? progressEventRaw.total
15439 : null;
15440 this.lengthComputable = Boolean(progressEventRaw.total);
15441}
15442
15443ProgressEvent.prototype = new Event();
15444
15445ProgressEvent.prototype.constructor = ProgressEvent;
15446
15447module.exports = ProgressEvent;
15448
15449},{"./event":137}],140:[function(require,module,exports){
15450"use strict";
15451
15452var FakeTimers = require("@sinonjs/fake-timers");
15453var fakeServer = require("./index");
15454
15455// eslint-disable-next-line no-empty-function
15456function Server() {}
15457Server.prototype = fakeServer;
15458
15459var fakeServerWithClock = new Server();
15460
15461fakeServerWithClock.addRequest = function addRequest(xhr) {
15462 if (xhr.async) {
15463 if (typeof setTimeout.clock === "object") {
15464 this.clock = setTimeout.clock;
15465 } else {
15466 this.clock = FakeTimers.install();
15467 this.resetClock = true;
15468 }
15469
15470 if (!this.longestTimeout) {
15471 var clockSetTimeout = this.clock.setTimeout;
15472 var clockSetInterval = this.clock.setInterval;
15473 var server = this;
15474
15475 this.clock.setTimeout = function(fn, timeout) {
15476 server.longestTimeout = Math.max(
15477 timeout,
15478 server.longestTimeout || 0
15479 );
15480
15481 return clockSetTimeout.apply(this, arguments);
15482 };
15483
15484 this.clock.setInterval = function(fn, timeout) {
15485 server.longestTimeout = Math.max(
15486 timeout,
15487 server.longestTimeout || 0
15488 );
15489
15490 return clockSetInterval.apply(this, arguments);
15491 };
15492 }
15493 }
15494
15495 return fakeServer.addRequest.call(this, xhr);
15496};
15497
15498fakeServerWithClock.respond = function respond() {
15499 var returnVal = fakeServer.respond.apply(this, arguments);
15500
15501 if (this.clock) {
15502 this.clock.tick(this.longestTimeout || 0);
15503 this.longestTimeout = 0;
15504
15505 if (this.resetClock) {
15506 this.clock.uninstall();
15507 this.resetClock = false;
15508 }
15509 }
15510
15511 return returnVal;
15512};
15513
15514fakeServerWithClock.restore = function restore() {
15515 if (this.clock) {
15516 this.clock.uninstall();
15517 }
15518
15519 return fakeServer.restore.apply(this, arguments);
15520};
15521
15522module.exports = fakeServerWithClock;
15523
15524},{"./index":141,"@sinonjs/fake-timers":78}],141:[function(require,module,exports){
15525"use strict";
15526
15527var fakeXhr = require("../fake-xhr");
15528var push = [].push;
15529var log = require("./log");
15530var configureLogError = require("../configure-logger");
15531var pathToRegexp = require("path-to-regexp");
15532
15533var supportsArrayBuffer = typeof ArrayBuffer !== "undefined";
15534
15535function responseArray(handler) {
15536 var response = handler;
15537
15538 if (Object.prototype.toString.call(handler) !== "[object Array]") {
15539 response = [200, {}, handler];
15540 }
15541
15542 if (typeof response[2] !== "string") {
15543 if (!supportsArrayBuffer) {
15544 throw new TypeError(
15545 `Fake server response body should be a string, but was ${typeof response[2]}`
15546 );
15547 } else if (!(response[2] instanceof ArrayBuffer)) {
15548 throw new TypeError(
15549 `Fake server response body should be a string or ArrayBuffer, but was ${typeof response[2]}`
15550 );
15551 }
15552 }
15553
15554 return response;
15555}
15556
15557function getDefaultWindowLocation() {
15558 var winloc = {
15559 hostname: "localhost",
15560 port: process.env.PORT || 80,
15561 protocol: "http:"
15562 };
15563 winloc.host =
15564 winloc.hostname +
15565 (String(winloc.port) === "80" ? "" : `:${winloc.port}`);
15566 return winloc;
15567}
15568
15569function getWindowLocation() {
15570 if (typeof window === "undefined") {
15571 // Fallback
15572 return getDefaultWindowLocation();
15573 }
15574
15575 if (typeof window.location !== "undefined") {
15576 // Browsers place location on window
15577 return window.location;
15578 }
15579
15580 if (
15581 typeof window.window !== "undefined" &&
15582 typeof window.window.location !== "undefined"
15583 ) {
15584 // React Native on Android places location on window.window
15585 return window.window.location;
15586 }
15587
15588 return getDefaultWindowLocation();
15589}
15590
15591function matchOne(response, reqMethod, reqUrl) {
15592 var rmeth = response.method;
15593 var matchMethod = !rmeth || rmeth.toLowerCase() === reqMethod.toLowerCase();
15594 var url = response.url;
15595 var matchUrl =
15596 !url ||
15597 url === reqUrl ||
15598 (typeof url.test === "function" && url.test(reqUrl)) ||
15599 (typeof url === "function" && url(reqUrl) === true);
15600
15601 return matchMethod && matchUrl;
15602}
15603
15604function match(response, request) {
15605 var wloc = getWindowLocation();
15606
15607 var rCurrLoc = new RegExp(`^${wloc.protocol}//${wloc.host}/`);
15608
15609 var requestUrl = request.url;
15610
15611 if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) {
15612 requestUrl = requestUrl.replace(rCurrLoc, "/");
15613 }
15614
15615 if (matchOne(response, this.getHTTPMethod(request), requestUrl)) {
15616 if (typeof response.response === "function") {
15617 var ru = response.url;
15618 var args = [request].concat(
15619 ru && typeof ru.exec === "function"
15620 ? ru.exec(requestUrl).slice(1)
15621 : []
15622 );
15623 return response.response.apply(response, args);
15624 }
15625
15626 return true;
15627 }
15628
15629 return false;
15630}
15631
15632function incrementRequestCount() {
15633 var count = ++this.requestCount;
15634
15635 this.requested = true;
15636
15637 this.requestedOnce = count === 1;
15638 this.requestedTwice = count === 2;
15639 this.requestedThrice = count === 3;
15640
15641 this.firstRequest = this.getRequest(0);
15642 this.secondRequest = this.getRequest(1);
15643 this.thirdRequest = this.getRequest(2);
15644
15645 this.lastRequest = this.getRequest(count - 1);
15646}
15647
15648var fakeServer = {
15649 create: function(config) {
15650 var server = Object.create(this);
15651 server.configure(config);
15652 this.xhr = fakeXhr.useFakeXMLHttpRequest();
15653 server.requests = [];
15654 server.requestCount = 0;
15655 server.queue = [];
15656 server.responses = [];
15657
15658 this.xhr.onCreate = function(xhrObj) {
15659 xhrObj.unsafeHeadersEnabled = function() {
15660 return !(server.unsafeHeadersEnabled === false);
15661 };
15662 server.addRequest(xhrObj);
15663 };
15664
15665 return server;
15666 },
15667
15668 configure: function(config) {
15669 var self = this;
15670 var allowlist = {
15671 autoRespond: true,
15672 autoRespondAfter: true,
15673 respondImmediately: true,
15674 fakeHTTPMethods: true,
15675 logger: true,
15676 unsafeHeadersEnabled: true
15677 };
15678
15679 // eslint-disable-next-line no-param-reassign
15680 config = config || {};
15681
15682 Object.keys(config).forEach(function(setting) {
15683 if (setting in allowlist) {
15684 self[setting] = config[setting];
15685 }
15686 });
15687
15688 self.logError = configureLogError(config);
15689 },
15690
15691 addRequest: function addRequest(xhrObj) {
15692 var server = this;
15693 push.call(this.requests, xhrObj);
15694
15695 incrementRequestCount.call(this);
15696
15697 xhrObj.onSend = function() {
15698 server.handleRequest(this);
15699
15700 if (server.respondImmediately) {
15701 server.respond();
15702 } else if (server.autoRespond && !server.responding) {
15703 setTimeout(function() {
15704 server.responding = false;
15705 server.respond();
15706 }, server.autoRespondAfter || 10);
15707
15708 server.responding = true;
15709 }
15710 };
15711 },
15712
15713 getHTTPMethod: function getHTTPMethod(request) {
15714 if (this.fakeHTTPMethods && /post/i.test(request.method)) {
15715 var matches = (request.requestBody || "").match(
15716 /_method=([^\b;]+)/
15717 );
15718 return matches ? matches[1] : request.method;
15719 }
15720
15721 return request.method;
15722 },
15723
15724 handleRequest: function handleRequest(xhr) {
15725 if (xhr.async) {
15726 push.call(this.queue, xhr);
15727 } else {
15728 this.processRequest(xhr);
15729 }
15730 },
15731
15732 logger: function() {
15733 // no-op; override via configure()
15734 },
15735
15736 logError: configureLogError({}),
15737
15738 log: log,
15739
15740 respondWith: function respondWith(method, url, body) {
15741 if (arguments.length === 1 && typeof method !== "function") {
15742 this.response = responseArray(method);
15743 return;
15744 }
15745
15746 if (arguments.length === 1) {
15747 // eslint-disable-next-line no-param-reassign
15748 body = method;
15749 // eslint-disable-next-line no-param-reassign
15750 url = method = null;
15751 }
15752
15753 if (arguments.length === 2) {
15754 // eslint-disable-next-line no-param-reassign
15755 body = url;
15756 // eslint-disable-next-line no-param-reassign
15757 url = method;
15758 // eslint-disable-next-line no-param-reassign
15759 method = null;
15760 }
15761
15762 // Escape port number to prevent "named" parameters in 'path-to-regexp' module
15763 if (typeof url === "string" && url !== "" && /:[0-9]+\//.test(url)) {
15764 var m = url.match(/^(https?:\/\/.*?):([0-9]+\/.*)$/);
15765 // eslint-disable-next-line no-param-reassign
15766 url = `${m[1]}\\:${m[2]}`;
15767 }
15768
15769 push.call(this.responses, {
15770 method: method,
15771 url:
15772 typeof url === "string" && url !== "" ? pathToRegexp(url) : url,
15773 response: typeof body === "function" ? body : responseArray(body)
15774 });
15775 },
15776
15777 respond: function respond() {
15778 if (arguments.length > 0) {
15779 this.respondWith.apply(this, arguments);
15780 }
15781
15782 var queue = this.queue || [];
15783 var requests = queue.splice(0, queue.length);
15784 var self = this;
15785
15786 requests.forEach(function(request) {
15787 self.processRequest(request);
15788 });
15789 },
15790
15791 respondAll: function respondAll() {
15792 if (this.respondImmediately) {
15793 return;
15794 }
15795
15796 this.queue = this.requests.slice(0);
15797
15798 var request;
15799 while ((request = this.queue.shift())) {
15800 this.processRequest(request);
15801 }
15802 },
15803
15804 processRequest: function processRequest(request) {
15805 try {
15806 if (request.aborted) {
15807 return;
15808 }
15809
15810 var response = this.response || [404, {}, ""];
15811
15812 if (this.responses) {
15813 for (var l = this.responses.length, i = l - 1; i >= 0; i--) {
15814 if (match.call(this, this.responses[i], request)) {
15815 response = this.responses[i].response;
15816 break;
15817 }
15818 }
15819 }
15820
15821 if (request.readyState !== 4) {
15822 this.log(response, request);
15823
15824 request.respond(response[0], response[1], response[2]);
15825 }
15826 } catch (e) {
15827 this.logError("Fake server request processing", e);
15828 }
15829 },
15830
15831 restore: function restore() {
15832 return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments);
15833 },
15834
15835 getRequest: function getRequest(index) {
15836 return this.requests[index] || null;
15837 },
15838
15839 reset: function reset() {
15840 this.resetBehavior();
15841 this.resetHistory();
15842 },
15843
15844 resetBehavior: function resetBehavior() {
15845 this.responses.length = this.queue.length = 0;
15846 },
15847
15848 resetHistory: function resetHistory() {
15849 this.requests.length = this.requestCount = 0;
15850
15851 this.requestedOnce = this.requestedTwice = this.requestedThrice = this.requested = false;
15852
15853 this.firstRequest = this.secondRequest = this.thirdRequest = this.lastRequest = null;
15854 }
15855};
15856
15857module.exports = fakeServer;
15858
15859},{"../configure-logger":134,"../fake-xhr":144,"./log":142,"path-to-regexp":165}],142:[function(require,module,exports){
15860"use strict";
15861var inspect = require("util").inspect;
15862
15863function log(response, request) {
15864 var str;
15865
15866 str = `Request:\n${inspect(request)}\n\n`;
15867 str += `Response:\n${inspect(response)}\n\n`;
15868
15869 /* istanbul ignore else: when this.logger is not a function, it can't be called */
15870 if (typeof this.logger === "function") {
15871 this.logger(str);
15872 }
15873}
15874
15875module.exports = log;
15876
15877},{"util":130}],143:[function(require,module,exports){
15878"use strict";
15879
15880exports.isSupported = (function() {
15881 try {
15882 return Boolean(new Blob());
15883 } catch (e) {
15884 return false;
15885 }
15886})();
15887
15888},{}],144:[function(require,module,exports){
15889"use strict";
15890
15891var GlobalTextEncoder =
15892 typeof TextEncoder !== "undefined"
15893 ? TextEncoder
15894 : require("@sinonjs/text-encoding").TextEncoder;
15895var globalObject = require("@sinonjs/commons").global;
15896var configureLogError = require("../configure-logger");
15897var sinonEvent = require("../event");
15898var extend = require("just-extend");
15899
15900var supportsProgress = typeof ProgressEvent !== "undefined";
15901var supportsCustomEvent = typeof CustomEvent !== "undefined";
15902var supportsFormData = typeof FormData !== "undefined";
15903var supportsArrayBuffer = typeof ArrayBuffer !== "undefined";
15904var supportsBlob = require("./blob").isSupported;
15905
15906function getWorkingXHR(globalScope) {
15907 var supportsXHR = typeof globalScope.XMLHttpRequest !== "undefined";
15908 if (supportsXHR) {
15909 return globalScope.XMLHttpRequest;
15910 }
15911
15912 var supportsActiveX = typeof globalScope.ActiveXObject !== "undefined";
15913 if (supportsActiveX) {
15914 return function() {
15915 return new globalScope.ActiveXObject("MSXML2.XMLHTTP.3.0");
15916 };
15917 }
15918
15919 return false;
15920}
15921
15922// Ref: https://fetch.spec.whatwg.org/#forbidden-header-name
15923var unsafeHeaders = {
15924 "Accept-Charset": true,
15925 "Access-Control-Request-Headers": true,
15926 "Access-Control-Request-Method": true,
15927 "Accept-Encoding": true,
15928 Connection: true,
15929 "Content-Length": true,
15930 Cookie: true,
15931 Cookie2: true,
15932 "Content-Transfer-Encoding": true,
15933 Date: true,
15934 DNT: true,
15935 Expect: true,
15936 Host: true,
15937 "Keep-Alive": true,
15938 Origin: true,
15939 Referer: true,
15940 TE: true,
15941 Trailer: true,
15942 "Transfer-Encoding": true,
15943 Upgrade: true,
15944 "User-Agent": true,
15945 Via: true
15946};
15947
15948function EventTargetHandler() {
15949 var self = this;
15950 var events = [
15951 "loadstart",
15952 "progress",
15953 "abort",
15954 "error",
15955 "load",
15956 "timeout",
15957 "loadend"
15958 ];
15959
15960 function addEventListener(eventName) {
15961 self.addEventListener(eventName, function(event) {
15962 var listener = self[`on${eventName}`];
15963
15964 if (listener && typeof listener === "function") {
15965 listener.call(this, event);
15966 }
15967 });
15968 }
15969
15970 events.forEach(addEventListener);
15971}
15972
15973EventTargetHandler.prototype = sinonEvent.EventTarget;
15974
15975function normalizeHeaderValue(value) {
15976 // Ref: https://fetch.spec.whatwg.org/#http-whitespace-bytes
15977 /*eslint no-control-regex: "off"*/
15978 return value.replace(/^[\x09\x0A\x0D\x20]+|[\x09\x0A\x0D\x20]+$/g, "");
15979}
15980
15981function getHeader(headers, header) {
15982 var foundHeader = Object.keys(headers).filter(function(h) {
15983 return h.toLowerCase() === header.toLowerCase();
15984 });
15985
15986 return foundHeader[0] || null;
15987}
15988
15989function excludeSetCookie2Header(header) {
15990 return !/^Set-Cookie2?$/i.test(header);
15991}
15992
15993function verifyResponseBodyType(body, responseType) {
15994 var error = null;
15995 var isString = typeof body === "string";
15996
15997 if (responseType === "arraybuffer") {
15998 if (!isString && !(body instanceof ArrayBuffer)) {
15999 error = new Error(
16000 `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string or ArrayBuffer.`
16001 );
16002 error.name = "InvalidBodyException";
16003 }
16004 } else if (responseType === "blob") {
16005 if (
16006 !isString &&
16007 !(body instanceof ArrayBuffer) &&
16008 supportsBlob &&
16009 !(body instanceof Blob)
16010 ) {
16011 error = new Error(
16012 `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string, ArrayBuffer, or Blob.`
16013 );
16014 error.name = "InvalidBodyException";
16015 }
16016 } else if (!isString) {
16017 error = new Error(
16018 `Attempted to respond to fake XMLHttpRequest with ${body}, which is not a string.`
16019 );
16020 error.name = "InvalidBodyException";
16021 }
16022
16023 if (error) {
16024 throw error;
16025 }
16026}
16027
16028function convertToArrayBuffer(body, encoding) {
16029 if (body instanceof ArrayBuffer) {
16030 return body;
16031 }
16032
16033 return new GlobalTextEncoder(encoding || "utf-8").encode(body).buffer;
16034}
16035
16036function isXmlContentType(contentType) {
16037 return (
16038 !contentType ||
16039 /(text\/xml)|(application\/xml)|(\+xml)/.test(contentType)
16040 );
16041}
16042
16043function clearResponse(xhr) {
16044 if (xhr.responseType === "" || xhr.responseType === "text") {
16045 xhr.response = xhr.responseText = "";
16046 } else {
16047 xhr.response = xhr.responseText = null;
16048 }
16049 xhr.responseXML = null;
16050}
16051
16052function fakeXMLHttpRequestFor(globalScope) {
16053 var isReactNative =
16054 globalScope.navigator &&
16055 globalScope.navigator.product === "ReactNative";
16056 var sinonXhr = { XMLHttpRequest: globalScope.XMLHttpRequest };
16057 sinonXhr.GlobalXMLHttpRequest = globalScope.XMLHttpRequest;
16058 sinonXhr.GlobalActiveXObject = globalScope.ActiveXObject;
16059 sinonXhr.supportsActiveX =
16060 typeof sinonXhr.GlobalActiveXObject !== "undefined";
16061 sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest !== "undefined";
16062 sinonXhr.workingXHR = getWorkingXHR(globalScope);
16063 sinonXhr.supportsTimeout =
16064 sinonXhr.supportsXHR &&
16065 "timeout" in new sinonXhr.GlobalXMLHttpRequest();
16066 sinonXhr.supportsCORS =
16067 isReactNative ||
16068 (sinonXhr.supportsXHR &&
16069 "withCredentials" in new sinonXhr.GlobalXMLHttpRequest());
16070
16071 // Note that for FakeXMLHttpRequest to work pre ES5
16072 // we lose some of the alignment with the spec.
16073 // To ensure as close a match as possible,
16074 // set responseType before calling open, send or respond;
16075 function FakeXMLHttpRequest(config) {
16076 EventTargetHandler.call(this);
16077 this.readyState = FakeXMLHttpRequest.UNSENT;
16078 this.requestHeaders = {};
16079 this.requestBody = null;
16080 this.status = 0;
16081 this.statusText = "";
16082 this.upload = new EventTargetHandler();
16083 this.responseType = "";
16084 this.response = "";
16085 this.logError = configureLogError(config);
16086
16087 if (sinonXhr.supportsTimeout) {
16088 this.timeout = 0;
16089 }
16090
16091 if (sinonXhr.supportsCORS) {
16092 this.withCredentials = false;
16093 }
16094
16095 if (typeof FakeXMLHttpRequest.onCreate === "function") {
16096 FakeXMLHttpRequest.onCreate(this);
16097 }
16098 }
16099
16100 function verifyState(xhr) {
16101 if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
16102 throw new Error("INVALID_STATE_ERR");
16103 }
16104
16105 if (xhr.sendFlag) {
16106 throw new Error("INVALID_STATE_ERR");
16107 }
16108 }
16109
16110 // largest arity in XHR is 5 - XHR#open
16111 var apply = function(obj, method, args) {
16112 switch (args.length) {
16113 case 0:
16114 return obj[method]();
16115 case 1:
16116 return obj[method](args[0]);
16117 case 2:
16118 return obj[method](args[0], args[1]);
16119 case 3:
16120 return obj[method](args[0], args[1], args[2]);
16121 case 4:
16122 return obj[method](args[0], args[1], args[2], args[3]);
16123 case 5:
16124 return obj[method](args[0], args[1], args[2], args[3], args[4]);
16125 default:
16126 throw new Error("Unhandled case");
16127 }
16128 };
16129
16130 FakeXMLHttpRequest.filters = [];
16131 FakeXMLHttpRequest.addFilter = function addFilter(fn) {
16132 this.filters.push(fn);
16133 };
16134 FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) {
16135 var xhr = new sinonXhr.workingXHR(); // eslint-disable-line new-cap
16136
16137 [
16138 "open",
16139 "setRequestHeader",
16140 "abort",
16141 "getResponseHeader",
16142 "getAllResponseHeaders",
16143 "addEventListener",
16144 "overrideMimeType",
16145 "removeEventListener"
16146 ].forEach(function(method) {
16147 fakeXhr[method] = function() {
16148 return apply(xhr, method, arguments);
16149 };
16150 });
16151
16152 fakeXhr.send = function() {
16153 // Ref: https://xhr.spec.whatwg.org/#the-responsetype-attribute
16154 if (xhr.responseType !== fakeXhr.responseType) {
16155 xhr.responseType = fakeXhr.responseType;
16156 }
16157 return apply(xhr, "send", arguments);
16158 };
16159
16160 var copyAttrs = function(args) {
16161 args.forEach(function(attr) {
16162 fakeXhr[attr] = xhr[attr];
16163 });
16164 };
16165
16166 var stateChangeStart = function() {
16167 fakeXhr.readyState = xhr.readyState;
16168 if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) {
16169 copyAttrs(["status", "statusText"]);
16170 }
16171 if (xhr.readyState >= FakeXMLHttpRequest.LOADING) {
16172 copyAttrs(["response"]);
16173 if (xhr.responseType === "" || xhr.responseType === "text") {
16174 copyAttrs(["responseText"]);
16175 }
16176 }
16177 if (
16178 xhr.readyState === FakeXMLHttpRequest.DONE &&
16179 (xhr.responseType === "" || xhr.responseType === "document")
16180 ) {
16181 copyAttrs(["responseXML"]);
16182 }
16183 };
16184
16185 var stateChangeEnd = function() {
16186 if (fakeXhr.onreadystatechange) {
16187 // eslint-disable-next-line no-useless-call
16188 fakeXhr.onreadystatechange.call(fakeXhr, {
16189 target: fakeXhr,
16190 currentTarget: fakeXhr
16191 });
16192 }
16193 };
16194
16195 var stateChange = function stateChange() {
16196 stateChangeStart();
16197 stateChangeEnd();
16198 };
16199
16200 if (xhr.addEventListener) {
16201 xhr.addEventListener("readystatechange", stateChangeStart);
16202
16203 Object.keys(fakeXhr.eventListeners).forEach(function(event) {
16204 /*eslint-disable no-loop-func*/
16205 fakeXhr.eventListeners[event].forEach(function(handler) {
16206 xhr.addEventListener(event, handler.listener, {
16207 capture: handler.capture,
16208 once: handler.once
16209 });
16210 });
16211 /*eslint-enable no-loop-func*/
16212 });
16213
16214 xhr.addEventListener("readystatechange", stateChangeEnd);
16215 } else {
16216 xhr.onreadystatechange = stateChange;
16217 }
16218 apply(xhr, "open", xhrArgs);
16219 };
16220 FakeXMLHttpRequest.useFilters = false;
16221
16222 function verifyRequestOpened(xhr) {
16223 if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
16224 const errorMessage =
16225 xhr.readyState === FakeXMLHttpRequest.UNSENT
16226 ? "INVALID_STATE_ERR - you might be trying to set the request state for a request that has already been aborted, it is recommended to check 'readyState' first..."
16227 : `INVALID_STATE_ERR - ${xhr.readyState}`;
16228 throw new Error(errorMessage);
16229 }
16230 }
16231
16232 function verifyRequestSent(xhr) {
16233 if (xhr.readyState === FakeXMLHttpRequest.DONE) {
16234 throw new Error("Request done");
16235 }
16236 }
16237
16238 function verifyHeadersReceived(xhr) {
16239 if (
16240 xhr.async &&
16241 xhr.readyState !== FakeXMLHttpRequest.HEADERS_RECEIVED
16242 ) {
16243 throw new Error("No headers received");
16244 }
16245 }
16246
16247 function convertResponseBody(responseType, contentType, body) {
16248 if (responseType === "" || responseType === "text") {
16249 return body;
16250 } else if (supportsArrayBuffer && responseType === "arraybuffer") {
16251 return convertToArrayBuffer(body);
16252 } else if (responseType === "json") {
16253 try {
16254 return JSON.parse(body);
16255 } catch (e) {
16256 // Return parsing failure as null
16257 return null;
16258 }
16259 } else if (supportsBlob && responseType === "blob") {
16260 if (body instanceof Blob) {
16261 return body;
16262 }
16263
16264 var blobOptions = {};
16265 if (contentType) {
16266 blobOptions.type = contentType;
16267 }
16268 return new Blob([convertToArrayBuffer(body)], blobOptions);
16269 } else if (responseType === "document") {
16270 if (isXmlContentType(contentType)) {
16271 return FakeXMLHttpRequest.parseXML(body);
16272 }
16273 return null;
16274 }
16275 throw new Error(`Invalid responseType ${responseType}`);
16276 }
16277
16278 /**
16279 * Steps to follow when there is an error, according to:
16280 * https://xhr.spec.whatwg.org/#request-error-steps
16281 */
16282 function requestErrorSteps(xhr) {
16283 clearResponse(xhr);
16284 xhr.errorFlag = true;
16285 xhr.requestHeaders = {};
16286 xhr.responseHeaders = {};
16287
16288 if (
16289 xhr.readyState !== FakeXMLHttpRequest.UNSENT &&
16290 xhr.sendFlag &&
16291 xhr.readyState !== FakeXMLHttpRequest.DONE
16292 ) {
16293 xhr.readyStateChange(FakeXMLHttpRequest.DONE);
16294 xhr.sendFlag = false;
16295 }
16296 }
16297
16298 FakeXMLHttpRequest.parseXML = function parseXML(text) {
16299 // Treat empty string as parsing failure
16300 if (text !== "") {
16301 try {
16302 if (typeof DOMParser !== "undefined") {
16303 var parser = new DOMParser();
16304 var parsererrorNS = "";
16305
16306 try {
16307 var parsererrors = parser
16308 .parseFromString("INVALID", "text/xml")
16309 .getElementsByTagName("parsererror");
16310 if (parsererrors.length) {
16311 parsererrorNS = parsererrors[0].namespaceURI;
16312 }
16313 } catch (e) {
16314 // passing invalid XML makes IE11 throw
16315 // so no namespace needs to be determined
16316 }
16317
16318 var result;
16319 try {
16320 result = parser.parseFromString(text, "text/xml");
16321 } catch (err) {
16322 return null;
16323 }
16324
16325 return result.getElementsByTagNameNS(
16326 parsererrorNS,
16327 "parsererror"
16328 ).length
16329 ? null
16330 : result;
16331 }
16332 var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
16333 xmlDoc.async = "false";
16334 xmlDoc.loadXML(text);
16335 return xmlDoc.parseError.errorCode !== 0 ? null : xmlDoc;
16336 } catch (e) {
16337 // Unable to parse XML - no biggie
16338 }
16339 }
16340
16341 return null;
16342 };
16343
16344 FakeXMLHttpRequest.statusCodes = {
16345 100: "Continue",
16346 101: "Switching Protocols",
16347 200: "OK",
16348 201: "Created",
16349 202: "Accepted",
16350 203: "Non-Authoritative Information",
16351 204: "No Content",
16352 205: "Reset Content",
16353 206: "Partial Content",
16354 207: "Multi-Status",
16355 300: "Multiple Choice",
16356 301: "Moved Permanently",
16357 302: "Found",
16358 303: "See Other",
16359 304: "Not Modified",
16360 305: "Use Proxy",
16361 307: "Temporary Redirect",
16362 400: "Bad Request",
16363 401: "Unauthorized",
16364 402: "Payment Required",
16365 403: "Forbidden",
16366 404: "Not Found",
16367 405: "Method Not Allowed",
16368 406: "Not Acceptable",
16369 407: "Proxy Authentication Required",
16370 408: "Request Timeout",
16371 409: "Conflict",
16372 410: "Gone",
16373 411: "Length Required",
16374 412: "Precondition Failed",
16375 413: "Request Entity Too Large",
16376 414: "Request-URI Too Long",
16377 415: "Unsupported Media Type",
16378 416: "Requested Range Not Satisfiable",
16379 417: "Expectation Failed",
16380 422: "Unprocessable Entity",
16381 500: "Internal Server Error",
16382 501: "Not Implemented",
16383 502: "Bad Gateway",
16384 503: "Service Unavailable",
16385 504: "Gateway Timeout",
16386 505: "HTTP Version Not Supported"
16387 };
16388
16389 extend(FakeXMLHttpRequest.prototype, sinonEvent.EventTarget, {
16390 async: true,
16391
16392 open: function open(method, url, async, username, password) {
16393 this.method = method;
16394 this.url = url;
16395 this.async = typeof async === "boolean" ? async : true;
16396 this.username = username;
16397 this.password = password;
16398 clearResponse(this);
16399 this.requestHeaders = {};
16400 this.sendFlag = false;
16401
16402 if (FakeXMLHttpRequest.useFilters === true) {
16403 var xhrArgs = arguments;
16404 var defake = FakeXMLHttpRequest.filters.some(function(filter) {
16405 return filter.apply(this, xhrArgs);
16406 });
16407 if (defake) {
16408 FakeXMLHttpRequest.defake(this, arguments);
16409 return;
16410 }
16411 }
16412 this.readyStateChange(FakeXMLHttpRequest.OPENED);
16413 },
16414
16415 readyStateChange: function readyStateChange(state) {
16416 this.readyState = state;
16417
16418 var readyStateChangeEvent = new sinonEvent.Event(
16419 "readystatechange",
16420 false,
16421 false,
16422 this
16423 );
16424 if (typeof this.onreadystatechange === "function") {
16425 try {
16426 this.onreadystatechange(readyStateChangeEvent);
16427 } catch (e) {
16428 this.logError("Fake XHR onreadystatechange handler", e);
16429 }
16430 }
16431
16432 if (this.readyState !== FakeXMLHttpRequest.DONE) {
16433 this.dispatchEvent(readyStateChangeEvent);
16434 } else {
16435 var event, progress;
16436
16437 if (this.timedOut || this.aborted || this.status === 0) {
16438 progress = { loaded: 0, total: 0 };
16439 event =
16440 (this.timedOut && "timeout") ||
16441 (this.aborted && "abort") ||
16442 "error";
16443 } else {
16444 progress = { loaded: 100, total: 100 };
16445 event = "load";
16446 }
16447
16448 if (supportsProgress) {
16449 this.upload.dispatchEvent(
16450 new sinonEvent.ProgressEvent("progress", progress, this)
16451 );
16452 this.upload.dispatchEvent(
16453 new sinonEvent.ProgressEvent(event, progress, this)
16454 );
16455 this.upload.dispatchEvent(
16456 new sinonEvent.ProgressEvent("loadend", progress, this)
16457 );
16458 }
16459
16460 this.dispatchEvent(
16461 new sinonEvent.ProgressEvent("progress", progress, this)
16462 );
16463 this.dispatchEvent(
16464 new sinonEvent.ProgressEvent(event, progress, this)
16465 );
16466 this.dispatchEvent(readyStateChangeEvent);
16467 this.dispatchEvent(
16468 new sinonEvent.ProgressEvent("loadend", progress, this)
16469 );
16470 }
16471 },
16472
16473 // Ref https://xhr.spec.whatwg.org/#the-setrequestheader()-method
16474 setRequestHeader: function setRequestHeader(header, value) {
16475 if (typeof value !== "string") {
16476 throw new TypeError(
16477 `By RFC7230, section 3.2.4, header values should be strings. Got ${typeof value}`
16478 );
16479 }
16480 verifyState(this);
16481
16482 var checkUnsafeHeaders = true;
16483 if (typeof this.unsafeHeadersEnabled === "function") {
16484 checkUnsafeHeaders = this.unsafeHeadersEnabled();
16485 }
16486
16487 if (
16488 checkUnsafeHeaders &&
16489 (getHeader(unsafeHeaders, header) !== null ||
16490 /^(Sec-|Proxy-)/i.test(header))
16491 ) {
16492 throw new Error(
16493 // eslint-disable-next-line quotes
16494 `Refused to set unsafe header "${header}"`
16495 );
16496 }
16497
16498 // eslint-disable-next-line no-param-reassign
16499 value = normalizeHeaderValue(value);
16500
16501 var existingHeader = getHeader(this.requestHeaders, header);
16502 if (existingHeader) {
16503 this.requestHeaders[existingHeader] += `, ${value}`;
16504 } else {
16505 this.requestHeaders[header] = value;
16506 }
16507 },
16508
16509 setStatus: function setStatus(status) {
16510 var sanitizedStatus = typeof status === "number" ? status : 200;
16511
16512 verifyRequestOpened(this);
16513 this.status = sanitizedStatus;
16514 this.statusText = FakeXMLHttpRequest.statusCodes[sanitizedStatus];
16515 },
16516
16517 // Helps testing
16518 setResponseHeaders: function setResponseHeaders(headers) {
16519 verifyRequestOpened(this);
16520
16521 var responseHeaders = (this.responseHeaders = {});
16522
16523 Object.keys(headers).forEach(function(header) {
16524 responseHeaders[header] = headers[header];
16525 });
16526
16527 if (this.async) {
16528 this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED);
16529 } else {
16530 this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED;
16531 }
16532 },
16533
16534 // Currently treats ALL data as a DOMString (i.e. no Document)
16535 send: function send(data) {
16536 verifyState(this);
16537
16538 if (!/^(head)$/i.test(this.method)) {
16539 var contentType = getHeader(
16540 this.requestHeaders,
16541 "Content-Type"
16542 );
16543 if (this.requestHeaders[contentType]) {
16544 var value = this.requestHeaders[contentType].split(";");
16545 this.requestHeaders[
16546 contentType
16547 ] = `${value[0]};charset=utf-8`;
16548 } else if (supportsFormData && !(data instanceof FormData)) {
16549 this.requestHeaders["Content-Type"] =
16550 "text/plain;charset=utf-8";
16551 }
16552
16553 this.requestBody = data;
16554 }
16555
16556 this.errorFlag = false;
16557 this.sendFlag = this.async;
16558 clearResponse(this);
16559
16560 if (typeof this.onSend === "function") {
16561 this.onSend(this);
16562 }
16563
16564 // Only listen if setInterval and Date are a stubbed.
16565 if (
16566 sinonXhr.supportsTimeout &&
16567 typeof setInterval.clock === "object" &&
16568 typeof Date.clock === "object"
16569 ) {
16570 var initiatedTime = Date.now();
16571 var self = this;
16572
16573 // Listen to any possible tick by fake timers and check to see if timeout has
16574 // been exceeded. It's important to note that timeout can be changed while a request
16575 // is in flight, so we must check anytime the end user forces a clock tick to make
16576 // sure timeout hasn't changed.
16577 // https://xhr.spec.whatwg.org/#dfnReturnLink-2
16578 var clearIntervalId = setInterval(function() {
16579 // Check if the readyState has been reset or is done. If this is the case, there
16580 // should be no timeout. This will also prevent aborted requests and
16581 // fakeServerWithClock from triggering unnecessary responses.
16582 if (
16583 self.readyState === FakeXMLHttpRequest.UNSENT ||
16584 self.readyState === FakeXMLHttpRequest.DONE
16585 ) {
16586 clearInterval(clearIntervalId);
16587 } else if (
16588 typeof self.timeout === "number" &&
16589 self.timeout > 0
16590 ) {
16591 if (Date.now() >= initiatedTime + self.timeout) {
16592 self.triggerTimeout();
16593 clearInterval(clearIntervalId);
16594 }
16595 }
16596 }, 1);
16597 }
16598
16599 this.dispatchEvent(
16600 new sinonEvent.Event("loadstart", false, false, this)
16601 );
16602 },
16603
16604 abort: function abort() {
16605 this.aborted = true;
16606 requestErrorSteps(this);
16607 this.readyState = FakeXMLHttpRequest.UNSENT;
16608 },
16609
16610 error: function() {
16611 clearResponse(this);
16612 this.errorFlag = true;
16613 this.requestHeaders = {};
16614 this.responseHeaders = {};
16615
16616 this.readyStateChange(FakeXMLHttpRequest.DONE);
16617 },
16618
16619 triggerTimeout: function triggerTimeout() {
16620 if (sinonXhr.supportsTimeout) {
16621 this.timedOut = true;
16622 requestErrorSteps(this);
16623 }
16624 },
16625
16626 getResponseHeader: function getResponseHeader(header) {
16627 if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
16628 return null;
16629 }
16630
16631 if (/^Set-Cookie2?$/i.test(header)) {
16632 return null;
16633 }
16634
16635 // eslint-disable-next-line no-param-reassign
16636 header = getHeader(this.responseHeaders, header);
16637
16638 return this.responseHeaders[header] || null;
16639 },
16640
16641 getAllResponseHeaders: function getAllResponseHeaders() {
16642 if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
16643 return "";
16644 }
16645
16646 var responseHeaders = this.responseHeaders;
16647 var headers = Object.keys(responseHeaders)
16648 .filter(excludeSetCookie2Header)
16649 .reduce(function(prev, header) {
16650 var value = responseHeaders[header];
16651
16652 return `${prev}${header}: ${value}\r\n`;
16653 }, "");
16654
16655 return headers;
16656 },
16657
16658 setResponseBody: function setResponseBody(body) {
16659 verifyRequestSent(this);
16660 verifyHeadersReceived(this);
16661 verifyResponseBodyType(body, this.responseType);
16662 var contentType =
16663 this.overriddenMimeType ||
16664 this.getResponseHeader("Content-Type");
16665
16666 var isTextResponse =
16667 this.responseType === "" || this.responseType === "text";
16668 clearResponse(this);
16669 if (this.async) {
16670 var chunkSize = this.chunkSize || 10;
16671 var index = 0;
16672
16673 do {
16674 this.readyStateChange(FakeXMLHttpRequest.LOADING);
16675
16676 if (isTextResponse) {
16677 this.responseText = this.response += body.substring(
16678 index,
16679 index + chunkSize
16680 );
16681 }
16682 index += chunkSize;
16683 } while (index < body.length);
16684 }
16685
16686 this.response = convertResponseBody(
16687 this.responseType,
16688 contentType,
16689 body
16690 );
16691 if (isTextResponse) {
16692 this.responseText = this.response;
16693 }
16694
16695 if (this.responseType === "document") {
16696 this.responseXML = this.response;
16697 } else if (
16698 this.responseType === "" &&
16699 isXmlContentType(contentType)
16700 ) {
16701 this.responseXML = FakeXMLHttpRequest.parseXML(
16702 this.responseText
16703 );
16704 }
16705 this.readyStateChange(FakeXMLHttpRequest.DONE);
16706 },
16707
16708 respond: function respond(status, headers, body) {
16709 this.responseURL = this.url;
16710
16711 this.setStatus(status);
16712 this.setResponseHeaders(headers || {});
16713 this.setResponseBody(body || "");
16714 },
16715
16716 uploadProgress: function uploadProgress(progressEventRaw) {
16717 if (supportsProgress) {
16718 this.upload.dispatchEvent(
16719 new sinonEvent.ProgressEvent(
16720 "progress",
16721 progressEventRaw,
16722 this.upload
16723 )
16724 );
16725 }
16726 },
16727
16728 downloadProgress: function downloadProgress(progressEventRaw) {
16729 if (supportsProgress) {
16730 this.dispatchEvent(
16731 new sinonEvent.ProgressEvent(
16732 "progress",
16733 progressEventRaw,
16734 this
16735 )
16736 );
16737 }
16738 },
16739
16740 uploadError: function uploadError(error) {
16741 if (supportsCustomEvent) {
16742 this.upload.dispatchEvent(
16743 new sinonEvent.CustomEvent("error", { detail: error })
16744 );
16745 }
16746 },
16747
16748 overrideMimeType: function overrideMimeType(type) {
16749 if (this.readyState >= FakeXMLHttpRequest.LOADING) {
16750 throw new Error("INVALID_STATE_ERR");
16751 }
16752 this.overriddenMimeType = type;
16753 }
16754 });
16755
16756 var states = {
16757 UNSENT: 0,
16758 OPENED: 1,
16759 HEADERS_RECEIVED: 2,
16760 LOADING: 3,
16761 DONE: 4
16762 };
16763
16764 extend(FakeXMLHttpRequest, states);
16765 extend(FakeXMLHttpRequest.prototype, states);
16766
16767 function useFakeXMLHttpRequest() {
16768 FakeXMLHttpRequest.restore = function restore(keepOnCreate) {
16769 if (sinonXhr.supportsXHR) {
16770 globalScope.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest;
16771 }
16772
16773 if (sinonXhr.supportsActiveX) {
16774 globalScope.ActiveXObject = sinonXhr.GlobalActiveXObject;
16775 }
16776
16777 delete FakeXMLHttpRequest.restore;
16778
16779 if (keepOnCreate !== true) {
16780 delete FakeXMLHttpRequest.onCreate;
16781 }
16782 };
16783 if (sinonXhr.supportsXHR) {
16784 globalScope.XMLHttpRequest = FakeXMLHttpRequest;
16785 }
16786
16787 if (sinonXhr.supportsActiveX) {
16788 globalScope.ActiveXObject = function ActiveXObject(objId) {
16789 if (
16790 objId === "Microsoft.XMLHTTP" ||
16791 /^Msxml2\.XMLHTTP/i.test(objId)
16792 ) {
16793 return new FakeXMLHttpRequest();
16794 }
16795
16796 return new sinonXhr.GlobalActiveXObject(objId);
16797 };
16798 }
16799
16800 return FakeXMLHttpRequest;
16801 }
16802
16803 return {
16804 xhr: sinonXhr,
16805 FakeXMLHttpRequest: FakeXMLHttpRequest,
16806 useFakeXMLHttpRequest: useFakeXMLHttpRequest
16807 };
16808}
16809
16810module.exports = extend(fakeXMLHttpRequestFor(globalObject), {
16811 fakeXMLHttpRequestFor: fakeXMLHttpRequestFor
16812});
16813
16814},{"../configure-logger":134,"../event":138,"./blob":143,"@sinonjs/commons":152,"@sinonjs/text-encoding":125,"just-extend":132}],145:[function(require,module,exports){
16815"use strict";
16816
16817module.exports = {
16818 fakeServer: require("./fake-server"),
16819 fakeServerWithClock: require("./fake-server/fake-server-with-clock"),
16820 fakeXhr: require("./fake-xhr")
16821};
16822
16823},{"./fake-server":141,"./fake-server/fake-server-with-clock":140,"./fake-xhr":144}],146:[function(require,module,exports){
16824arguments[4][40][0].apply(exports,arguments)
16825},{"./prototypes/array":154,"dup":40}],147:[function(require,module,exports){
16826arguments[4][41][0].apply(exports,arguments)
16827},{"./function-name":150,"dup":41}],148:[function(require,module,exports){
16828arguments[4][42][0].apply(exports,arguments)
16829},{"dup":42}],149:[function(require,module,exports){
16830arguments[4][43][0].apply(exports,arguments)
16831},{"dup":43}],150:[function(require,module,exports){
16832arguments[4][44][0].apply(exports,arguments)
16833},{"dup":44}],151:[function(require,module,exports){
16834arguments[4][45][0].apply(exports,arguments)
16835},{"dup":45}],152:[function(require,module,exports){
16836arguments[4][46][0].apply(exports,arguments)
16837},{"./called-in-order":146,"./class-name":147,"./deprecated":148,"./every":149,"./function-name":150,"./global":151,"./order-by-first-call":153,"./prototypes":157,"./type-of":163,"./value-to-string":164,"dup":46}],153:[function(require,module,exports){
16838arguments[4][47][0].apply(exports,arguments)
16839},{"./prototypes/array":154,"dup":47}],154:[function(require,module,exports){
16840arguments[4][48][0].apply(exports,arguments)
16841},{"./copy-prototype-methods":155,"dup":48}],155:[function(require,module,exports){
16842arguments[4][49][0].apply(exports,arguments)
16843},{"./throws-on-proto":162,"dup":49}],156:[function(require,module,exports){
16844arguments[4][50][0].apply(exports,arguments)
16845},{"./copy-prototype-methods":155,"dup":50}],157:[function(require,module,exports){
16846arguments[4][51][0].apply(exports,arguments)
16847},{"./array":154,"./function":156,"./map":158,"./object":159,"./set":160,"./string":161,"dup":51}],158:[function(require,module,exports){
16848arguments[4][52][0].apply(exports,arguments)
16849},{"./copy-prototype-methods":155,"dup":52}],159:[function(require,module,exports){
16850arguments[4][53][0].apply(exports,arguments)
16851},{"./copy-prototype-methods":155,"dup":53}],160:[function(require,module,exports){
16852arguments[4][54][0].apply(exports,arguments)
16853},{"./copy-prototype-methods":155,"dup":54}],161:[function(require,module,exports){
16854arguments[4][55][0].apply(exports,arguments)
16855},{"./copy-prototype-methods":155,"dup":55}],162:[function(require,module,exports){
16856arguments[4][56][0].apply(exports,arguments)
16857},{"dup":56}],163:[function(require,module,exports){
16858arguments[4][57][0].apply(exports,arguments)
16859},{"dup":57,"type-detect":168}],164:[function(require,module,exports){
16860arguments[4][58][0].apply(exports,arguments)
16861},{"dup":58}],165:[function(require,module,exports){
16862var isarray = require('isarray')
16863
16864/**
16865 * Expose `pathToRegexp`.
16866 */
16867module.exports = pathToRegexp
16868module.exports.parse = parse
16869module.exports.compile = compile
16870module.exports.tokensToFunction = tokensToFunction
16871module.exports.tokensToRegExp = tokensToRegExp
16872
16873/**
16874 * The main path matching regexp utility.
16875 *
16876 * @type {RegExp}
16877 */
16878var PATH_REGEXP = new RegExp([
16879 // Match escaped characters that would otherwise appear in future matches.
16880 // This allows the user to escape special characters that won't transform.
16881 '(\\\\.)',
16882 // Match Express-style parameters and un-named parameters with a prefix
16883 // and optional suffixes. Matches appear as:
16884 //
16885 // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
16886 // "/route(\\d+)" => [undefined, undefined, undefined, "\d+", undefined, undefined]
16887 // "/*" => ["/", undefined, undefined, undefined, undefined, "*"]
16888 '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))'
16889].join('|'), 'g')
16890
16891/**
16892 * Parse a string for the raw tokens.
16893 *
16894 * @param {string} str
16895 * @param {Object=} options
16896 * @return {!Array}
16897 */
16898function parse (str, options) {
16899 var tokens = []
16900 var key = 0
16901 var index = 0
16902 var path = ''
16903 var defaultDelimiter = options && options.delimiter || '/'
16904 var res
16905
16906 while ((res = PATH_REGEXP.exec(str)) != null) {
16907 var m = res[0]
16908 var escaped = res[1]
16909 var offset = res.index
16910 path += str.slice(index, offset)
16911 index = offset + m.length
16912
16913 // Ignore already escaped sequences.
16914 if (escaped) {
16915 path += escaped[1]
16916 continue
16917 }
16918
16919 var next = str[index]
16920 var prefix = res[2]
16921 var name = res[3]
16922 var capture = res[4]
16923 var group = res[5]
16924 var modifier = res[6]
16925 var asterisk = res[7]
16926
16927 // Push the current path onto the tokens.
16928 if (path) {
16929 tokens.push(path)
16930 path = ''
16931 }
16932
16933 var partial = prefix != null && next != null && next !== prefix
16934 var repeat = modifier === '+' || modifier === '*'
16935 var optional = modifier === '?' || modifier === '*'
16936 var delimiter = res[2] || defaultDelimiter
16937 var pattern = capture || group
16938
16939 tokens.push({
16940 name: name || key++,
16941 prefix: prefix || '',
16942 delimiter: delimiter,
16943 optional: optional,
16944 repeat: repeat,
16945 partial: partial,
16946 asterisk: !!asterisk,
16947 pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')
16948 })
16949 }
16950
16951 // Match any characters still remaining.
16952 if (index < str.length) {
16953 path += str.substr(index)
16954 }
16955
16956 // If the path exists, push it onto the end.
16957 if (path) {
16958 tokens.push(path)
16959 }
16960
16961 return tokens
16962}
16963
16964/**
16965 * Compile a string to a template function for the path.
16966 *
16967 * @param {string} str
16968 * @param {Object=} options
16969 * @return {!function(Object=, Object=)}
16970 */
16971function compile (str, options) {
16972 return tokensToFunction(parse(str, options), options)
16973}
16974
16975/**
16976 * Prettier encoding of URI path segments.
16977 *
16978 * @param {string}
16979 * @return {string}
16980 */
16981function encodeURIComponentPretty (str) {
16982 return encodeURI(str).replace(/[\/?#]/g, function (c) {
16983 return '%' + c.charCodeAt(0).toString(16).toUpperCase()
16984 })
16985}
16986
16987/**
16988 * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.
16989 *
16990 * @param {string}
16991 * @return {string}
16992 */
16993function encodeAsterisk (str) {
16994 return encodeURI(str).replace(/[?#]/g, function (c) {
16995 return '%' + c.charCodeAt(0).toString(16).toUpperCase()
16996 })
16997}
16998
16999/**
17000 * Expose a method for transforming tokens into the path function.
17001 */
17002function tokensToFunction (tokens, options) {
17003 // Compile all the tokens into regexps.
17004 var matches = new Array(tokens.length)
17005
17006 // Compile all the patterns before compilation.
17007 for (var i = 0; i < tokens.length; i++) {
17008 if (typeof tokens[i] === 'object') {
17009 matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))
17010 }
17011 }
17012
17013 return function (obj, opts) {
17014 var path = ''
17015 var data = obj || {}
17016 var options = opts || {}
17017 var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent
17018
17019 for (var i = 0; i < tokens.length; i++) {
17020 var token = tokens[i]
17021
17022 if (typeof token === 'string') {
17023 path += token
17024
17025 continue
17026 }
17027
17028 var value = data[token.name]
17029 var segment
17030
17031 if (value == null) {
17032 if (token.optional) {
17033 // Prepend partial segment prefixes.
17034 if (token.partial) {
17035 path += token.prefix
17036 }
17037
17038 continue
17039 } else {
17040 throw new TypeError('Expected "' + token.name + '" to be defined')
17041 }
17042 }
17043
17044 if (isarray(value)) {
17045 if (!token.repeat) {
17046 throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`')
17047 }
17048
17049 if (value.length === 0) {
17050 if (token.optional) {
17051 continue
17052 } else {
17053 throw new TypeError('Expected "' + token.name + '" to not be empty')
17054 }
17055 }
17056
17057 for (var j = 0; j < value.length; j++) {
17058 segment = encode(value[j])
17059
17060 if (!matches[i].test(segment)) {
17061 throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`')
17062 }
17063
17064 path += (j === 0 ? token.prefix : token.delimiter) + segment
17065 }
17066
17067 continue
17068 }
17069
17070 segment = token.asterisk ? encodeAsterisk(value) : encode(value)
17071
17072 if (!matches[i].test(segment)) {
17073 throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"')
17074 }
17075
17076 path += token.prefix + segment
17077 }
17078
17079 return path
17080 }
17081}
17082
17083/**
17084 * Escape a regular expression string.
17085 *
17086 * @param {string} str
17087 * @return {string}
17088 */
17089function escapeString (str) {
17090 return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1')
17091}
17092
17093/**
17094 * Escape the capturing group by escaping special characters and meaning.
17095 *
17096 * @param {string} group
17097 * @return {string}
17098 */
17099function escapeGroup (group) {
17100 return group.replace(/([=!:$\/()])/g, '\\$1')
17101}
17102
17103/**
17104 * Attach the keys as a property of the regexp.
17105 *
17106 * @param {!RegExp} re
17107 * @param {Array} keys
17108 * @return {!RegExp}
17109 */
17110function attachKeys (re, keys) {
17111 re.keys = keys
17112 return re
17113}
17114
17115/**
17116 * Get the flags for a regexp from the options.
17117 *
17118 * @param {Object} options
17119 * @return {string}
17120 */
17121function flags (options) {
17122 return options && options.sensitive ? '' : 'i'
17123}
17124
17125/**
17126 * Pull out keys from a regexp.
17127 *
17128 * @param {!RegExp} path
17129 * @param {!Array} keys
17130 * @return {!RegExp}
17131 */
17132function regexpToRegexp (path, keys) {
17133 // Use a negative lookahead to match only capturing groups.
17134 var groups = path.source.match(/\((?!\?)/g)
17135
17136 if (groups) {
17137 for (var i = 0; i < groups.length; i++) {
17138 keys.push({
17139 name: i,
17140 prefix: null,
17141 delimiter: null,
17142 optional: false,
17143 repeat: false,
17144 partial: false,
17145 asterisk: false,
17146 pattern: null
17147 })
17148 }
17149 }
17150
17151 return attachKeys(path, keys)
17152}
17153
17154/**
17155 * Transform an array into a regexp.
17156 *
17157 * @param {!Array} path
17158 * @param {Array} keys
17159 * @param {!Object} options
17160 * @return {!RegExp}
17161 */
17162function arrayToRegexp (path, keys, options) {
17163 var parts = []
17164
17165 for (var i = 0; i < path.length; i++) {
17166 parts.push(pathToRegexp(path[i], keys, options).source)
17167 }
17168
17169 var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))
17170
17171 return attachKeys(regexp, keys)
17172}
17173
17174/**
17175 * Create a path regexp from string input.
17176 *
17177 * @param {string} path
17178 * @param {!Array} keys
17179 * @param {!Object} options
17180 * @return {!RegExp}
17181 */
17182function stringToRegexp (path, keys, options) {
17183 return tokensToRegExp(parse(path, options), keys, options)
17184}
17185
17186/**
17187 * Expose a function for taking tokens and returning a RegExp.
17188 *
17189 * @param {!Array} tokens
17190 * @param {(Array|Object)=} keys
17191 * @param {Object=} options
17192 * @return {!RegExp}
17193 */
17194function tokensToRegExp (tokens, keys, options) {
17195 if (!isarray(keys)) {
17196 options = /** @type {!Object} */ (keys || options)
17197 keys = []
17198 }
17199
17200 options = options || {}
17201
17202 var strict = options.strict
17203 var end = options.end !== false
17204 var route = ''
17205
17206 // Iterate over the tokens and create our regexp string.
17207 for (var i = 0; i < tokens.length; i++) {
17208 var token = tokens[i]
17209
17210 if (typeof token === 'string') {
17211 route += escapeString(token)
17212 } else {
17213 var prefix = escapeString(token.prefix)
17214 var capture = '(?:' + token.pattern + ')'
17215
17216 keys.push(token)
17217
17218 if (token.repeat) {
17219 capture += '(?:' + prefix + capture + ')*'
17220 }
17221
17222 if (token.optional) {
17223 if (!token.partial) {
17224 capture = '(?:' + prefix + '(' + capture + '))?'
17225 } else {
17226 capture = prefix + '(' + capture + ')?'
17227 }
17228 } else {
17229 capture = prefix + '(' + capture + ')'
17230 }
17231
17232 route += capture
17233 }
17234 }
17235
17236 var delimiter = escapeString(options.delimiter || '/')
17237 var endsWithDelimiter = route.slice(-delimiter.length) === delimiter
17238
17239 // In non-strict mode we allow a slash at the end of match. If the path to
17240 // match already ends with a slash, we remove it for consistency. The slash
17241 // is valid at the end of a path match, not in the middle. This is important
17242 // in non-ending mode, where "/test/" shouldn't match "/test//route".
17243 if (!strict) {
17244 route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'
17245 }
17246
17247 if (end) {
17248 route += '$'
17249 } else {
17250 // In non-ending mode, we need the capturing groups to match as much as
17251 // possible by using a positive lookahead to the end or next path segment.
17252 route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'
17253 }
17254
17255 return attachKeys(new RegExp('^' + route, flags(options)), keys)
17256}
17257
17258/**
17259 * Normalize the given path string, returning a regular expression.
17260 *
17261 * An empty array can be passed in for the keys, which will hold the
17262 * placeholder key descriptions. For example, using `/user/:id`, `keys` will
17263 * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
17264 *
17265 * @param {(string|RegExp|Array)} path
17266 * @param {(Array|Object)=} keys
17267 * @param {Object=} options
17268 * @return {!RegExp}
17269 */
17270function pathToRegexp (path, keys, options) {
17271 if (!isarray(keys)) {
17272 options = /** @type {!Object} */ (keys || options)
17273 keys = []
17274 }
17275
17276 options = options || {}
17277
17278 if (path instanceof RegExp) {
17279 return regexpToRegexp(path, /** @type {!Array} */ (keys))
17280 }
17281
17282 if (isarray(path)) {
17283 return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)
17284 }
17285
17286 return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)
17287}
17288
17289},{"isarray":166}],166:[function(require,module,exports){
17290module.exports = Array.isArray || function (arr) {
17291 return Object.prototype.toString.call(arr) == '[object Array]';
17292};
17293
17294},{}],167:[function(require,module,exports){
17295'use strict';
17296module.exports = {
17297 stdout: false,
17298 stderr: false
17299};
17300
17301},{}],168:[function(require,module,exports){
17302(function (global, factory) {
17303 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
17304 typeof define === 'function' && define.amd ? define(factory) :
17305 (global.typeDetect = factory());
17306}(this, (function () { 'use strict';
17307
17308/* !
17309 * type-detect
17310 * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>
17311 * MIT Licensed
17312 */
17313var promiseExists = typeof Promise === 'function';
17314
17315/* eslint-disable no-undef */
17316var globalObject = typeof self === 'object' ? self : global; // eslint-disable-line id-blacklist
17317
17318var symbolExists = typeof Symbol !== 'undefined';
17319var mapExists = typeof Map !== 'undefined';
17320var setExists = typeof Set !== 'undefined';
17321var weakMapExists = typeof WeakMap !== 'undefined';
17322var weakSetExists = typeof WeakSet !== 'undefined';
17323var dataViewExists = typeof DataView !== 'undefined';
17324var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined';
17325var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined';
17326var setEntriesExists = setExists && typeof Set.prototype.entries === 'function';
17327var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function';
17328var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries());
17329var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries());
17330var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function';
17331var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]());
17332var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function';
17333var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]());
17334var toStringLeftSliceLength = 8;
17335var toStringRightSliceLength = -1;
17336/**
17337 * ### typeOf (obj)
17338 *
17339 * Uses `Object.prototype.toString` to determine the type of an object,
17340 * normalising behaviour across engine versions & well optimised.
17341 *
17342 * @param {Mixed} object
17343 * @return {String} object type
17344 * @api public
17345 */
17346function typeDetect(obj) {
17347 /* ! Speed optimisation
17348 * Pre:
17349 * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled)
17350 * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled)
17351 * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled)
17352 * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled)
17353 * function x 2,556,769 ops/sec ±1.73% (77 runs sampled)
17354 * Post:
17355 * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled)
17356 * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled)
17357 * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled)
17358 * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled)
17359 * function x 31,296,870 ops/sec ±0.96% (83 runs sampled)
17360 */
17361 var typeofObj = typeof obj;
17362 if (typeofObj !== 'object') {
17363 return typeofObj;
17364 }
17365
17366 /* ! Speed optimisation
17367 * Pre:
17368 * null x 28,645,765 ops/sec ±1.17% (82 runs sampled)
17369 * Post:
17370 * null x 36,428,962 ops/sec ±1.37% (84 runs sampled)
17371 */
17372 if (obj === null) {
17373 return 'null';
17374 }
17375
17376 /* ! Spec Conformance
17377 * Test: `Object.prototype.toString.call(window)``
17378 * - Node === "[object global]"
17379 * - Chrome === "[object global]"
17380 * - Firefox === "[object Window]"
17381 * - PhantomJS === "[object Window]"
17382 * - Safari === "[object Window]"
17383 * - IE 11 === "[object Window]"
17384 * - IE Edge === "[object Window]"
17385 * Test: `Object.prototype.toString.call(this)``
17386 * - Chrome Worker === "[object global]"
17387 * - Firefox Worker === "[object DedicatedWorkerGlobalScope]"
17388 * - Safari Worker === "[object DedicatedWorkerGlobalScope]"
17389 * - IE 11 Worker === "[object WorkerGlobalScope]"
17390 * - IE Edge Worker === "[object WorkerGlobalScope]"
17391 */
17392 if (obj === globalObject) {
17393 return 'global';
17394 }
17395
17396 /* ! Speed optimisation
17397 * Pre:
17398 * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled)
17399 * Post:
17400 * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled)
17401 */
17402 if (
17403 Array.isArray(obj) &&
17404 (symbolToStringTagExists === false || !(Symbol.toStringTag in obj))
17405 ) {
17406 return 'Array';
17407 }
17408
17409 // Not caching existence of `window` and related properties due to potential
17410 // for `window` to be unset before tests in quasi-browser environments.
17411 if (typeof window === 'object' && window !== null) {
17412 /* ! Spec Conformance
17413 * (https://html.spec.whatwg.org/multipage/browsers.html#location)
17414 * WhatWG HTML$7.7.3 - The `Location` interface
17415 * Test: `Object.prototype.toString.call(window.location)``
17416 * - IE <=11 === "[object Object]"
17417 * - IE Edge <=13 === "[object Object]"
17418 */
17419 if (typeof window.location === 'object' && obj === window.location) {
17420 return 'Location';
17421 }
17422
17423 /* ! Spec Conformance
17424 * (https://html.spec.whatwg.org/#document)
17425 * WhatWG HTML$3.1.1 - The `Document` object
17426 * Note: Most browsers currently adher to the W3C DOM Level 2 spec
17427 * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268)
17428 * which suggests that browsers should use HTMLTableCellElement for
17429 * both TD and TH elements. WhatWG separates these.
17430 * WhatWG HTML states:
17431 * > For historical reasons, Window objects must also have a
17432 * > writable, configurable, non-enumerable property named
17433 * > HTMLDocument whose value is the Document interface object.
17434 * Test: `Object.prototype.toString.call(document)``
17435 * - Chrome === "[object HTMLDocument]"
17436 * - Firefox === "[object HTMLDocument]"
17437 * - Safari === "[object HTMLDocument]"
17438 * - IE <=10 === "[object Document]"
17439 * - IE 11 === "[object HTMLDocument]"
17440 * - IE Edge <=13 === "[object HTMLDocument]"
17441 */
17442 if (typeof window.document === 'object' && obj === window.document) {
17443 return 'Document';
17444 }
17445
17446 if (typeof window.navigator === 'object') {
17447 /* ! Spec Conformance
17448 * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray)
17449 * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray
17450 * Test: `Object.prototype.toString.call(navigator.mimeTypes)``
17451 * - IE <=10 === "[object MSMimeTypesCollection]"
17452 */
17453 if (typeof window.navigator.mimeTypes === 'object' &&
17454 obj === window.navigator.mimeTypes) {
17455 return 'MimeTypeArray';
17456 }
17457
17458 /* ! Spec Conformance
17459 * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)
17460 * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray
17461 * Test: `Object.prototype.toString.call(navigator.plugins)``
17462 * - IE <=10 === "[object MSPluginsCollection]"
17463 */
17464 if (typeof window.navigator.plugins === 'object' &&
17465 obj === window.navigator.plugins) {
17466 return 'PluginArray';
17467 }
17468 }
17469
17470 if ((typeof window.HTMLElement === 'function' ||
17471 typeof window.HTMLElement === 'object') &&
17472 obj instanceof window.HTMLElement) {
17473 /* ! Spec Conformance
17474 * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray)
17475 * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement`
17476 * Test: `Object.prototype.toString.call(document.createElement('blockquote'))``
17477 * - IE <=10 === "[object HTMLBlockElement]"
17478 */
17479 if (obj.tagName === 'BLOCKQUOTE') {
17480 return 'HTMLQuoteElement';
17481 }
17482
17483 /* ! Spec Conformance
17484 * (https://html.spec.whatwg.org/#htmltabledatacellelement)
17485 * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement`
17486 * Note: Most browsers currently adher to the W3C DOM Level 2 spec
17487 * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)
17488 * which suggests that browsers should use HTMLTableCellElement for
17489 * both TD and TH elements. WhatWG separates these.
17490 * Test: Object.prototype.toString.call(document.createElement('td'))
17491 * - Chrome === "[object HTMLTableCellElement]"
17492 * - Firefox === "[object HTMLTableCellElement]"
17493 * - Safari === "[object HTMLTableCellElement]"
17494 */
17495 if (obj.tagName === 'TD') {
17496 return 'HTMLTableDataCellElement';
17497 }
17498
17499 /* ! Spec Conformance
17500 * (https://html.spec.whatwg.org/#htmltableheadercellelement)
17501 * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement`
17502 * Note: Most browsers currently adher to the W3C DOM Level 2 spec
17503 * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075)
17504 * which suggests that browsers should use HTMLTableCellElement for
17505 * both TD and TH elements. WhatWG separates these.
17506 * Test: Object.prototype.toString.call(document.createElement('th'))
17507 * - Chrome === "[object HTMLTableCellElement]"
17508 * - Firefox === "[object HTMLTableCellElement]"
17509 * - Safari === "[object HTMLTableCellElement]"
17510 */
17511 if (obj.tagName === 'TH') {
17512 return 'HTMLTableHeaderCellElement';
17513 }
17514 }
17515 }
17516
17517 /* ! Speed optimisation
17518 * Pre:
17519 * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled)
17520 * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled)
17521 * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled)
17522 * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled)
17523 * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled)
17524 * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled)
17525 * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled)
17526 * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled)
17527 * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled)
17528 * Post:
17529 * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled)
17530 * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled)
17531 * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled)
17532 * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled)
17533 * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled)
17534 * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled)
17535 * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled)
17536 * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled)
17537 * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled)
17538 */
17539 var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]);
17540 if (typeof stringTag === 'string') {
17541 return stringTag;
17542 }
17543
17544 var objPrototype = Object.getPrototypeOf(obj);
17545 /* ! Speed optimisation
17546 * Pre:
17547 * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled)
17548 * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled)
17549 * Post:
17550 * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled)
17551 * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled)
17552 */
17553 if (objPrototype === RegExp.prototype) {
17554 return 'RegExp';
17555 }
17556
17557 /* ! Speed optimisation
17558 * Pre:
17559 * date x 2,130,074 ops/sec ±4.42% (68 runs sampled)
17560 * Post:
17561 * date x 3,953,779 ops/sec ±1.35% (77 runs sampled)
17562 */
17563 if (objPrototype === Date.prototype) {
17564 return 'Date';
17565 }
17566
17567 /* ! Spec Conformance
17568 * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag)
17569 * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise":
17570 * Test: `Object.prototype.toString.call(Promise.resolve())``
17571 * - Chrome <=47 === "[object Object]"
17572 * - Edge <=20 === "[object Object]"
17573 * - Firefox 29-Latest === "[object Promise]"
17574 * - Safari 7.1-Latest === "[object Promise]"
17575 */
17576 if (promiseExists && objPrototype === Promise.prototype) {
17577 return 'Promise';
17578 }
17579
17580 /* ! Speed optimisation
17581 * Pre:
17582 * set x 2,222,186 ops/sec ±1.31% (82 runs sampled)
17583 * Post:
17584 * set x 4,545,879 ops/sec ±1.13% (83 runs sampled)
17585 */
17586 if (setExists && objPrototype === Set.prototype) {
17587 return 'Set';
17588 }
17589
17590 /* ! Speed optimisation
17591 * Pre:
17592 * map x 2,396,842 ops/sec ±1.59% (81 runs sampled)
17593 * Post:
17594 * map x 4,183,945 ops/sec ±6.59% (82 runs sampled)
17595 */
17596 if (mapExists && objPrototype === Map.prototype) {
17597 return 'Map';
17598 }
17599
17600 /* ! Speed optimisation
17601 * Pre:
17602 * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled)
17603 * Post:
17604 * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled)
17605 */
17606 if (weakSetExists && objPrototype === WeakSet.prototype) {
17607 return 'WeakSet';
17608 }
17609
17610 /* ! Speed optimisation
17611 * Pre:
17612 * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled)
17613 * Post:
17614 * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled)
17615 */
17616 if (weakMapExists && objPrototype === WeakMap.prototype) {
17617 return 'WeakMap';
17618 }
17619
17620 /* ! Spec Conformance
17621 * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag)
17622 * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView":
17623 * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))``
17624 * - Edge <=13 === "[object Object]"
17625 */
17626 if (dataViewExists && objPrototype === DataView.prototype) {
17627 return 'DataView';
17628 }
17629
17630 /* ! Spec Conformance
17631 * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag)
17632 * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator":
17633 * Test: `Object.prototype.toString.call(new Map().entries())``
17634 * - Edge <=13 === "[object Object]"
17635 */
17636 if (mapExists && objPrototype === mapIteratorPrototype) {
17637 return 'Map Iterator';
17638 }
17639
17640 /* ! Spec Conformance
17641 * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag)
17642 * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator":
17643 * Test: `Object.prototype.toString.call(new Set().entries())``
17644 * - Edge <=13 === "[object Object]"
17645 */
17646 if (setExists && objPrototype === setIteratorPrototype) {
17647 return 'Set Iterator';
17648 }
17649
17650 /* ! Spec Conformance
17651 * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag)
17652 * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator":
17653 * Test: `Object.prototype.toString.call([][Symbol.iterator]())``
17654 * - Edge <=13 === "[object Object]"
17655 */
17656 if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) {
17657 return 'Array Iterator';
17658 }
17659
17660 /* ! Spec Conformance
17661 * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag)
17662 * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator":
17663 * Test: `Object.prototype.toString.call(''[Symbol.iterator]())``
17664 * - Edge <=13 === "[object Object]"
17665 */
17666 if (stringIteratorExists && objPrototype === stringIteratorPrototype) {
17667 return 'String Iterator';
17668 }
17669
17670 /* ! Speed optimisation
17671 * Pre:
17672 * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled)
17673 * Post:
17674 * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled)
17675 */
17676 if (objPrototype === null) {
17677 return 'Object';
17678 }
17679
17680 return Object
17681 .prototype
17682 .toString
17683 .call(obj)
17684 .slice(toStringLeftSliceLength, toStringRightSliceLength);
17685}
17686
17687return typeDetect;
17688
17689})));
17690
17691},{}]},{},[1]);
17692
17693export default sinon;
17694const _leakThreshold = sinon.leakThreshold;
17695export { _leakThreshold as leakThreshold };
17696const _assert = sinon.assert;
17697export { _assert as assert };
17698const _serverPrototype = sinon.serverPrototype;
17699export { _serverPrototype as serverPrototype };
17700const _getFakes = sinon.getFakes;
17701export { _getFakes as getFakes };
17702const _getRestorers = sinon.getRestorers;
17703export { _getRestorers as getRestorers };
17704const _createStubInstance = sinon.createStubInstance;
17705export { _createStubInstance as createStubInstance };
17706const _inject = sinon.inject;
17707export { _inject as inject };
17708const _mock = sinon.mock;
17709export { _mock as mock };
17710const _reset = sinon.reset;
17711export { _reset as reset };
17712const _resetBehavior = sinon.resetBehavior;
17713export { _resetBehavior as resetBehavior };
17714const _resetHistory = sinon.resetHistory;
17715export { _resetHistory as resetHistory };
17716const _restore = sinon.restore;
17717export { _restore as restore };
17718const _restoreContext = sinon.restoreContext;
17719export { _restoreContext as restoreContext };
17720const _replace = sinon.replace;
17721export { _replace as replace };
17722const _replaceGetter = sinon.replaceGetter;
17723export { _replaceGetter as replaceGetter };
17724const _replaceSetter = sinon.replaceSetter;
17725export { _replaceSetter as replaceSetter };
17726const _spy = sinon.spy;
17727export { _spy as spy };
17728const _stub = sinon.stub;
17729export { _stub as stub };
17730const _fake = sinon.fake;
17731export { _fake as fake };
17732const _useFakeTimers = sinon.useFakeTimers;
17733export { _useFakeTimers as useFakeTimers };
17734const _verify = sinon.verify;
17735export { _verify as verify };
17736const _verifyAndRestore = sinon.verifyAndRestore;
17737export { _verifyAndRestore as verifyAndRestore };
17738const _useFakeServer = sinon.useFakeServer;
17739export { _useFakeServer as useFakeServer };
17740const _useFakeXMLHttpRequest = sinon.useFakeXMLHttpRequest;
17741export { _useFakeXMLHttpRequest as useFakeXMLHttpRequest };
17742const _usingPromise = sinon.usingPromise;
17743export { _usingPromise as usingPromise };
17744const _createSandbox = sinon.createSandbox;
17745export { _createSandbox as createSandbox };
17746const _match = sinon.match;
17747export { _match as match };
17748const _restoreObject = sinon.restoreObject;
17749export { _restoreObject as restoreObject };
17750const _expectation = sinon.expectation;
17751export { _expectation as expectation };
17752const _defaultConfig = sinon.defaultConfig;
17753export { _defaultConfig as defaultConfig };
17754const _timers = sinon.timers;
17755export { _timers as timers };
17756const _xhr = sinon.xhr;
17757export { _xhr as xhr };
17758const _FakeXMLHttpRequest = sinon.FakeXMLHttpRequest;
17759export { _FakeXMLHttpRequest as FakeXMLHttpRequest };
17760const _fakeServer = sinon.fakeServer;
17761export { _fakeServer as fakeServer };
17762const _fakeServerWithClock = sinon.fakeServerWithClock;
17763export { _fakeServerWithClock as fakeServerWithClock };
17764const _createFakeServer = sinon.createFakeServer;
17765export { _createFakeServer as createFakeServer };
17766const _createFakeServerWithClock = sinon.createFakeServerWithClock;
17767export { _createFakeServerWithClock as createFakeServerWithClock };
17768const _addBehavior = sinon.addBehavior;
17769export { _addBehavior as addBehavior };
17770const _promise = sinon.promise;
17771export { _promise as promise };
\No newline at end of file