From c000e2a10fb297d64e2235b3f1f900cc790ce223 Mon Sep 17 00:00:00 2001 From: Andre Alves Garzia Date: Fri, 1 Apr 2022 13:20:47 +0100 Subject: [PATCH 1/7] Version bump --- docs/_sidebar.md | 1 + docs/release_notes/2022.4.1.md | 4 ++++ manifest.json | 2 +- package.json | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 docs/release_notes/2022.4.1.md diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 8709a93d..2d78f56e 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -10,6 +10,7 @@ - [Packages](packages/) - [Privacy Policy](privacy-policy.md) - Release Notes + - [Version 2022.4.1](release_notes/2022.4.1.md) - [Version 2022.2.1](release_notes/2022.2.1.md) - [Version 2022.1.2](release_notes/2022.1.2.md) - [Version 2022.1.1](release_notes/2022.1.1.md) diff --git a/docs/release_notes/2022.4.1.md b/docs/release_notes/2022.4.1.md new file mode 100644 index 00000000..03b2f1ab --- /dev/null +++ b/docs/release_notes/2022.4.1.md @@ -0,0 +1,4 @@ +# Release 2022.4.1 + +* Fixed: removing identities. +* Bug: Can't load Zine mini app. diff --git a/manifest.json b/manifest.json index 83b965d2..4eaee299 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "description": "Patchfox is a Secure Scuttlebutt client", "manifest_version": 2, "name": "Patchfox", - "version": "2022.2.1", + "version": "2022.4.1", "icons": { "512": "images/patchfox_pixel_512.png", "96": "images/patchfox_pixel_96.png", diff --git a/package.json b/package.json index 3eb1c26e..f73b95c0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "patchfox", - "version": "2022.2.1", + "version": "2022.4.1", "repository": { "url": "https://github.com/soapdog/patchfox" }, From be6e15ee18cd6045627c68e99411d1fa14526144 Mon Sep 17 00:00:00 2001 From: Andre Alves Garzia Date: Fri, 1 Apr 2022 13:21:10 +0100 Subject: [PATCH 2/7] [zine]: fix for missing `filterWithUserFilters()` --- src/core/platforms/nodejs-ssb/ssb.js | 1 + src/packages/zine/Zine.svelte | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/core/platforms/nodejs-ssb/ssb.js b/src/core/platforms/nodejs-ssb/ssb.js index 867bbb7a..5e56a7fa 100644 --- a/src/core/platforms/nodejs-ssb/ssb.js +++ b/src/core/platforms/nodejs-ssb/ssb.js @@ -82,6 +82,7 @@ class NodeJsSSB { this.setAvatarCache = setAvatarCache this.getCachedAvatar = getCachedAvatar this.getAllCachedUsers = getAllCachedUsers + this.filterWithUserFilters = filterWithUserFilters } log(pMsg, pVal = "") { diff --git a/src/packages/zine/Zine.svelte b/src/packages/zine/Zine.svelte index fff742c0..d6e679cd 100644 --- a/src/packages/zine/Zine.svelte +++ b/src/packages/zine/Zine.svelte @@ -126,6 +126,7 @@ --> + {#if channel} +{/if}
From 62c4e8920f2ab9212cecfb6a5719dfc04efd73fd Mon Sep 17 00:00:00 2001 From: Andre Alves Garzia Date: Fri, 1 Apr 2022 14:02:55 +0100 Subject: [PATCH 3/7] [[contacts]] problem loading profile data --- src/core/platforms/nodejs-ssb/ssb.js | 50 ++++++++++++++++------------ src/packages/contacts/Profile.svelte | 1 + 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/core/platforms/nodejs-ssb/ssb.js b/src/core/platforms/nodejs-ssb/ssb.js index 5e56a7fa..38186439 100644 --- a/src/core/platforms/nodejs-ssb/ssb.js +++ b/src/core/platforms/nodejs-ssb/ssb.js @@ -352,30 +352,38 @@ class NodeJsSSB { }) } - async profile(feedid) { - let opts = { - id: feedid, - reverse: true, - } + profile(feedid) { + return new Promise((resolve, reject) => { + let opts = { + id: feedid, + reverse: true, + } - let user = { - msgs: [], - about: await this.aboutMessages(feedid, feedid), - } - const pipeline = pipelines.thread.get() + let user = { + msgs: [], + about: {}, + } - pull( - sbot.createUserStream(opts), - pull.apply(pull, pipeline), - pull.collect(function (err, data) { - if (err) { - throw err - } else { - user.msgs = data - return user - } + this.aboutMessages(feedid, feedid).then(data => { + user.about = data + + const pipeline = pipelines.thread.get() + + pull( + sbot.createUserStream(opts), + pull.apply(pull, pipeline), + pull.collect(function (err, data) { + if (err) { + reject(err) + } else { + user.msgs = data + console.log('user', user) + resolve(user) + } + }) + ) }) - ) + }) } get(id) { diff --git a/src/packages/contacts/Profile.svelte b/src/packages/contacts/Profile.svelte index 2417862e..d916e4f4 100644 --- a/src/packages/contacts/Profile.svelte +++ b/src/packages/contacts/Profile.svelte @@ -46,6 +46,7 @@ }) aboutPromise = ssb.profile(feed).then(data => { + console.log(data) lastAbout = data.about.reverse().find(m => { let a = m.value.content return a.hasOwnProperty("description") From b90bf559a5dc3e440d7191bf4a2f34d8e9343cf4 Mon Sep 17 00:00:00 2001 From: Andre Alves Garzia Date: Fri, 1 Apr 2022 14:03:17 +0100 Subject: [PATCH 4/7] [[globalMenu]] better sidebar icon --- src/packages/globalMenu/globalMenu.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packages/globalMenu/globalMenu.svelte b/src/packages/globalMenu/globalMenu.svelte index 4e39c982..ae4aae69 100644 --- a/src/packages/globalMenu/globalMenu.svelte +++ b/src/packages/globalMenu/globalMenu.svelte @@ -49,7 +49,7 @@ {#if browserSidebarSupport}
{/if} From ea5bb8117337daa39eb849d9472e8ab07312fb29 Mon Sep 17 00:00:00 2001 From: Andre Alves Garzia Date: Fri, 1 Apr 2022 14:03:25 +0100 Subject: [PATCH 5/7] smol fixes --- dist/background.js | 3 +- dist/browserAction.js | 3 +- dist/bundle.js | 93388 +++++++++------- dist/css/all.min.css | 5 +- dist/docs/_sidebar.md | 1 + dist/docs/message_types/about.md | 76 +- dist/docs/packages/README.md | 4 +- dist/docs/release_notes/2022.1.3.md | 25 - dist/manifest.json | 2 +- dist/ssb.js | 68501 +++++++----- dist/webfonts/fa-brands-400.ttf | Bin 133988 -> 181852 bytes dist/webfonts/fa-brands-400.woff2 | Bin 76736 -> 105536 bytes dist/webfonts/fa-regular-400.ttf | Bin 33736 -> 60520 bytes dist/webfonts/fa-regular-400.woff2 | Bin 13224 -> 23940 bytes dist/webfonts/fa-solid-900.ttf | Bin 202744 -> 388460 bytes dist/webfonts/fa-solid-900.woff2 | Bin 78268 -> 154228 bytes docs/message_types/about.md | 76 +- docs/release_notes/2022.4.1.md | 4 +- package-lock.json | 20 +- package.json | 6 +- src/core/kernel/prefs.js | 11 + .../settings/IdentitiesAndConnections.svelte | 7 +- 22 files changed, 88001 insertions(+), 74131 deletions(-) delete mode 100644 dist/docs/release_notes/2022.1.3.md diff --git a/dist/background.js b/dist/background.js index 64008ae3..9c95d7b8 100644 --- a/dist/background.js +++ b/dist/background.js @@ -1422,4 +1422,5 @@ module.exports = { updateChecker } -},{"webextension-polyfill":1}]},{},[2]); +},{"webextension-polyfill":1}]},{},[2]) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvd2ViZXh0ZW5zaW9uLXBvbHlmaWxsL2Rpc3QvYnJvd3Nlci1wb2x5ZmlsbC5qcyIsInNyYy9jb3JlL2JhY2tncm91bmQvYmFja2dyb3VuZC5qcyIsInNyYy9jb3JlL2JhY2tncm91bmQvY29udGV4dE1lbnVzLmpzIiwic3JjL2NvcmUvYmFja2dyb3VuZC9zZWFyY2guanMiLCJzcmMvY29yZS9iYWNrZ3JvdW5kL3VwZGF0ZUNoZWNrZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShcIndlYmV4dGVuc2lvbi1wb2x5ZmlsbFwiLCBbXCJtb2R1bGVcIl0sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgZmFjdG9yeShtb2R1bGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBtb2QgPSB7XG4gICAgICBleHBvcnRzOiB7fVxuICAgIH07XG4gICAgZmFjdG9yeShtb2QpO1xuICAgIGdsb2JhbC5icm93c2VyID0gbW9kLmV4cG9ydHM7XG4gIH1cbn0pKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsVGhpcyA6IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uIChtb2R1bGUpIHtcbiAgLyogd2ViZXh0ZW5zaW9uLXBvbHlmaWxsIC0gdjAuOC4wIC0gVHVlIEFwciAyMCAyMDIxIDExOjI3OjM4ICovXG5cbiAgLyogLSotIE1vZGU6IGluZGVudC10YWJzLW1vZGU6IG5pbDsganMtaW5kZW50LWxldmVsOiAyIC0qLSAqL1xuXG4gIC8qIHZpbTogc2V0IHN0cz0yIHN3PTIgZXQgdHc9ODA6ICovXG5cbiAgLyogVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpY1xuICAgKiBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzXG4gICAqIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uICovXG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIGlmICh0eXBlb2YgYnJvd3NlciA9PT0gXCJ1bmRlZmluZWRcIiB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYnJvd3NlcikgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBjb25zdCBDSFJPTUVfU0VORF9NRVNTQUdFX0NBTExCQUNLX05PX1JFU1BPTlNFX01FU1NBR0UgPSBcIlRoZSBtZXNzYWdlIHBvcnQgY2xvc2VkIGJlZm9yZSBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZC5cIjtcbiAgICBjb25zdCBTRU5EX1JFU1BPTlNFX0RFUFJFQ0FUSU9OX1dBUk5JTkcgPSBcIlJldHVybmluZyBhIFByb21pc2UgaXMgdGhlIHByZWZlcnJlZCB3YXkgdG8gc2VuZCBhIHJlcGx5IGZyb20gYW4gb25NZXNzYWdlL29uTWVzc2FnZUV4dGVybmFsIGxpc3RlbmVyLCBhcyB0aGUgc2VuZFJlc3BvbnNlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBzcGVjcyAoU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvTW96aWxsYS9BZGQtb25zL1dlYkV4dGVuc2lvbnMvQVBJL3J1bnRpbWUvb25NZXNzYWdlKVwiOyAvLyBXcmFwcGluZyB0aGUgYnVsayBvZiB0aGlzIHBvbHlmaWxsIGluIGEgb25lLXRpbWUtdXNlIGZ1bmN0aW9uIGlzIGEgbWlub3JcbiAgICAvLyBvcHRpbWl6YXRpb24gZm9yIEZpcmVmb3guIFNpbmNlIFNwaWRlcm1vbmtleSBkb2VzIG5vdCBmdWxseSBwYXJzZSB0aGVcbiAgICAvLyBjb250ZW50cyBvZiBhIGZ1bmN0aW9uIHVudGlsIHRoZSBmaXJzdCB0aW1lIGl0J3MgY2FsbGVkLCBhbmQgc2luY2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGFjdHVhbGx5IG5lZWQgdG8gYmUgY2FsbGVkLCB0aGlzIGFsbG93cyB0aGUgcG9seWZpbGwgdG8gYmUgaW5jbHVkZWRcbiAgICAvLyBpbiBGaXJlZm94IG5lYXJseSBmb3IgZnJlZS5cblxuICAgIGNvbnN0IHdyYXBBUElzID0gZXh0ZW5zaW9uQVBJcyA9PiB7XG4gICAgICAvLyBOT1RFOiBhcGlNZXRhZGF0YSBpcyBhc3NvY2lhdGVkIHRvIHRoZSBjb250ZW50IG9mIHRoZSBhcGktbWV0YWRhdGEuanNvbiBmaWxlXG4gICAgICAvLyBhdCBidWlsZCB0aW1lIGJ5IHJlcGxhY2luZyB0aGUgZm9sbG93aW5nIFwiaW5jbHVkZVwiIHdpdGggdGhlIGNvbnRlbnQgb2YgdGhlXG4gICAgICAvLyBKU09OIGZpbGUuXG4gICAgICBjb25zdCBhcGlNZXRhZGF0YSA9IHtcbiAgICAgICAgXCJhbGFybXNcIjoge1xuICAgICAgICAgIFwiY2xlYXJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjbGVhckFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImJvb2ttYXJrc1wiOiB7XG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRDaGlsZHJlblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFJlY2VudFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFN1YlRyZWVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRUcmVlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwibW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVRyZWVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWFyY2hcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJicm93c2VyQWN0aW9uXCI6IHtcbiAgICAgICAgICBcImRpc2FibGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbmFibGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRCYWRnZUJhY2tncm91bmRDb2xvclwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEJhZGdlVGV4dFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFBvcHVwXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0VGl0bGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJvcGVuUG9wdXBcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRCYWRnZUJhY2tncm91bmRDb2xvclwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldEJhZGdlVGV4dFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldEljb25cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRQb3B1cFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFRpdGxlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiYnJvd3NpbmdEYXRhXCI6IHtcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUNhY2hlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlQ29va2llc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZURvd25sb2Fkc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUZvcm1EYXRhXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlSGlzdG9yeVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZUxvY2FsU3RvcmFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVBhc3N3b3Jkc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVBsdWdpbkRhdGFcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXR0aW5nc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImNvbW1hbmRzXCI6IHtcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImNvbnRleHRNZW51c1wiOiB7XG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJjb29raWVzXCI6IHtcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbENvb2tpZVN0b3Jlc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImRldnRvb2xzXCI6IHtcbiAgICAgICAgICBcImluc3BlY3RlZFdpbmRvd1wiOiB7XG4gICAgICAgICAgICBcImV2YWxcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDIsXG4gICAgICAgICAgICAgIFwic2luZ2xlQ2FsbGJhY2tBcmdcIjogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicGFuZWxzXCI6IHtcbiAgICAgICAgICAgIFwiY3JlYXRlXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDMsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAzLFxuICAgICAgICAgICAgICBcInNpbmdsZUNhbGxiYWNrQXJnXCI6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImVsZW1lbnRzXCI6IHtcbiAgICAgICAgICAgICAgXCJjcmVhdGVTaWRlYmFyUGFuZVwiOiB7XG4gICAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJkb3dubG9hZHNcIjoge1xuICAgICAgICAgIFwiY2FuY2VsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZG93bmxvYWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlcmFzZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEZpbGVJY29uXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwib3BlblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJmYWxsYmFja1RvTm9DYWxsYmFja1wiOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInBhdXNlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicmVtb3ZlRmlsZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlc3VtZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlYXJjaFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNob3dcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJleHRlbnNpb25cIjoge1xuICAgICAgICAgIFwiaXNBbGxvd2VkRmlsZVNjaGVtZUFjY2Vzc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImlzQWxsb3dlZEluY29nbml0b0FjY2Vzc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcImhpc3RvcnlcIjoge1xuICAgICAgICAgIFwiYWRkVXJsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVsZXRlQWxsXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZGVsZXRlUmFuZ2VcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkZWxldGVVcmxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRWaXNpdHNcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZWFyY2hcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJpMThuXCI6IHtcbiAgICAgICAgICBcImRldGVjdExhbmd1YWdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0QWNjZXB0TGFuZ3VhZ2VzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwiaWRlbnRpdHlcIjoge1xuICAgICAgICAgIFwibGF1bmNoV2ViQXV0aEZsb3dcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJpZGxlXCI6IHtcbiAgICAgICAgICBcInF1ZXJ5U3RhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJtYW5hZ2VtZW50XCI6IHtcbiAgICAgICAgICBcImdldFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEFsbFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFNlbGZcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRFbmFibGVkXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwidW5pbnN0YWxsU2VsZlwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIm5vdGlmaWNhdGlvbnNcIjoge1xuICAgICAgICAgIFwiY2xlYXJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRQZXJtaXNzaW9uTGV2ZWxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJwYWdlQWN0aW9uXCI6IHtcbiAgICAgICAgICBcImdldFBvcHVwXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0VGl0bGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJoaWRlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0SWNvblwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFBvcHVwXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2V0VGl0bGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwiZmFsbGJhY2tUb05vQ2FsbGJhY2tcIjogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzaG93XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDEsXG4gICAgICAgICAgICBcImZhbGxiYWNrVG9Ob0NhbGxiYWNrXCI6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicGVybWlzc2lvbnNcIjoge1xuICAgICAgICAgIFwiY29udGFpbnNcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicnVudGltZVwiOiB7XG4gICAgICAgICAgXCJnZXRCYWNrZ3JvdW5kUGFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFBsYXRmb3JtSW5mb1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm9wZW5PcHRpb25zUGFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInJlcXVlc3RVcGRhdGVDaGVja1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNlbmRNZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDNcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic2VuZE5hdGl2ZU1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRVbmluc3RhbGxVUkxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXNzaW9uc1wiOiB7XG4gICAgICAgICAgXCJnZXREZXZpY2VzXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0UmVjZW50bHlDbG9zZWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZXN0b3JlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwic3RvcmFnZVwiOiB7XG4gICAgICAgICAgXCJsb2NhbFwiOiB7XG4gICAgICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldEJ5dGVzSW5Vc2VcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIm1hbmFnZWRcIjoge1xuICAgICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldEJ5dGVzSW5Vc2VcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwic3luY1wiOiB7XG4gICAgICAgICAgICBcImNsZWFyXCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImdldEJ5dGVzSW5Vc2VcIjoge1xuICAgICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcInJlbW92ZVwiOiB7XG4gICAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic2V0XCI6IHtcbiAgICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInRhYnNcIjoge1xuICAgICAgICAgIFwiY2FwdHVyZVZpc2libGVUYWJcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkZXRlY3RMYW5ndWFnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImRpc2NhcmRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJkdXBsaWNhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJleGVjdXRlU2NyaXB0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0Q3VycmVudFwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMCxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldFpvb21cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRab29tU2V0dGluZ3NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnb0JhY2tcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnb0ZvcndhcmRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJoaWdobGlnaHRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJpbnNlcnRDU1NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJtb3ZlXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAyLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwicXVlcnlcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZWxvYWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVDU1NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZW5kTWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMixcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInNldFpvb21cIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJzZXRab29tU2V0dGluZ3NcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ0b3BTaXRlc1wiOiB7XG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJ3ZWJOYXZpZ2F0aW9uXCI6IHtcbiAgICAgICAgICBcImdldEFsbEZyYW1lc1wiOiB7XG4gICAgICAgICAgICBcIm1pbkFyZ3NcIjogMSxcbiAgICAgICAgICAgIFwibWF4QXJnc1wiOiAxXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcImdldEZyYW1lXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAxLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwid2ViUmVxdWVzdFwiOiB7XG4gICAgICAgICAgXCJoYW5kbGVyQmVoYXZpb3JDaGFuZ2VkXCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDBcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwid2luZG93c1wiOiB7XG4gICAgICAgICAgXCJjcmVhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRBbGxcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJnZXRDdXJyZW50XCI6IHtcbiAgICAgICAgICAgIFwibWluQXJnc1wiOiAwLFxuICAgICAgICAgICAgXCJtYXhBcmdzXCI6IDFcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZ2V0TGFzdEZvY3VzZWRcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDAsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJyZW1vdmVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDEsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ1cGRhdGVcIjoge1xuICAgICAgICAgICAgXCJtaW5BcmdzXCI6IDIsXG4gICAgICAgICAgICBcIm1heEFyZ3NcIjogMlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGFwaU1ldGFkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXBpLW1ldGFkYXRhLmpzb24gaGFzIG5vdCBiZWVuIGluY2x1ZGVkIGluIGJyb3dzZXItcG9seWZpbGxcIik7XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIEEgV2Vha01hcCBzdWJjbGFzcyB3aGljaCBjcmVhdGVzIGFuZCBzdG9yZXMgYSB2YWx1ZSBmb3IgYW55IGtleSB3aGljaCBkb2VzXG4gICAgICAgKiBub3QgZXhpc3Qgd2hlbiBhY2Nlc3NlZCwgYnV0IGJlaGF2ZXMgZXhhY3RseSBhcyBhbiBvcmRpbmFyeSBXZWFrTWFwXG4gICAgICAgKiBvdGhlcndpc2UuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY3JlYXRlSXRlbVxuICAgICAgICogICAgICAgIEEgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgaW4gb3JkZXIgdG8gY3JlYXRlIHRoZSB2YWx1ZSBmb3IgYW55XG4gICAgICAgKiAgICAgICAga2V5IHdoaWNoIGRvZXMgbm90IGV4aXN0LCB0aGUgZmlyc3QgdGltZSBpdCBpcyBhY2Nlc3NlZC4gVGhlXG4gICAgICAgKiAgICAgICAgZnVuY3Rpb24gcmVjZWl2ZXMsIGFzIGl0cyBvbmx5IGFyZ3VtZW50LCB0aGUga2V5IGJlaW5nIGNyZWF0ZWQuXG4gICAgICAgKi9cblxuXG4gICAgICBjbGFzcyBEZWZhdWx0V2Vha01hcCBleHRlbmRzIFdlYWtNYXAge1xuICAgICAgICBjb25zdHJ1Y3RvcihjcmVhdGVJdGVtLCBpdGVtcyA9IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHN1cGVyKGl0ZW1zKTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZUl0ZW0gPSBjcmVhdGVJdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0KGtleSkge1xuICAgICAgICAgIGlmICghdGhpcy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5zZXQoa2V5LCB0aGlzLmNyZWF0ZUl0ZW0oa2V5KSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN1cGVyLmdldChrZXkpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICAgIC8qKlxuICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBvYmplY3QgaXMgYW4gb2JqZWN0IHdpdGggYSBgdGhlbmAgbWV0aG9kLCBhbmQgY2FuXG4gICAgICAgKiB0aGVyZWZvcmUgYmUgYXNzdW1lZCB0byBiZWhhdmUgYXMgYSBQcm9taXNlLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHRlc3QuXG4gICAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdGhlbmFibGUuXG4gICAgICAgKi9cblxuXG4gICAgICBjb25zdCBpc1RoZW5hYmxlID0gdmFsdWUgPT4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSBcImZ1bmN0aW9uXCI7XG4gICAgICB9O1xuICAgICAgLyoqXG4gICAgICAgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2gsIHdoZW4gY2FsbGVkLCB3aWxsIHJlc29sdmUgb3IgcmVqZWN0XG4gICAgICAgKiB0aGUgZ2l2ZW4gcHJvbWlzZSBiYXNlZCBvbiBob3cgaXQgaXMgY2FsbGVkOlxuICAgICAgICpcbiAgICAgICAqIC0gSWYsIHdoZW4gY2FsbGVkLCBgY2hyb21lLnJ1bnRpbWUubGFzdEVycm9yYCBjb250YWlucyBhIG5vbi1udWxsIG9iamVjdCxcbiAgICAgICAqICAgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCB0aGF0IHZhbHVlLlxuICAgICAgICogLSBJZiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggZXhhY3RseSBvbmUgYXJndW1lbnQsIHRoZSBwcm9taXNlIGlzXG4gICAgICAgKiAgIHJlc29sdmVkIHRvIHRoYXQgdmFsdWUuXG4gICAgICAgKiAtIE90aGVyd2lzZSwgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgdG8gYW4gYXJyYXkgY29udGFpbmluZyBhbGwgb2YgdGhlXG4gICAgICAgKiAgIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9taXNlXG4gICAgICAgKiAgICAgICAgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlc29sdXRpb24gYW5kIHJlamVjdGlvbiBmdW5jdGlvbnMgb2YgYVxuICAgICAgICogICAgICAgIHByb21pc2UuXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBwcm9taXNlLnJlc29sdmVcbiAgICAgICAqICAgICAgICBUaGUgcHJvbWlzZSdzIHJlc29sdXRpb24gZnVuY3Rpb24uXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBwcm9taXNlLnJlamVjdFxuICAgICAgICogICAgICAgIFRoZSBwcm9taXNlJ3MgcmVqZWN0aW9uIGZ1bmN0aW9uLlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IG1ldGFkYXRhXG4gICAgICAgKiAgICAgICAgTWV0YWRhdGEgYWJvdXQgdGhlIHdyYXBwZWQgbWV0aG9kIHdoaWNoIGhhcyBjcmVhdGVkIHRoZSBjYWxsYmFjay5cbiAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbWV0YWRhdGEuc2luZ2xlQ2FsbGJhY2tBcmdcbiAgICAgICAqICAgICAgICBXaGV0aGVyIG9yIG5vdCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCB3aXRoIG9ubHkgdGhlIGZpcnN0XG4gICAgICAgKiAgICAgICAgYXJndW1lbnQgb2YgdGhlIGNhbGxiYWNrLCBhbHRlcm5hdGl2ZWx5IGFuIGFycmF5IG9mIGFsbCB0aGVcbiAgICAgICAqICAgICAgICBjYWxsYmFjayBhcmd1bWVudHMgaXMgcmVzb2x2ZWQuIEJ5IGRlZmF1bHQsIGlmIHRoZSBjYWxsYmFja1xuICAgICAgICogICAgICAgIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCBvbmx5IGEgc2luZ2xlIGFyZ3VtZW50LCB0aGF0IHdpbGwgYmVcbiAgICAgICAqICAgICAgICByZXNvbHZlZCB0byB0aGUgcHJvbWlzZSwgd2hpbGUgYWxsIGFyZ3VtZW50cyB3aWxsIGJlIHJlc29sdmVkIGFzXG4gICAgICAgKiAgICAgICAgYW4gYXJyYXkgaWYgbXVsdGlwbGUgYXJlIGdpdmVuLlxuICAgICAgICpcbiAgICAgICAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAgICAgICAqICAgICAgICBUaGUgZ2VuZXJhdGVkIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgICAgICovXG5cblxuICAgICAgY29uc3QgbWFrZUNhbGxiYWNrID0gKHByb21pc2UsIG1ldGFkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiAoLi4uY2FsbGJhY2tBcmdzKSA9PiB7XG4gICAgICAgICAgaWYgKGV4dGVuc2lvbkFQSXMucnVudGltZS5sYXN0RXJyb3IpIHtcbiAgICAgICAgICAgIHByb21pc2UucmVqZWN0KG5ldyBFcnJvcihleHRlbnNpb25BUElzLnJ1bnRpbWUubGFzdEVycm9yLm1lc3NhZ2UpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnNpbmdsZUNhbGxiYWNrQXJnIHx8IGNhbGxiYWNrQXJncy5sZW5ndGggPD0gMSAmJiBtZXRhZGF0YS5zaW5nbGVDYWxsYmFja0FyZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShjYWxsYmFja0FyZ3NbMF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoY2FsbGJhY2tBcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwbHVyYWxpemVBcmd1bWVudHMgPSBudW1BcmdzID0+IG51bUFyZ3MgPT0gMSA/IFwiYXJndW1lbnRcIiA6IFwiYXJndW1lbnRzXCI7XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIG1ldGhvZCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBtZXRhZGF0YS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgICAgICogICAgICAgIFRoZSBuYW1lIG9mIHRoZSBtZXRob2Qgd2hpY2ggaXMgYmVpbmcgd3JhcHBlZC5cbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBtZXRhZGF0YVxuICAgICAgICogICAgICAgIE1ldGFkYXRhIGFib3V0IHRoZSBtZXRob2QgYmVpbmcgd3JhcHBlZC5cbiAgICAgICAqIEBwYXJhbSB7aW50ZWdlcn0gbWV0YWRhdGEubWluQXJnc1xuICAgICAgICogICAgICAgIFRoZSBtaW5pbXVtIG51bWJlciBvZiBhcmd1bWVudHMgd2hpY2ggbXVzdCBiZSBwYXNzZWQgdG8gdGhlXG4gICAgICAgKiAgICAgICAgZnVuY3Rpb24uIElmIGNhbGxlZCB3aXRoIGZld2VyIHRoYW4gdGhpcyBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGVcbiAgICAgICAqICAgICAgICB3cmFwcGVyIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uLlxuICAgICAgICogQHBhcmFtIHtpbnRlZ2VyfSBtZXRhZGF0YS5tYXhBcmdzXG4gICAgICAgKiAgICAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyB3aGljaCBtYXkgYmUgcGFzc2VkIHRvIHRoZVxuICAgICAgICogICAgICAgIGZ1bmN0aW9uLiBJZiBjYWxsZWQgd2l0aCBtb3JlIHRoYW4gdGhpcyBudW1iZXIgb2YgYXJndW1lbnRzLCB0aGVcbiAgICAgICAqICAgICAgICB3cmFwcGVyIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uLlxuICAgICAgICogQHBhcmFtIHtib29sZWFufSBtZXRhZGF0YS5zaW5nbGVDYWxsYmFja0FyZ1xuICAgICAgICogICAgICAgIFdoZXRoZXIgb3Igbm90IHRoZSBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggb25seSB0aGUgZmlyc3RcbiAgICAgICAqICAgICAgICBhcmd1bWVudCBvZiB0aGUgY2FsbGJhY2ssIGFsdGVybmF0aXZlbHkgYW4gYXJyYXkgb2YgYWxsIHRoZVxuICAgICAgICogICAgICAgIGNhbGxiYWNrIGFyZ3VtZW50cyBpcyByZXNvbHZlZC4gQnkgZGVmYXVsdCwgaWYgdGhlIGNhbGxiYWNrXG4gICAgICAgKiAgICAgICAgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIG9ubHkgYSBzaW5nbGUgYXJndW1lbnQsIHRoYXQgd2lsbCBiZVxuICAgICAgICogICAgICAgIHJlc29sdmVkIHRvIHRoZSBwcm9taXNlLCB3aGlsZSBhbGwgYXJndW1lbnRzIHdpbGwgYmUgcmVzb2x2ZWQgYXNcbiAgICAgICAqICAgICAgICBhbiBhcnJheSBpZiBtdWx0aXBsZSBhcmUgZ2l2ZW4uXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge2Z1bmN0aW9uKG9iamVjdCwgLi4uKil9XG4gICAgICAgKiAgICAgICBUaGUgZ2VuZXJhdGVkIHdyYXBwZXIgZnVuY3Rpb24uXG4gICAgICAgKi9cblxuXG4gICAgICBjb25zdCB3cmFwQXN5bmNGdW5jdGlvbiA9IChuYW1lLCBtZXRhZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gYXN5bmNGdW5jdGlvbldyYXBwZXIodGFyZ2V0LCAuLi5hcmdzKSB7XG4gICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgbWV0YWRhdGEubWluQXJncykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCAke21ldGFkYXRhLm1pbkFyZ3N9ICR7cGx1cmFsaXplQXJndW1lbnRzKG1ldGFkYXRhLm1pbkFyZ3MpfSBmb3IgJHtuYW1lfSgpLCBnb3QgJHthcmdzLmxlbmd0aH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPiBtZXRhZGF0YS5tYXhBcmdzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGF0IG1vc3QgJHttZXRhZGF0YS5tYXhBcmdzfSAke3BsdXJhbGl6ZUFyZ3VtZW50cyhtZXRhZGF0YS5tYXhBcmdzKX0gZm9yICR7bmFtZX0oKSwgZ290ICR7YXJncy5sZW5ndGh9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5mYWxsYmFja1RvTm9DYWxsYmFjaykge1xuICAgICAgICAgICAgICAvLyBUaGlzIEFQSSBtZXRob2QgaGFzIGN1cnJlbnRseSBubyBjYWxsYmFjayBvbiBDaHJvbWUsIGJ1dCBpdCByZXR1cm4gYSBwcm9taXNlIG9uIEZpcmVmb3gsXG4gICAgICAgICAgICAgIC8vIGFuZCBzbyB0aGUgcG9seWZpbGwgd2lsbCB0cnkgdG8gY2FsbCBpdCB3aXRoIGEgY2FsbGJhY2sgZmlyc3QsIGFuZCBpdCB3aWxsIGZhbGxiYWNrXG4gICAgICAgICAgICAgIC8vIHRvIG5vdCBwYXNzaW5nIHRoZSBjYWxsYmFjayBpZiB0aGUgZmlyc3QgY2FsbCBmYWlscy5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0oLi4uYXJncywgbWFrZUNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgICB9LCBtZXRhZGF0YSkpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChjYkVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGAke25hbWV9IEFQSSBtZXRob2QgZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgdGhlIGNhbGxiYWNrIHBhcmFtZXRlciwgYCArIFwiZmFsbGluZyBiYWNrIHRvIGNhbGwgaXQgd2l0aG91dCBhIGNhbGxiYWNrOiBcIiwgY2JFcnJvcik7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MpOyAvLyBVcGRhdGUgdGhlIEFQSSBtZXRob2QgbWV0YWRhdGEsIHNvIHRoYXQgdGhlIG5leHQgQVBJIGNhbGxzIHdpbGwgbm90IHRyeSB0b1xuICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgdW5zdXBwb3J0ZWQgY2FsbGJhY2sgYW55bW9yZS5cblxuICAgICAgICAgICAgICAgIG1ldGFkYXRhLmZhbGxiYWNrVG9Ob0NhbGxiYWNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbWV0YWRhdGEubm9DYWxsYmFjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLm5vQ2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgdGFyZ2V0W25hbWVdKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0YXJnZXRbbmFtZV0oLi4uYXJncywgbWFrZUNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICB9LCBtZXRhZGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICAgIC8qKlxuICAgICAgICogV3JhcHMgYW4gZXhpc3RpbmcgbWV0aG9kIG9mIHRoZSB0YXJnZXQgb2JqZWN0LCBzbyB0aGF0IGNhbGxzIHRvIGl0IGFyZVxuICAgICAgICogaW50ZXJjZXB0ZWQgYnkgdGhlIGdpdmVuIHdyYXBwZXIgZnVuY3Rpb24uIFRoZSB3cmFwcGVyIGZ1bmN0aW9uIHJlY2VpdmVzLFxuICAgICAgICogYXMgaXRzIGZpcnN0IGFyZ3VtZW50LCB0aGUgb3JpZ2luYWwgYHRhcmdldGAgb2JqZWN0LCBmb2xsb3dlZCBieSBlYWNoIG9mXG4gICAgICAgKiB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgb3JpZ2luYWwgbWV0aG9kLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXRcbiAgICAgICAqICAgICAgICBUaGUgb3JpZ2luYWwgdGFyZ2V0IG9iamVjdCB0aGF0IHRoZSB3cmFwcGVkIG1ldGhvZCBiZWxvbmdzIHRvLlxuICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kXG4gICAgICAgKiAgICAgICAgVGhlIG1ldGhvZCBiZWluZyB3cmFwcGVkLiBUaGlzIGlzIHVzZWQgYXMgdGhlIHRhcmdldCBvZiB0aGUgUHJveHlcbiAgICAgICAqICAgICAgICBvYmplY3Qgd2hpY2ggaXMgY3JlYXRlZCB0byB3cmFwIHRoZSBtZXRob2QuXG4gICAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSB3cmFwcGVyXG4gICAgICAgKiAgICAgICAgVGhlIHdyYXBwZXIgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGluIHBsYWNlIG9mIGEgZGlyZWN0IGludm9jYXRpb25cbiAgICAgICAqICAgICAgICBvZiB0aGUgd3JhcHBlZCBtZXRob2QuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge1Byb3h5PGZ1bmN0aW9uPn1cbiAgICAgICAqICAgICAgICBBIFByb3h5IG9iamVjdCBmb3IgdGhlIGdpdmVuIG1ldGhvZCwgd2hpY2ggaW52b2tlcyB0aGUgZ2l2ZW4gd3JhcHBlclxuICAgICAgICogICAgICAgIG1ldGhvZCBpbiBpdHMgcGxhY2UuXG4gICAgICAgKi9cblxuXG4gICAgICBjb25zdCB3cmFwTWV0aG9kID0gKHRhcmdldCwgbWV0aG9kLCB3cmFwcGVyKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkobWV0aG9kLCB7XG4gICAgICAgICAgYXBwbHkodGFyZ2V0TWV0aG9kLCB0aGlzT2JqLCBhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gd3JhcHBlci5jYWxsKHRoaXNPYmosIHRhcmdldCwgLi4uYXJncyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgbGV0IGhhc093blByb3BlcnR5ID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuICAgICAgLyoqXG4gICAgICAgKiBXcmFwcyBhbiBvYmplY3QgaW4gYSBQcm94eSB3aGljaCBpbnRlcmNlcHRzIGFuZCB3cmFwcyBjZXJ0YWluIG1ldGhvZHNcbiAgICAgICAqIGJhc2VkIG9uIHRoZSBnaXZlbiBgd3JhcHBlcnNgIGFuZCBgbWV0YWRhdGFgIG9iamVjdHMuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IHRhcmdldFxuICAgICAgICogICAgICAgIFRoZSB0YXJnZXQgb2JqZWN0IHRvIHdyYXAuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHtvYmplY3R9IFt3cmFwcGVycyA9IHt9XVxuICAgICAgICogICAgICAgIEFuIG9iamVjdCB0cmVlIGNvbnRhaW5pbmcgd3JhcHBlciBmdW5jdGlvbnMgZm9yIHNwZWNpYWwgY2FzZXMuIEFueVxuICAgICAgICogICAgICAgIGZ1bmN0aW9uIHByZXNlbnQgaW4gdGhpcyBvYmplY3QgdHJlZSBpcyBjYWxsZWQgaW4gcGxhY2Ugb2YgdGhlXG4gICAgICAgKiAgICAgICAgbWV0aG9kIGluIHRoZSBzYW1lIGxvY2F0aW9uIGluIHRoZSBgdGFyZ2V0YCBvYmplY3QgdHJlZS4gVGhlc2VcbiAgICAgICAqICAgICAgICB3cmFwcGVyIG1ldGhvZHMgYXJlIGludm9rZWQgYXMgZGVzY3JpYmVkIGluIHtAc2VlIHdyYXBNZXRob2R9LlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbbWV0YWRhdGEgPSB7fV1cbiAgICAgICAqICAgICAgICBBbiBvYmplY3QgdHJlZSBjb250YWluaW5nIG1ldGFkYXRhIHVzZWQgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZVxuICAgICAgICogICAgICAgIFByb21pc2UtYmFzZWQgd3JhcHBlciBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cy4gQW55IGZ1bmN0aW9uIGluXG4gICAgICAgKiAgICAgICAgdGhlIGB0YXJnZXRgIG9iamVjdCB0cmVlIHdoaWNoIGhhcyBhIGNvcnJlc3BvbmRpbmcgbWV0YWRhdGEgb2JqZWN0XG4gICAgICAgKiAgICAgICAgaW4gdGhlIHNhbWUgbG9jYXRpb24gaW4gdGhlIGBtZXRhZGF0YWAgdHJlZSBpcyByZXBsYWNlZCB3aXRoIGFuXG4gICAgICAgKiAgICAgICAgYXV0b21hdGljYWxseS1nZW5lcmF0ZWQgd3JhcHBlciBmdW5jdGlvbiwgYXMgZGVzY3JpYmVkIGluXG4gICAgICAgKiAgICAgICAge0BzZWUgd3JhcEFzeW5jRnVuY3Rpb259XG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge1Byb3h5PG9iamVjdD59XG4gICAgICAgKi9cblxuICAgICAgY29uc3Qgd3JhcE9iamVjdCA9ICh0YXJnZXQsIHdyYXBwZXJzID0ge30sIG1ldGFkYXRhID0ge30pID0+IHtcbiAgICAgICAgbGV0IGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgbGV0IGhhbmRsZXJzID0ge1xuICAgICAgICAgIGhhcyhwcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHByb3AgaW4gdGFyZ2V0IHx8IHByb3AgaW4gY2FjaGU7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGdldChwcm94eVRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIGlmIChwcm9wIGluIGNhY2hlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjYWNoZVtwcm9wXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCEocHJvcCBpbiB0YXJnZXQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHRhcmdldFtwcm9wXTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBtZXRob2Qgb24gdGhlIHVuZGVybHlpbmcgb2JqZWN0LiBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvXG4gICAgICAgICAgICAgIC8vIGFueSB3cmFwcGluZy5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3cmFwcGVyc1twcm9wXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIHNwZWNpYWwtY2FzZSB3cmFwcGVyIGZvciB0aGlzIG1ldGhvZC5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHdyYXBNZXRob2QodGFyZ2V0LCB0YXJnZXRbcHJvcF0sIHdyYXBwZXJzW3Byb3BdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNPd25Qcm9wZXJ0eShtZXRhZGF0YSwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGFzeW5jIG1ldGhvZCB0aGF0IHdlIGhhdmUgbWV0YWRhdGEgZm9yLiBDcmVhdGUgYVxuICAgICAgICAgICAgICAgIC8vIFByb21pc2Ugd3JhcHBlciBmb3IgaXQuXG4gICAgICAgICAgICAgICAgbGV0IHdyYXBwZXIgPSB3cmFwQXN5bmNGdW5jdGlvbihwcm9wLCBtZXRhZGF0YVtwcm9wXSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwTWV0aG9kKHRhcmdldCwgdGFyZ2V0W3Byb3BdLCB3cmFwcGVyKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbWV0aG9kIHRoYXQgd2UgZG9uJ3Qga25vdyBvciBjYXJlIGFib3V0LiBSZXR1cm4gdGhlXG4gICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgbWV0aG9kLCBib3VuZCB0byB0aGUgdW5kZXJseWluZyBvYmplY3QuXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5iaW5kKHRhcmdldCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIChoYXNPd25Qcm9wZXJ0eSh3cmFwcGVycywgcHJvcCkgfHwgaGFzT3duUHJvcGVydHkobWV0YWRhdGEsIHByb3ApKSkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIG9iamVjdCB0aGF0IHdlIG5lZWQgdG8gZG8gc29tZSB3cmFwcGluZyBmb3IgdGhlIGNoaWxkcmVuXG4gICAgICAgICAgICAgIC8vIG9mLiBDcmVhdGUgYSBzdWItb2JqZWN0IHdyYXBwZXIgZm9yIGl0IHdpdGggdGhlIGFwcHJvcHJpYXRlIGNoaWxkXG4gICAgICAgICAgICAgIC8vIG1ldGFkYXRhLlxuICAgICAgICAgICAgICB2YWx1ZSA9IHdyYXBPYmplY3QodmFsdWUsIHdyYXBwZXJzW3Byb3BdLCBtZXRhZGF0YVtwcm9wXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhhc093blByb3BlcnR5KG1ldGFkYXRhLCBcIipcIikpIHtcbiAgICAgICAgICAgICAgLy8gV3JhcCBhbGwgcHJvcGVydGllcyBpbiAqIG5hbWVzcGFjZS5cbiAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwT2JqZWN0KHZhbHVlLCB3cmFwcGVyc1twcm9wXSwgbWV0YWRhdGFbXCIqXCJdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55IHdyYXBwaW5nIGZvciB0aGlzIHByb3BlcnR5LFxuICAgICAgICAgICAgICAvLyBzbyBqdXN0IGZvcndhcmQgYWxsIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBvYmplY3QuXG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjYWNoZSwgcHJvcCwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuXG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FjaGVbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgc2V0KHByb3h5VGFyZ2V0LCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICAgIGlmIChwcm9wIGluIGNhY2hlKSB7XG4gICAgICAgICAgICAgIGNhY2hlW3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGRlZmluZVByb3BlcnR5KHByb3h5VGFyZ2V0LCBwcm9wLCBkZXNjKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShjYWNoZSwgcHJvcCwgZGVzYyk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGRlbGV0ZVByb3BlcnR5KHByb3h5VGFyZ2V0LCBwcm9wKSB7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShjYWNoZSwgcHJvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH07IC8vIFBlciBjb250cmFjdCBvZiB0aGUgUHJveHkgQVBJLCB0aGUgXCJnZXRcIiBwcm94eSBoYW5kbGVyIG11c3QgcmV0dXJuIHRoZVxuICAgICAgICAvLyBvcmlnaW5hbCB2YWx1ZSBvZiB0aGUgdGFyZ2V0IGlmIHRoYXQgdmFsdWUgaXMgZGVjbGFyZWQgcmVhZC1vbmx5IGFuZFxuICAgICAgICAvLyBub24tY29uZmlndXJhYmxlLiBGb3IgdGhpcyByZWFzb24sIHdlIGNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGVcbiAgICAgICAgLy8gcHJvdG90eXBlIHNldCB0byBgdGFyZ2V0YCBpbnN0ZWFkIG9mIHVzaW5nIGB0YXJnZXRgIGRpcmVjdGx5LlxuICAgICAgICAvLyBPdGhlcndpc2Ugd2UgY2Fubm90IHJldHVybiBhIGN1c3RvbSBvYmplY3QgZm9yIEFQSXMgdGhhdFxuICAgICAgICAvLyBhcmUgZGVjbGFyZWQgcmVhZC1vbmx5IGFuZCBub24tY29uZmlndXJhYmxlLCBzdWNoIGFzIGBjaHJvbWUuZGV2dG9vbHNgLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGUgcHJveHkgaGFuZGxlcnMgdGhlbXNlbHZlcyB3aWxsIHN0aWxsIHVzZSB0aGUgb3JpZ2luYWwgYHRhcmdldGBcbiAgICAgICAgLy8gaW5zdGVhZCBvZiB0aGUgYHByb3h5VGFyZ2V0YCwgc28gdGhhdCB0aGUgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBhcmVcbiAgICAgICAgLy8gZGVyZWZlcmVuY2VkIHZpYSB0aGUgb3JpZ2luYWwgdGFyZ2V0cy5cblxuICAgICAgICBsZXQgcHJveHlUYXJnZXQgPSBPYmplY3QuY3JlYXRlKHRhcmdldCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkocHJveHlUYXJnZXQsIGhhbmRsZXJzKTtcbiAgICAgIH07XG4gICAgICAvKipcbiAgICAgICAqIENyZWF0ZXMgYSBzZXQgb2Ygd3JhcHBlciBmdW5jdGlvbnMgZm9yIGFuIGV2ZW50IG9iamVjdCwgd2hpY2ggaGFuZGxlc1xuICAgICAgICogd3JhcHBpbmcgb2YgbGlzdGVuZXIgZnVuY3Rpb25zIHRoYXQgdGhvc2UgbWVzc2FnZXMgYXJlIHBhc3NlZC5cbiAgICAgICAqXG4gICAgICAgKiBBIHNpbmdsZSB3cmFwcGVyIGlzIGNyZWF0ZWQgZm9yIGVhY2ggbGlzdGVuZXIgZnVuY3Rpb24sIGFuZCBzdG9yZWQgaW4gYVxuICAgICAgICogbWFwLiBTdWJzZXF1ZW50IGNhbGxzIHRvIGBhZGRMaXN0ZW5lcmAsIGBoYXNMaXN0ZW5lcmAsIG9yIGByZW1vdmVMaXN0ZW5lcmBcbiAgICAgICAqIHJldHJpZXZlIHRoZSBvcmlnaW5hbCB3cmFwcGVyLCBzbyB0aGF0ICBhdHRlbXB0cyB0byByZW1vdmUgYVxuICAgICAgICogcHJldmlvdXNseS1hZGRlZCBsaXN0ZW5lciB3b3JrIGFzIGV4cGVjdGVkLlxuICAgICAgICpcbiAgICAgICAqIEBwYXJhbSB7RGVmYXVsdFdlYWtNYXA8ZnVuY3Rpb24sIGZ1bmN0aW9uPn0gd3JhcHBlck1hcFxuICAgICAgICogICAgICAgIEEgRGVmYXVsdFdlYWtNYXAgb2JqZWN0IHdoaWNoIHdpbGwgY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB3cmFwcGVyXG4gICAgICAgKiAgICAgICAgZm9yIGEgZ2l2ZW4gbGlzdGVuZXIgZnVuY3Rpb24gd2hlbiBvbmUgZG9lcyBub3QgZXhpc3QsIGFuZCByZXRyaWV2ZVxuICAgICAgICogICAgICAgIGFuIGV4aXN0aW5nIG9uZSB3aGVuIGl0IGRvZXMuXG4gICAgICAgKlxuICAgICAgICogQHJldHVybnMge29iamVjdH1cbiAgICAgICAqL1xuXG5cbiAgICAgIGNvbnN0IHdyYXBFdmVudCA9IHdyYXBwZXJNYXAgPT4gKHtcbiAgICAgICAgYWRkTGlzdGVuZXIodGFyZ2V0LCBsaXN0ZW5lciwgLi4uYXJncykge1xuICAgICAgICAgIHRhcmdldC5hZGRMaXN0ZW5lcih3cmFwcGVyTWFwLmdldChsaXN0ZW5lciksIC4uLmFyZ3MpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGhhc0xpc3RlbmVyKHRhcmdldCwgbGlzdGVuZXIpIHtcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0Lmhhc0xpc3RlbmVyKHdyYXBwZXJNYXAuZ2V0KGxpc3RlbmVyKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBsaXN0ZW5lcikge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVMaXN0ZW5lcih3cmFwcGVyTWFwLmdldChsaXN0ZW5lcikpO1xuICAgICAgICB9XG5cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBvblJlcXVlc3RGaW5pc2hlZFdyYXBwZXJzID0gbmV3IERlZmF1bHRXZWFrTWFwKGxpc3RlbmVyID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuIGxpc3RlbmVyO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXcmFwcyBhbiBvblJlcXVlc3RGaW5pc2hlZCBsaXN0ZW5lciBmdW5jdGlvbiBzbyB0aGF0IGl0IHdpbGwgcmV0dXJuIGFcbiAgICAgICAgICogYGdldENvbnRlbnQoKWAgcHJvcGVydHkgd2hpY2ggcmV0dXJucyBhIGBQcm9taXNlYCByYXRoZXIgdGhhbiB1c2luZyBhXG4gICAgICAgICAqIGNhbGxiYWNrIEFQSS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IHJlcVxuICAgICAgICAgKiAgICAgICAgVGhlIEhBUiBlbnRyeSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBuZXR3b3JrIHJlcXVlc3QuXG4gICAgICAgICAqL1xuXG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG9uUmVxdWVzdEZpbmlzaGVkKHJlcSkge1xuICAgICAgICAgIGNvbnN0IHdyYXBwZWRSZXEgPSB3cmFwT2JqZWN0KHJlcSwge31cbiAgICAgICAgICAvKiB3cmFwcGVycyAqL1xuICAgICAgICAgICwge1xuICAgICAgICAgICAgZ2V0Q29udGVudDoge1xuICAgICAgICAgICAgICBtaW5BcmdzOiAwLFxuICAgICAgICAgICAgICBtYXhBcmdzOiAwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGlzdGVuZXIod3JhcHBlZFJlcSk7XG4gICAgICAgIH07XG4gICAgICB9KTsgLy8gS2VlcCB0cmFjayBpZiB0aGUgZGVwcmVjYXRpb24gd2FybmluZyBoYXMgYmVlbiBsb2dnZWQgYXQgbGVhc3Qgb25jZS5cblxuICAgICAgbGV0IGxvZ2dlZFNlbmRSZXNwb25zZURlcHJlY2F0aW9uV2FybmluZyA9IGZhbHNlO1xuICAgICAgY29uc3Qgb25NZXNzYWdlV3JhcHBlcnMgPSBuZXcgRGVmYXVsdFdlYWtNYXAobGlzdGVuZXIgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICByZXR1cm4gbGlzdGVuZXI7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdyYXBzIGEgbWVzc2FnZSBsaXN0ZW5lciBmdW5jdGlvbiBzbyB0aGF0IGl0IG1heSBzZW5kIHJlc3BvbnNlcyBiYXNlZCBvblxuICAgICAgICAgKiBpdHMgcmV0dXJuIHZhbHVlLCByYXRoZXIgdGhhbiBieSByZXR1cm5pbmcgYSBzZW50aW5lbCB2YWx1ZSBhbmQgY2FsbGluZyBhXG4gICAgICAgICAqIGNhbGxiYWNrLiBJZiB0aGUgbGlzdGVuZXIgZnVuY3Rpb24gcmV0dXJucyBhIFByb21pc2UsIHRoZSByZXNwb25zZSBpc1xuICAgICAgICAgKiBzZW50IHdoZW4gdGhlIHByb21pc2UgZWl0aGVyIHJlc29sdmVzIG9yIHJlamVjdHMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7Kn0gbWVzc2FnZVxuICAgICAgICAgKiAgICAgICAgVGhlIG1lc3NhZ2Ugc2VudCBieSB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjaGFubmVsLlxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gc2VuZGVyXG4gICAgICAgICAqICAgICAgICBEZXRhaWxzIGFib3V0IHRoZSBzZW5kZXIgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oKil9IHNlbmRSZXNwb25zZVxuICAgICAgICAgKiAgICAgICAgQSBjYWxsYmFjayB3aGljaCwgd2hlbiBjYWxsZWQgd2l0aCBhbiBhcmJpdHJhcnkgYXJndW1lbnQsIHNlbmRzXG4gICAgICAgICAqICAgICAgICB0aGF0IHZhbHVlIGFzIGEgcmVzcG9uc2UuXG4gICAgICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAgICAgKiAgICAgICAgVHJ1ZSBpZiB0aGUgd3JhcHBlZCBsaXN0ZW5lciByZXR1cm5lZCBhIFByb21pc2UsIHdoaWNoIHdpbGwgbGF0ZXJcbiAgICAgICAgICogICAgICAgIHlpZWxkIGEgcmVzcG9uc2UuIEZhbHNlIG90aGVyd2lzZS5cbiAgICAgICAgICovXG5cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gb25NZXNzYWdlKG1lc3NhZ2UsIHNlbmRlciwgc2VuZFJlc3BvbnNlKSB7XG4gICAgICAgICAgbGV0IGRpZENhbGxTZW5kUmVzcG9uc2UgPSBmYWxzZTtcbiAgICAgICAgICBsZXQgd3JhcHBlZFNlbmRSZXNwb25zZTtcbiAgICAgICAgICBsZXQgc2VuZFJlc3BvbnNlUHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgd3JhcHBlZFNlbmRSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgICBpZiAoIWxvZ2dlZFNlbmRSZXNwb25zZURlcHJlY2F0aW9uV2FybmluZykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihTRU5EX1JFU1BPTlNFX0RFUFJFQ0FUSU9OX1dBUk5JTkcsIG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICAgICAgICAgICAgICBsb2dnZWRTZW5kUmVzcG9uc2VEZXByZWNhdGlvbldhcm5pbmcgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZGlkQ2FsbFNlbmRSZXNwb25zZSA9IHRydWU7XG4gICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGxpc3RlbmVyKG1lc3NhZ2UsIHNlbmRlciwgd3JhcHBlZFNlbmRSZXNwb25zZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGlzUmVzdWx0VGhlbmFibGUgPSByZXN1bHQgIT09IHRydWUgJiYgaXNUaGVuYWJsZShyZXN1bHQpOyAvLyBJZiB0aGUgbGlzdGVuZXIgZGlkbid0IHJldHVybmVkIHRydWUgb3IgYSBQcm9taXNlLCBvciBjYWxsZWRcbiAgICAgICAgICAvLyB3cmFwcGVkU2VuZFJlc3BvbnNlIHN5bmNocm9ub3VzbHksIHdlIGNhbiBleGl0IGVhcmxpZXJcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoZXJlIHdpbGwgYmUgbm8gcmVzcG9uc2Ugc2VudCBmcm9tIHRoaXMgbGlzdGVuZXIuXG5cbiAgICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlICYmICFpc1Jlc3VsdFRoZW5hYmxlICYmICFkaWRDYWxsU2VuZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSAvLyBBIHNtYWxsIGhlbHBlciB0byBzZW5kIHRoZSBtZXNzYWdlIGlmIHRoZSBwcm9taXNlIHJlc29sdmVzXG4gICAgICAgICAgLy8gYW5kIGFuIGVycm9yIGlmIHRoZSBwcm9taXNlIHJlamVjdHMgKGEgd3JhcHBlZCBzZW5kTWVzc2FnZSBoYXNcbiAgICAgICAgICAvLyB0byB0cmFuc2xhdGUgdGhlIG1lc3NhZ2UgaW50byBhIHJlc29sdmVkIHByb21pc2Ugb3IgYSByZWplY3RlZFxuICAgICAgICAgIC8vIHByb21pc2UpLlxuXG5cbiAgICAgICAgICBjb25zdCBzZW5kUHJvbWlzZWRSZXN1bHQgPSBwcm9taXNlID0+IHtcbiAgICAgICAgICAgIHByb21pc2UudGhlbihtc2cgPT4ge1xuICAgICAgICAgICAgICAvLyBzZW5kIHRoZSBtZXNzYWdlIHZhbHVlLlxuICAgICAgICAgICAgICBzZW5kUmVzcG9uc2UobXNnKTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgLy8gU2VuZCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yIGlmIHRoZSByZWplY3RlZCB2YWx1ZVxuICAgICAgICAgICAgICAvLyBpcyBhbiBpbnN0YW5jZSBvZiBlcnJvciwgb3IgdGhlIG9iamVjdCBpdHNlbGYgb3RoZXJ3aXNlLlxuICAgICAgICAgICAgICBsZXQgbWVzc2FnZTtcblxuICAgICAgICAgICAgICBpZiAoZXJyb3IgJiYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgfHwgdHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09IFwic3RyaW5nXCIpKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZFwiO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc2VuZFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBfX21veldlYkV4dGVuc2lvblBvbHlmaWxsUmVqZWN0X186IHRydWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgIC8vIFByaW50IGFuIGVycm9yIG9uIHRoZSBjb25zb2xlIGlmIHVuYWJsZSB0byBzZW5kIHRoZSByZXNwb25zZS5cbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBzZW5kIG9uTWVzc2FnZSByZWplY3RlZCByZXBseVwiLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTsgLy8gSWYgdGhlIGxpc3RlbmVyIHJldHVybmVkIGEgUHJvbWlzZSwgc2VuZCB0aGUgcmVzb2x2ZWQgdmFsdWUgYXMgYVxuICAgICAgICAgIC8vIHJlc3VsdCwgb3RoZXJ3aXNlIHdhaXQgdGhlIHByb21pc2UgcmVsYXRlZCB0byB0aGUgd3JhcHBlZFNlbmRSZXNwb25zZVxuICAgICAgICAgIC8vIGNhbGxiYWNrIHRvIHJlc29sdmUgYW5kIHNlbmQgaXQgYXMgYSByZXNwb25zZS5cblxuXG4gICAgICAgICAgaWYgKGlzUmVzdWx0VGhlbmFibGUpIHtcbiAgICAgICAgICAgIHNlbmRQcm9taXNlZFJlc3VsdChyZXN1bHQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZW5kUHJvbWlzZWRSZXN1bHQoc2VuZFJlc3BvbnNlUHJvbWlzZSk7XG4gICAgICAgICAgfSAvLyBMZXQgQ2hyb21lIGtub3cgdGhhdCB0aGUgbGlzdGVuZXIgaXMgcmVwbHlpbmcuXG5cblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHdyYXBwZWRTZW5kTWVzc2FnZUNhbGxiYWNrID0gKHtcbiAgICAgICAgcmVqZWN0LFxuICAgICAgICByZXNvbHZlXG4gICAgICB9LCByZXBseSkgPT4ge1xuICAgICAgICBpZiAoZXh0ZW5zaW9uQVBJcy5ydW50aW1lLmxhc3RFcnJvcikge1xuICAgICAgICAgIC8vIERldGVjdCB3aGVuIG5vbmUgb2YgdGhlIGxpc3RlbmVycyByZXBsaWVkIHRvIHRoZSBzZW5kTWVzc2FnZSBjYWxsIGFuZCByZXNvbHZlXG4gICAgICAgICAgLy8gdGhlIHByb21pc2UgdG8gdW5kZWZpbmVkIGFzIGluIEZpcmVmb3guXG4gICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3dlYmV4dGVuc2lvbi1wb2x5ZmlsbC9pc3N1ZXMvMTMwXG4gICAgICAgICAgaWYgKGV4dGVuc2lvbkFQSXMucnVudGltZS5sYXN0RXJyb3IubWVzc2FnZSA9PT0gQ0hST01FX1NFTkRfTUVTU0FHRV9DQUxMQkFDS19OT19SRVNQT05TRV9NRVNTQUdFKSB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXh0ZW5zaW9uQVBJcy5ydW50aW1lLmxhc3RFcnJvci5tZXNzYWdlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlcGx5ICYmIHJlcGx5Ll9fbW96V2ViRXh0ZW5zaW9uUG9seWZpbGxSZWplY3RfXykge1xuICAgICAgICAgIC8vIENvbnZlcnQgYmFjayB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IgaW50b1xuICAgICAgICAgIC8vIGFuIEVycm9yIGluc3RhbmNlLlxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVwbHkubWVzc2FnZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUocmVwbHkpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB3cmFwcGVkU2VuZE1lc3NhZ2UgPSAobmFtZSwgbWV0YWRhdGEsIGFwaU5hbWVzcGFjZU9iaiwgLi4uYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCBtZXRhZGF0YS5taW5BcmdzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBhdCBsZWFzdCAke21ldGFkYXRhLm1pbkFyZ3N9ICR7cGx1cmFsaXplQXJndW1lbnRzKG1ldGFkYXRhLm1pbkFyZ3MpfSBmb3IgJHtuYW1lfSgpLCBnb3QgJHthcmdzLmxlbmd0aH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA+IG1ldGFkYXRhLm1heEFyZ3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGF0IG1vc3QgJHttZXRhZGF0YS5tYXhBcmdzfSAke3BsdXJhbGl6ZUFyZ3VtZW50cyhtZXRhZGF0YS5tYXhBcmdzKX0gZm9yICR7bmFtZX0oKSwgZ290ICR7YXJncy5sZW5ndGh9YCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHdyYXBwZWRDYiA9IHdyYXBwZWRTZW5kTWVzc2FnZUNhbGxiYWNrLmJpbmQobnVsbCwge1xuICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFyZ3MucHVzaCh3cmFwcGVkQ2IpO1xuICAgICAgICAgIGFwaU5hbWVzcGFjZU9iai5zZW5kTWVzc2FnZSguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzdGF0aWNXcmFwcGVycyA9IHtcbiAgICAgICAgZGV2dG9vbHM6IHtcbiAgICAgICAgICBuZXR3b3JrOiB7XG4gICAgICAgICAgICBvblJlcXVlc3RGaW5pc2hlZDogd3JhcEV2ZW50KG9uUmVxdWVzdEZpbmlzaGVkV3JhcHBlcnMpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBydW50aW1lOiB7XG4gICAgICAgICAgb25NZXNzYWdlOiB3cmFwRXZlbnQob25NZXNzYWdlV3JhcHBlcnMpLFxuICAgICAgICAgIG9uTWVzc2FnZUV4dGVybmFsOiB3cmFwRXZlbnQob25NZXNzYWdlV3JhcHBlcnMpLFxuICAgICAgICAgIHNlbmRNZXNzYWdlOiB3cmFwcGVkU2VuZE1lc3NhZ2UuYmluZChudWxsLCBcInNlbmRNZXNzYWdlXCIsIHtcbiAgICAgICAgICAgIG1pbkFyZ3M6IDEsXG4gICAgICAgICAgICBtYXhBcmdzOiAzXG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgdGFiczoge1xuICAgICAgICAgIHNlbmRNZXNzYWdlOiB3cmFwcGVkU2VuZE1lc3NhZ2UuYmluZChudWxsLCBcInNlbmRNZXNzYWdlXCIsIHtcbiAgICAgICAgICAgIG1pbkFyZ3M6IDIsXG4gICAgICAgICAgICBtYXhBcmdzOiAzXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHNldHRpbmdNZXRhZGF0YSA9IHtcbiAgICAgICAgY2xlYXI6IHtcbiAgICAgICAgICBtaW5BcmdzOiAxLFxuICAgICAgICAgIG1heEFyZ3M6IDFcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0OiB7XG4gICAgICAgICAgbWluQXJnczogMSxcbiAgICAgICAgICBtYXhBcmdzOiAxXG4gICAgICAgIH0sXG4gICAgICAgIHNldDoge1xuICAgICAgICAgIG1pbkFyZ3M6IDEsXG4gICAgICAgICAgbWF4QXJnczogMVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgYXBpTWV0YWRhdGEucHJpdmFjeSA9IHtcbiAgICAgICAgbmV0d29yazoge1xuICAgICAgICAgIFwiKlwiOiBzZXR0aW5nTWV0YWRhdGFcbiAgICAgICAgfSxcbiAgICAgICAgc2VydmljZXM6IHtcbiAgICAgICAgICBcIipcIjogc2V0dGluZ01ldGFkYXRhXG4gICAgICAgIH0sXG4gICAgICAgIHdlYnNpdGVzOiB7XG4gICAgICAgICAgXCIqXCI6IHNldHRpbmdNZXRhZGF0YVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHdyYXBPYmplY3QoZXh0ZW5zaW9uQVBJcywgc3RhdGljV3JhcHBlcnMsIGFwaU1ldGFkYXRhKTtcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBjaHJvbWUgIT0gXCJvYmplY3RcIiB8fCAhY2hyb21lIHx8ICFjaHJvbWUucnVudGltZSB8fCAhY2hyb21lLnJ1bnRpbWUuaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgc2NyaXB0IHNob3VsZCBvbmx5IGJlIGxvYWRlZCBpbiBhIGJyb3dzZXIgZXh0ZW5zaW9uLlwiKTtcbiAgICB9IC8vIFRoZSBidWlsZCBwcm9jZXNzIGFkZHMgYSBVTUQgd3JhcHBlciBhcm91bmQgdGhpcyBmaWxlLCB3aGljaCBtYWtlcyB0aGVcbiAgICAvLyBgbW9kdWxlYCB2YXJpYWJsZSBhdmFpbGFibGUuXG5cblxuICAgIG1vZHVsZS5leHBvcnRzID0gd3JhcEFQSXMoY2hyb21lKTtcbiAgfSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGJyb3dzZXI7XG4gIH1cbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnJvd3Nlci1wb2x5ZmlsbC5qcy5tYXBcbiIsIlxyXG5jb25zdCB7dXBkYXRlQ2hlY2tlcn0gPSAgcmVxdWlyZShcIi4vdXBkYXRlQ2hlY2tlclwiKTtcclxuY29uc3Qge2luaXRpYWxpemVDb250ZXh0TWVudXN9ID0gcmVxdWlyZShcIi4vY29udGV4dE1lbnVzLmpzXCIpXHJcbmNvbnN0IHtpbml0aWFsaXplT21uaWJveEZlYXR1cmVzfSA9IHJlcXVpcmUoXCIuL3NlYXJjaC5qc1wiKVxyXG5cclxuY29uc29sZS5sb2coXCJzdGFydGluZyBiYWNrZ3JvdW5kIHNjcmlwdFwiKVxyXG5pbml0aWFsaXplQ29udGV4dE1lbnVzKCk7XHJcbmluaXRpYWxpemVPbW5pYm94RmVhdHVyZXMoKTtcclxudXBkYXRlQ2hlY2tlcigpOyIsImNvbnN0IGJyb3dzZXIgPSByZXF1aXJlKFwid2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCIpO1xuXG5mdW5jdGlvbiBvbkNyZWF0ZWQoKSB7XG4gIGlmIChicm93c2VyLnJ1bnRpbWUubGFzdEVycm9yKSB7XG4gICAgY29uc29sZS5sb2coYEVycm9yOiAke2Jyb3dzZXIucnVudGltZS5sYXN0RXJyb3J9YCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXCJDb250ZXh0IG1lbnUgaXRlbSBjcmVhdGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb3B5VG9DbGlwYm9hcmQodGV4dCwgaHRtbCkge1xuICBmdW5jdGlvbiBvbmNvcHkoZXZlbnQpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29weVwiLCBvbmNvcHksIHRydWUpO1xuICAgIC8vIEhpZGUgdGhlIGV2ZW50IGZyb20gdGhlIHBhZ2UgdG8gcHJldmVudCB0YW1wZXJpbmcuXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBPdmVyd3JpdGUgdGhlIGNsaXBib2FyZCBjb250ZW50LlxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKFwidGV4dC9wbGFpblwiLCB0ZXh0KTtcbiAgICBldmVudC5jbGlwYm9hcmREYXRhLnNldERhdGEoXCJ0ZXh0L2h0bWxcIiwgaHRtbCk7XG4gIH1cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNvcHlcIiwgb25jb3B5LCB0cnVlKTtcblxuICAvLyBSZXF1aXJlcyB0aGUgY2xpcGJvYXJkV3JpdGUgcGVybWlzc2lvbiwgb3IgYSB1c2VyIGdlc3R1cmU6XG4gIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbnRleHRNZW51cygpIHtcbiAgYnJvd3Nlci5jb250ZXh0TWVudXMuY3JlYXRlKHtcbiAgICBpZDogXCJ0ZXh0LXNlbGVjdGlvbi10by1jbGlwYm9hcmQtYXMtcXVvdGF0aW9uXCIsXG4gICAgdGl0bGU6IFwiQ29weSBzZWxlY3RlZCB0ZXh0IGFzIHF1b3RhdGlvblwiLFxuICAgIGNvbnRleHRzOiBbXCJzZWxlY3Rpb25cIl1cbiAgfSwgb25DcmVhdGVkKTtcblxuICBicm93c2VyLmNvbnRleHRNZW51cy5jcmVhdGUoe1xuICAgIGlkOiBcInBhZ2UtYWN0aW9uLXRvLWNsaXBib2FyZC1hcy1saW5rXCIsXG4gICAgdGl0bGU6IFwiQ29weSBsaW5rIHRvIHRoZSBjdXJyZW50IHBhZ2VcIixcbiAgICBjb250ZXh0czogW1wiYWxsXCIsIFwicGFnZV9hY3Rpb25cIl1cbiAgfSwgb25DcmVhdGVkKTtcblxuICBicm93c2VyLmNvbnRleHRNZW51cy5jcmVhdGUoe1xuICAgIGlkOiBcImxpbmstdG8tY2xpcGJvYXJkLWFzLWxpbmtcIixcbiAgICB0aXRsZTogXCJDb3B5IGxpbmtcIixcbiAgICBjb250ZXh0czogW1wibGlua1wiXVxuICB9LCBvbkNyZWF0ZWQpO1xuXG4gIGJyb3dzZXIuY29udGV4dE1lbnVzLm9uQ2xpY2tlZC5hZGRMaXN0ZW5lcihmdW5jdGlvbiAoaW5mbywgdGFiKSB7XG4gICAgbGV0IHRlbXBsYXRlXG4gICAgY29uc29sZS5kaXIoXCJpbmZvXCIsIGluZm8pXG4gICAgc3dpdGNoIChpbmZvLm1lbnVJdGVtSWQpIHtcbiAgICAgIGNhc2UgXCJ0ZXh0LXNlbGVjdGlvbi10by1jbGlwYm9hcmQtYXMtcXVvdGF0aW9uXCI6XG4gICAgICBsZXQgbGluZXMgPSBpbmZvLnNlbGVjdGlvblRleHQuc3BsaXQoYFxcbmApLm1hcChsID0+IGA+ICR7bH1gKS5qb2luKGBcXG5gKVxuICAgICAgdGVtcGxhdGUgPSBgJHtsaW5lc31cXG4+XFxuPiAmbWRhc2g7IF9Tb3VyY2U6IFske3RhYi50aXRsZX1dKCR7aW5mby5wYWdlVXJsfSlfYFxuICAgICAgY29weVRvQ2xpcGJvYXJkKHRlbXBsYXRlLCB0ZW1wbGF0ZSlcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInBhZ2UtYWN0aW9uLXRvLWNsaXBib2FyZC1hcy1saW5rXCI6XG4gICAgICB0ZW1wbGF0ZSA9IGBbJHt0YWIudGl0bGV9XSgke3RhYi51cmx9KWBcbiAgICAgIGNvcHlUb0NsaXBib2FyZCh0ZW1wbGF0ZSwgdGVtcGxhdGUpXG4gICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJsaW5rLXRvLWNsaXBib2FyZC1hcy1saW5rXCI6XG4gICAgICB0ZW1wbGF0ZSA9IGBbJHtpbmZvLmxpbmtUZXh0fV0oJHtpbmZvLmxpbmtVcmx9KWBcbiAgICAgIGNvcHlUb0NsaXBib2FyZCh0ZW1wbGF0ZSwgdGVtcGxhdGUpXG4gICAgICBicmVhaztcbiAgICB9XG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbml0aWFsaXplQ29udGV4dE1lbnVzXG59XG4iLCJjb25zdCBicm93c2VyID0gcmVxdWlyZShcIndlYmV4dGVuc2lvbi1wb2x5ZmlsbFwiKTtcblxuY29uc3QgaW5pdGlhbGl6ZU9tbmlib3hGZWF0dXJlcyA9ICgpID0+IHtcbiAgYnJvd3Nlci5vbW5pYm94LnNldERlZmF1bHRTdWdnZXN0aW9uKHtcbiAgICBkZXNjcmlwdGlvbjogYFNlYXJjaCBTZWN1cmUgU2N1dHRsZWJ1dHRgXG4gIH0pO1xuXG4gIGJyb3dzZXIub21uaWJveC5vbklucHV0RW50ZXJlZC5hZGRMaXN0ZW5lcigodGV4dCwgZGlzcG9zaXRpb24pID0+IHtcbiAgICBsZXQgcXVlcnkgPSBlbmNvZGVVUklDb21wb25lbnQodGV4dCk7XG4gICAgbGV0IHVybCA9IGAvaW5kZXguaHRtbD9xdWVyeT0ke3F1ZXJ5fSZwa2c9c2VhcmNoYDtcblxuICAgIHN3aXRjaCAoZGlzcG9zaXRpb24pIHtcbiAgICAgIGNhc2UgXCJjdXJyZW50VGFiXCI6XG4gICAgICBicm93c2VyLnRhYnMudXBkYXRlKHsgdXJsIH0pO1xuICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwibmV3Rm9yZWdyb3VuZFRhYlwiOlxuICAgICAgYnJvd3Nlci50YWJzLmNyZWF0ZSh7IHVybCB9KTtcbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm5ld0JhY2tncm91bmRUYWJcIjpcbiAgICAgIGJyb3dzZXIudGFicy5jcmVhdGUoeyB1cmwsIGFjdGl2ZTogZmFsc2UgfSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW5pdGlhbGl6ZU9tbmlib3hGZWF0dXJlc1xufVxuIiwiY29uc3QgYnJvd3NlciA9IHJlcXVpcmUoXCJ3ZWJleHRlbnNpb24tcG9seWZpbGxcIik7XG5cbmNvbnN0IHVwZGF0ZUNoZWNrZXIgPSAoKSA9PiB7XG4gIGZ1bmN0aW9uIGluc3RhbGxlZE9yVXBkYXRlZChkZXRhaWxzKSB7XG4gICAgbGV0IHVybDtcbiAgICBsZXQgdmVyc2lvbiA9IGJyb3dzZXIucnVudGltZS5nZXRNYW5pZmVzdCgpLnZlcnNpb247XG4gICAgbGV0IHByZXZpb3VzVmVyc2lvbiA9IGRldGFpbHMucHJldmlvdXNWZXJzaW9uO1xuICAgIHN3aXRjaCAoZGV0YWlscy5yZWFzb24pIHtcbiAgICAgIGNhc2UgXCJ1cGRhdGVcIjpcbiAgICAgIGlmICh2ZXJzaW9uICE9PSBwcmV2aW91c1ZlcnNpb24pIHtcbiAgICAgICAgdXJsID0gYnJvd3Nlci5leHRlbnNpb24uZ2V0VVJMKGAvZG9jcy9pbmRleC5odG1sIy9yZWxlYXNlX25vdGVzLyR7dmVyc2lvbn1gKTtcbiAgICAgICAgYnJvd3Nlci50YWJzLmNyZWF0ZSh7XG4gICAgICAgICAgdXJsOiBgJHt1cmx9YFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcImluc3RhbGxcIjpcbiAgICAgIHVybCA9IGJyb3dzZXIuZXh0ZW5zaW9uLmdldFVSTChcIi9kb2NzL2luZGV4Lmh0bWwjL2d1aWRlXCIpO1xuICAgICAgYnJvd3Nlci50YWJzLmNyZWF0ZSh7XG4gICAgICAgIHVybDogYCR7dXJsfWBcbiAgICAgIH0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgYnJvd3Nlci5ydW50aW1lLm9uSW5zdGFsbGVkLmFkZExpc3RlbmVyKGluc3RhbGxlZE9yVXBkYXRlZClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVwZGF0ZUNoZWNrZXJcbn1cbiJdfQ== diff --git a/dist/browserAction.js b/dist/browserAction.js index 626ce267..411096ba 100644 --- a/dist/browserAction.js +++ b/dist/browserAction.js @@ -131,4 +131,5 @@ keymage("f", goProfile); const version = browser.runtime.getManifest().version; document.getElementById("patchfox-header").innerText = `Patchfox ${version}`; -},{}]},{},[1]); +},{}]},{},[1]) +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvY29yZS9icm93c2VyQWN0aW9uL2Jyb3dzZXJBY3Rpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJcbmZ1bmN0aW9uIGdvUHVibGljKCkge1xuICBicm93c2VyLnRhYnMuY3JlYXRlKHtcbiAgICB1cmw6IFwiL2luZGV4Lmh0bWw/cGtnPWh1YlwiXG4gIH0pO1xuICB3aW5kb3cuY2xvc2UoKTtcbn1cblxuZnVuY3Rpb24gZ29Qb3B1bGFyKCkge1xuICBicm93c2VyLnRhYnMuY3JlYXRlKHtcbiAgICB1cmw6IFwiL2luZGV4Lmh0bWw/cGtnPWh1YiZ2aWV3PXBvcHVsYXJcIlxuICB9KTtcbiAgd2luZG93LmNsb3NlKCk7XG59XG5cbmZ1bmN0aW9uIGdvQ29tcG9zZSgpIHtcbiAgYnJvd3Nlci50YWJzLmNyZWF0ZSh7XG4gICAgdXJsOiBcIi9pbmRleC5odG1sP3BrZz1wb3N0JnZpZXc9Y29tcG9zZVwiXG4gIH0pO1xuICB3aW5kb3cuY2xvc2UoKTtcbn1cblxuZnVuY3Rpb24gZ29Qcm9maWxlKCkge1xuICBicm93c2VyLnRhYnMuY3JlYXRlKHtcbiAgICB1cmw6IFwiL2luZGV4Lmh0bWw/cGtnPWNvbnRhY3RzJnZpZXc9cHJvZmlsZVwiXG4gIH0pO1xuICB3aW5kb3cuY2xvc2UoKTtcbn1cblxuXG5mdW5jdGlvbiBnb01lbnRpb25zKCkge1xuICBicm93c2VyLnRhYnMuY3JlYXRlKHtcbiAgICB1cmw6IFwiL2luZGV4Lmh0bWw/cGtnPWh1YiZ2aWV3PW1lbnRpb25zXCJcbiAgfSk7XG4gIHdpbmRvdy5jbG9zZSgpO1xufVxuXG5cbmZ1bmN0aW9uIGdvQ2hhbm5lbHMoKSB7XG4gIGJyb3dzZXIudGFicy5jcmVhdGUoe1xuICAgIHVybDogXCIvaW5kZXguaHRtbD9wa2c9aHViJnZpZXc9Y2hhbm5lbHNcIlxuICB9KTtcbiAgd2luZG93LmNsb3NlKCk7XG59XG5cbmZ1bmN0aW9uIGdvU2V0dGluZ3MoKSB7XG4gIGJyb3dzZXIucnVudGltZS5vcGVuT3B0aW9uc1BhZ2UoKTtcbiAgd2luZG93LmNsb3NlKCk7XG59XG5cbmZ1bmN0aW9uIGdvSGVscCgpIHtcbiAgY29uc3QgdXJsID0gYnJvd3Nlci5leHRlbnNpb24uZ2V0VVJMKFwiZG9jcy9pbmRleC5odG1sXCIpO1xuICBicm93c2VyLnRhYnMuY3JlYXRlKHtcbiAgICB1cmw6IGAke3VybH0jLz9pZD1yZWFkbWVgXG4gIH0pO1xuICB3aW5kb3cuY2xvc2UoKTtcbn1cblxuXG5mdW5jdGlvbiBnb1JlbGVhc2VOb3RlcygpIHtcbiAgY29uc3QgdmVyc2lvbiA9IGJyb3dzZXIucnVudGltZS5nZXRNYW5pZmVzdCgpLnZlcnNpb247XG4gIGNvbnN0IHVybCA9IGJyb3dzZXIuZXh0ZW5zaW9uLmdldFVSTChgL2RvY3MvaW5kZXguaHRtbCMvcmVsZWFzZV9ub3Rlcy8ke3ZlcnNpb259YCk7XG4gIGJyb3dzZXIudGFicy5jcmVhdGUoe1xuICAgIHVybDogYCR7dXJsfSMvP2lkPXJlYWRtZWBcbiAgfSk7XG4gIHdpbmRvdy5jbG9zZSgpO1xufVxuXG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm9wdGlvbnMtdHJpZ2dlclwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2KSA9PiB7XG4gIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICBnb1NldHRpbmdzKCk7XG59KTtcblxuXG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvLXRvLXB1YmxpY1wiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2KSA9PiB7XG4gIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICBnb1B1YmxpYygpO1xufSk7XG5cbmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ28tdG8tcG9wdWxhclwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2KSA9PiB7XG4gIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICBnb1BvcHVsYXIoKTtcbn0pO1xuXG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvLXRvLXByb2ZpbGVcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldikgPT4ge1xuICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgZ29Qcm9maWxlKCk7XG59KTtcblxuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb21wb3NlXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXYpID0+IHtcbiAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gIGdvQ29tcG9zZSgpO1xufSk7XG5cblxuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnby10by1oZWxwXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXYpID0+IHtcbiAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gIGdvSGVscCgpO1xufSk7XG5cblxuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnby10by1yZWxlYXNlLW5vdGVzXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXYpID0+IHtcbiAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gIGdvUmVsZWFzZU5vdGVzKCk7XG59KTtcblxuXG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvLXRvLW1lbnRpb25zXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXYpID0+IHtcbiAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gIGdvTWVudGlvbnMoKTtcbn0pO1xuXG5rZXltYWdlKFwicFwiLCBnb1B1YmxpYyk7XG5rZXltYWdlKFwib1wiLCBnb1BvcHVsYXIpO1xua2V5bWFnZShcInNcIiwgZ29TZXR0aW5ncyk7XG5rZXltYWdlKFwiY1wiLCBnb0NvbXBvc2UpO1xua2V5bWFnZShcIm5cIiwgZ29DaGFubmVscyk7XG5rZXltYWdlKFwibVwiLCBnb01lbnRpb25zKTtcbmtleW1hZ2UoXCJmXCIsIGdvUHJvZmlsZSk7XG5cblxuY29uc3QgdmVyc2lvbiA9IGJyb3dzZXIucnVudGltZS5nZXRNYW5pZmVzdCgpLnZlcnNpb247XG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInBhdGNoZm94LWhlYWRlclwiKS5pbm5lclRleHQgPSBgUGF0Y2hmb3ggJHt2ZXJzaW9ufWA7XG4iXX0= diff --git a/dist/bundle.js b/dist/bundle.js index 7805449e..3b34a454 100644 --- a/dist/bundle.js +++ b/dist/bundle.js @@ -5769,6 +5769,7 @@ var objectKeys = Object.keys || function (obj) { }; }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + },{"object-assign":375,"util/":19}],17:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module @@ -6391,6 +6392,7 @@ function hasOwnProperty(obj, prop) { } }).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + },{"./support/isBuffer":18,"_process":390,"inherits":17}],20:[function(require,module,exports){ (function (global){(function (){ 'use strict'; @@ -6420,6 +6422,7 @@ module.exports = function availableTypedArrays() { }; }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + },{}],21:[function(require,module,exports){ 'use strict' @@ -11303,6 +11306,7 @@ exports.encrypt = function (self, chunk) { } }).call(this)}).call(this,require("buffer").Buffer) + },{"buffer":69,"buffer-xor":68}],41:[function(require,module,exports){ var aes = require('./aes') var Buffer = require('safe-buffer').Buffer @@ -11518,6 +11522,7 @@ crt.getr = getr module.exports = crt }).call(this)}).call(this,require("buffer").Buffer) + },{"bn.js":22,"buffer":69,"randombytes":451}],46:[function(require,module,exports){ module.exports = require('./browser/algorithms.json') @@ -12281,6 +12286,7 @@ Object.defineProperty(Duplex.prototype, 'destroyed', { } }); }).call(this)}).call(this,require('_process')) + },{"./_stream_readable":55,"./_stream_writable":57,"_process":390,"inherits":193}],54:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // @@ -13448,6 +13454,7 @@ function indexOf(xs, x) { return -1; } }).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + },{"../errors":52,"./_stream_duplex":53,"./internal/streams/async_iterator":58,"./internal/streams/buffer_list":59,"./internal/streams/destroy":60,"./internal/streams/from":62,"./internal/streams/state":64,"./internal/streams/stream":65,"_process":390,"buffer":69,"events":129,"inherits":193,"string_decoder/":571,"util":24}],56:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // @@ -14350,6 +14357,7 @@ Writable.prototype._destroy = function (err, cb) { cb(err); }; }).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + },{"../errors":52,"./_stream_duplex":53,"./internal/streams/destroy":60,"./internal/streams/state":64,"./internal/streams/stream":65,"_process":390,"buffer":69,"inherits":193,"util-deprecate":588}],58:[function(require,module,exports){ (function (process){(function (){ 'use strict'; @@ -14560,6 +14568,7 @@ var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterat module.exports = createReadableStreamAsyncIterator; }).call(this)}).call(this,require('_process')) + },{"./end-of-stream":61,"_process":390}],59:[function(require,module,exports){ 'use strict'; @@ -14879,6 +14888,7 @@ module.exports = { errorOrDestroy: errorOrDestroy }; }).call(this)}).call(this,require('_process')) + },{"_process":390}],61:[function(require,module,exports){ // Ported from https://github.com/mafintosh/end-of-stream with // permission from the author, Mathias Buus (@mafintosh). @@ -15145,6 +15155,7 @@ module.exports = function xor (a, b) { } }).call(this)}).call(this,require("buffer").Buffer) + },{"buffer":69}],69:[function(require,module,exports){ (function (Buffer){(function (){ /*! @@ -16926,6 +16937,7 @@ function numberIsNaN (obj) { } }).call(this)}).call(this,require("buffer").Buffer) + },{"base64-js":21,"buffer":69,"ieee754":192}],70:[function(require,module,exports){ module.exports = { "100": "Continue", @@ -17291,6 +17303,7 @@ function formatReturnValue (bn, enc, len) { } }).call(this)}).call(this,require("buffer").Buffer) + },{"bn.js":76,"buffer":69,"elliptic":103}],76:[function(require,module,exports){ arguments[4][15][0].apply(exports,arguments) },{"buffer":24,"dup":15}],77:[function(require,module,exports){ @@ -17923,6 +17936,7 @@ function arrayToObject(array) { }); return out; } + },{"libnested":208}],90:[function(require,module,exports){ 'use strict'; @@ -18646,6 +18660,7 @@ exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffi exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman }).call(this)}).call(this,require("buffer").Buffer) + },{"./lib/dh":97,"./lib/generatePrime":98,"./lib/primes.json":99,"buffer":69}],97:[function(require,module,exports){ (function (Buffer){(function (){ var BN = require('bn.js'); @@ -18814,6 +18829,7 @@ function formatReturnValue(bn, enc) { } }).call(this)}).call(this,require("buffer").Buffer) + },{"./generatePrime":98,"bn.js":100,"buffer":69,"miller-rabin":361,"randombytes":451}],98:[function(require,module,exports){ var randomBytes = require('randombytes'); module.exports = findPrime; @@ -24771,3808 +24787,6091 @@ module.exports = HashBase },{"inherits":193,"readable-stream":157,"safe-buffer":459}],143:[function(require,module,exports){ arguments[4][52][0].apply(exports,arguments) },{"dup":52}],144:[function(require,module,exports){ -arguments[4][53][0].apply(exports,arguments) -},{"./_stream_readable":146,"./_stream_writable":148,"_process":390,"dup":53,"inherits":193}],145:[function(require,module,exports){ -arguments[4][54][0].apply(exports,arguments) -},{"./_stream_transform":147,"dup":54,"inherits":193}],146:[function(require,module,exports){ -arguments[4][55][0].apply(exports,arguments) -},{"../errors":143,"./_stream_duplex":144,"./internal/streams/async_iterator":149,"./internal/streams/buffer_list":150,"./internal/streams/destroy":151,"./internal/streams/from":153,"./internal/streams/state":155,"./internal/streams/stream":156,"_process":390,"buffer":69,"dup":55,"events":129,"inherits":193,"string_decoder/":571,"util":24}],147:[function(require,module,exports){ -arguments[4][56][0].apply(exports,arguments) -},{"../errors":143,"./_stream_duplex":144,"dup":56,"inherits":193}],148:[function(require,module,exports){ -arguments[4][57][0].apply(exports,arguments) -},{"../errors":143,"./_stream_duplex":144,"./internal/streams/destroy":151,"./internal/streams/state":155,"./internal/streams/stream":156,"_process":390,"buffer":69,"dup":57,"inherits":193,"util-deprecate":588}],149:[function(require,module,exports){ -arguments[4][58][0].apply(exports,arguments) -},{"./end-of-stream":152,"_process":390,"dup":58}],150:[function(require,module,exports){ -arguments[4][59][0].apply(exports,arguments) -},{"buffer":69,"dup":59,"util":24}],151:[function(require,module,exports){ -arguments[4][60][0].apply(exports,arguments) -},{"_process":390,"dup":60}],152:[function(require,module,exports){ -arguments[4][61][0].apply(exports,arguments) -},{"../../../errors":143,"dup":61}],153:[function(require,module,exports){ -arguments[4][62][0].apply(exports,arguments) -},{"dup":62}],154:[function(require,module,exports){ -arguments[4][63][0].apply(exports,arguments) -},{"../../../errors":143,"./end-of-stream":152,"dup":63}],155:[function(require,module,exports){ -arguments[4][64][0].apply(exports,arguments) -},{"../../../errors":143,"dup":64}],156:[function(require,module,exports){ -arguments[4][65][0].apply(exports,arguments) -},{"dup":65,"events":129}],157:[function(require,module,exports){ -arguments[4][66][0].apply(exports,arguments) -},{"./lib/_stream_duplex.js":144,"./lib/_stream_passthrough.js":145,"./lib/_stream_readable.js":146,"./lib/_stream_transform.js":147,"./lib/_stream_writable.js":148,"./lib/internal/streams/end-of-stream.js":152,"./lib/internal/streams/pipeline.js":154,"dup":66}],158:[function(require,module,exports){ -var hash = exports; +(function (process){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. +'use strict'; +/**/ -hash.utils = require('./hash/utils'); -hash.common = require('./hash/common'); -hash.sha = require('./hash/sha'); -hash.ripemd = require('./hash/ripemd'); -hash.hmac = require('./hash/hmac'); +var objectKeys = Object.keys || function (obj) { + var keys = []; -// Proxy hash functions to the main object -hash.sha1 = hash.sha.sha1; -hash.sha256 = hash.sha.sha256; -hash.sha224 = hash.sha.sha224; -hash.sha384 = hash.sha.sha384; -hash.sha512 = hash.sha.sha512; -hash.ripemd160 = hash.ripemd.ripemd160; + for (var key in obj) { + keys.push(key); + } -},{"./hash/common":159,"./hash/hmac":160,"./hash/ripemd":161,"./hash/sha":162,"./hash/utils":169}],159:[function(require,module,exports){ -'use strict'; + return keys; +}; +/**/ -var utils = require('./utils'); -var assert = require('minimalistic-assert'); -function BlockHash() { - this.pending = null; - this.pendingTotal = 0; - this.blockSize = this.constructor.blockSize; - this.outSize = this.constructor.outSize; - this.hmacStrength = this.constructor.hmacStrength; - this.padLength = this.constructor.padLength / 8; - this.endian = 'big'; +module.exports = Duplex; - this._delta8 = this.blockSize / 8; - this._delta32 = this.blockSize / 32; -} -exports.BlockHash = BlockHash; +var Readable = require('./_stream_readable'); -BlockHash.prototype.update = function update(msg, enc) { - // Convert message to array, pad it, and join into 32bit blocks - msg = utils.toArray(msg, enc); - if (!this.pending) - this.pending = msg; - else - this.pending = this.pending.concat(msg); - this.pendingTotal += msg.length; +var Writable = require('./_stream_writable'); - // Enough data, try updating - if (this.pending.length >= this._delta8) { - msg = this.pending; +require('inherits')(Duplex, Readable); - // Process pending data in blocks - var r = msg.length % this._delta8; - this.pending = msg.slice(msg.length - r, msg.length); - if (this.pending.length === 0) - this.pending = null; +{ + // Allow the keys array to be GC'ed. + var keys = objectKeys(Writable.prototype); - msg = utils.join32(msg, 0, msg.length - r, this.endian); - for (var i = 0; i < msg.length; i += this._delta32) - this._update(msg, i, i + this._delta32); + for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; } +} - return this; -}; +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + Readable.call(this, options); + Writable.call(this, options); + this.allowHalfOpen = true; -BlockHash.prototype.digest = function digest(enc) { - this.update(this._pad()); - assert(this.pending === null); + if (options) { + if (options.readable === false) this.readable = false; + if (options.writable === false) this.writable = false; - return this._digest(enc); -}; + if (options.allowHalfOpen === false) { + this.allowHalfOpen = false; + this.once('end', onend); + } + } +} -BlockHash.prototype._pad = function pad() { - var len = this.pendingTotal; - var bytes = this._delta8; - var k = bytes - ((len + this.padLength) % bytes); - var res = new Array(k + this.padLength); - res[0] = 0x80; - for (var i = 1; i < k; i++) - res[i] = 0; +Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } +}); +Object.defineProperty(Duplex.prototype, 'writableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } +}); +Object.defineProperty(Duplex.prototype, 'writableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.length; + } +}); // the no-half-open enforcer - // Append length - len <<= 3; - if (this.endian === 'big') { - for (var t = 8; t < this.padLength; t++) - res[i++] = 0; +function onend() { + // If the writable side ended, then we're ok. + if (this._writableState.ended) return; // no more data can be written. + // But allow more writes to happen in this tick. - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = (len >>> 24) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = len & 0xff; - } else { - res[i++] = len & 0xff; - res[i++] = (len >>> 8) & 0xff; - res[i++] = (len >>> 16) & 0xff; - res[i++] = (len >>> 24) & 0xff; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; - res[i++] = 0; + process.nextTick(onEndNT, this); +} - for (t = 8; t < this.padLength; t++) - res[i++] = 0; - } +function onEndNT(self) { + self.end(); +} - return res; -}; +Object.defineProperty(Duplex.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._readableState === undefined || this._writableState === undefined) { + return false; + } -},{"./utils":169,"minimalistic-assert":363}],160:[function(require,module,exports){ -'use strict'; + return this._readableState.destroyed && this._writableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (this._readableState === undefined || this._writableState === undefined) { + return; + } // backward compatibility, the user is explicitly + // managing destroyed -var utils = require('./utils'); -var assert = require('minimalistic-assert'); -function Hmac(hash, key, enc) { - if (!(this instanceof Hmac)) - return new Hmac(hash, key, enc); - this.Hash = hash; - this.blockSize = hash.blockSize / 8; - this.outSize = hash.outSize / 8; - this.inner = null; - this.outer = null; + this._readableState.destroyed = value; + this._writableState.destroyed = value; + } +}); +}).call(this)}).call(this,require('_process')) - this._init(utils.toArray(key, enc)); -} -module.exports = Hmac; +},{"./_stream_readable":146,"./_stream_writable":148,"_process":390,"inherits":193}],145:[function(require,module,exports){ +arguments[4][54][0].apply(exports,arguments) +},{"./_stream_transform":147,"dup":54,"inherits":193}],146:[function(require,module,exports){ +(function (process,global){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +'use strict'; -Hmac.prototype._init = function init(key) { - // Shorten key, if needed - if (key.length > this.blockSize) - key = new this.Hash().update(key).digest(); - assert(key.length <= this.blockSize); +module.exports = Readable; +/**/ - // Add padding to key - for (var i = key.length; i < this.blockSize; i++) - key.push(0); +var Duplex; +/**/ - for (i = 0; i < key.length; i++) - key[i] ^= 0x36; - this.inner = new this.Hash().update(key); +Readable.ReadableState = ReadableState; +/**/ - // 0x36 ^ 0x5c = 0x6a - for (i = 0; i < key.length; i++) - key[i] ^= 0x6a; - this.outer = new this.Hash().update(key); -}; +var EE = require('events').EventEmitter; -Hmac.prototype.update = function update(msg, enc) { - this.inner.update(msg, enc); - return this; +var EElistenerCount = function EElistenerCount(emitter, type) { + return emitter.listeners(type).length; }; +/**/ -Hmac.prototype.digest = function digest(enc) { - this.outer.update(this.inner.digest()); - return this.outer.digest(enc); -}; +/**/ -},{"./utils":169,"minimalistic-assert":363}],161:[function(require,module,exports){ -'use strict'; -var utils = require('./utils'); -var common = require('./common'); +var Stream = require('./internal/streams/stream'); +/**/ -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_3 = utils.sum32_3; -var sum32_4 = utils.sum32_4; -var BlockHash = common.BlockHash; -function RIPEMD160() { - if (!(this instanceof RIPEMD160)) - return new RIPEMD160(); +var Buffer = require('buffer').Buffer; - BlockHash.call(this); +var OurUint8Array = global.Uint8Array || function () {}; - this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; - this.endian = 'little'; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); } -utils.inherits(RIPEMD160, BlockHash); -exports.ripemd160 = RIPEMD160; - -RIPEMD160.blockSize = 512; -RIPEMD160.outSize = 160; -RIPEMD160.hmacStrength = 192; -RIPEMD160.padLength = 64; -RIPEMD160.prototype._update = function update(msg, start) { - var A = this.h[0]; - var B = this.h[1]; - var C = this.h[2]; - var D = this.h[3]; - var E = this.h[4]; - var Ah = A; - var Bh = B; - var Ch = C; - var Dh = D; - var Eh = E; - for (var j = 0; j < 80; j++) { - var T = sum32( - rotl32( - sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), - s[j]), - E); - A = E; - E = D; - D = rotl32(C, 10); - C = B; - B = T; - T = sum32( - rotl32( - sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), - sh[j]), - Eh); - Ah = Eh; - Eh = Dh; - Dh = rotl32(Ch, 10); - Ch = Bh; - Bh = T; - } - T = sum32_3(this.h[1], C, Dh); - this.h[1] = sum32_3(this.h[2], D, Eh); - this.h[2] = sum32_3(this.h[3], E, Ah); - this.h[3] = sum32_3(this.h[4], A, Bh); - this.h[4] = sum32_3(this.h[0], B, Ch); - this.h[0] = T; -}; +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} +/**/ -RIPEMD160.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'little'); - else - return utils.split32(this.h, 'little'); -}; -function f(j, x, y, z) { - if (j <= 15) - return x ^ y ^ z; - else if (j <= 31) - return (x & y) | ((~x) & z); - else if (j <= 47) - return (x | (~y)) ^ z; - else if (j <= 63) - return (x & z) | (y & (~z)); - else - return x ^ (y | (~z)); -} +var debugUtil = require('util'); -function K(j) { - if (j <= 15) - return 0x00000000; - else if (j <= 31) - return 0x5a827999; - else if (j <= 47) - return 0x6ed9eba1; - else if (j <= 63) - return 0x8f1bbcdc; - else - return 0xa953fd4e; -} +var debug; -function Kh(j) { - if (j <= 15) - return 0x50a28be6; - else if (j <= 31) - return 0x5c4dd124; - else if (j <= 47) - return 0x6d703ef3; - else if (j <= 63) - return 0x7a6d76e9; - else - return 0x00000000; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function debug() {}; } +/**/ -var r = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 -]; -var rh = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 -]; +var BufferList = require('./internal/streams/buffer_list'); -var s = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 -]; +var destroyImpl = require('./internal/streams/destroy'); -var sh = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 -]; +var _require = require('./internal/streams/state'), + getHighWaterMark = _require.getHighWaterMark; -},{"./common":159,"./utils":169}],162:[function(require,module,exports){ -'use strict'; +var _require$codes = require('../errors').codes, + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance. -exports.sha1 = require('./sha/1'); -exports.sha224 = require('./sha/224'); -exports.sha256 = require('./sha/256'); -exports.sha384 = require('./sha/384'); -exports.sha512 = require('./sha/512'); -},{"./sha/1":163,"./sha/224":164,"./sha/256":165,"./sha/384":166,"./sha/512":167}],163:[function(require,module,exports){ -'use strict'; +var StringDecoder; +var createReadableStreamAsyncIterator; +var from; -var utils = require('../utils'); -var common = require('../common'); -var shaCommon = require('./common'); +require('inherits')(Readable, Stream); -var rotl32 = utils.rotl32; -var sum32 = utils.sum32; -var sum32_5 = utils.sum32_5; -var ft_1 = shaCommon.ft_1; -var BlockHash = common.BlockHash; +var errorOrDestroy = destroyImpl.errorOrDestroy; +var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; -var sha1_K = [ - 0x5A827999, 0x6ED9EBA1, - 0x8F1BBCDC, 0xCA62C1D6 -]; +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. -function SHA1() { - if (!(this instanceof SHA1)) - return new SHA1(); + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; +} - BlockHash.call(this); - this.h = [ - 0x67452301, 0xefcdab89, 0x98badcfe, - 0x10325476, 0xc3d2e1f0 ]; - this.W = new Array(80); -} +function ReadableState(options, stream, isDuplex) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. -utils.inherits(SHA1, BlockHash); -module.exports = SHA1; + if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away -SHA1.blockSize = 512; -SHA1.outSize = 160; -SHA1.hmacStrength = 80; -SHA1.padLength = 64; + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" -SHA1.prototype._update = function _update(msg, start) { - var W = this.W; + this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted + // immediately, or on a later tick. We set this to true at first, because + // any actions that shouldn't happen until "later" should generally also + // not happen before the first read call. - for(; i < W.length; i++) - W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); + this.sync = true; // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + this.paused = true; // Should close be emitted on destroy. Defaults to true. - for (i = 0; i < W.length; i++) { - var s = ~~(i / 20); - var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); - e = d; - d = c; - c = rotl32(b, 30); - b = a; - a = t; - } + this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish') - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); -}; + this.autoDestroy = !!options.autoDestroy; // has it been destroyed -SHA1.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; + this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. -},{"../common":159,"../utils":169,"./common":168}],164:[function(require,module,exports){ -'use strict'; + this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s -var utils = require('../utils'); -var SHA256 = require('./256'); + this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled -function SHA224() { - if (!(this instanceof SHA224)) - return new SHA224(); + this.readingMore = false; + this.decoder = null; + this.encoding = null; - SHA256.call(this); - this.h = [ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } } -utils.inherits(SHA224, SHA256); -module.exports = SHA224; -SHA224.blockSize = 512; -SHA224.outSize = 224; -SHA224.hmacStrength = 192; -SHA224.padLength = 64; +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside + // the ReadableState constructor, at least with V8 6.5 -SHA224.prototype._digest = function digest(enc) { - // Just truncate output - if (enc === 'hex') - return utils.toHex32(this.h.slice(0, 7), 'big'); - else - return utils.split32(this.h.slice(0, 7), 'big'); -}; + var isDuplex = this instanceof Duplex; + this._readableState = new ReadableState(options, this, isDuplex); // legacy + this.readable = true; -},{"../utils":169,"./256":165}],165:[function(require,module,exports){ -'use strict'; + if (options) { + if (typeof options.read === 'function') this._read = options.read; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + } -var utils = require('../utils'); -var common = require('../common'); -var shaCommon = require('./common'); -var assert = require('minimalistic-assert'); + Stream.call(this); +} -var sum32 = utils.sum32; -var sum32_4 = utils.sum32_4; -var sum32_5 = utils.sum32_5; -var ch32 = shaCommon.ch32; -var maj32 = shaCommon.maj32; -var s0_256 = shaCommon.s0_256; -var s1_256 = shaCommon.s1_256; -var g0_256 = shaCommon.g0_256; -var g1_256 = shaCommon.g1_256; +Object.defineProperty(Readable.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._readableState === undefined) { + return false; + } -var BlockHash = common.BlockHash; + return this._readableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._readableState) { + return; + } // backward compatibility, the user is explicitly + // managing destroyed -var sha256_K = [ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, - 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, - 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, - 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, - 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, - 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, - 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -]; -function SHA256() { - if (!(this instanceof SHA256)) - return new SHA256(); + this._readableState.destroyed = value; + } +}); +Readable.prototype.destroy = destroyImpl.destroy; +Readable.prototype._undestroy = destroyImpl.undestroy; - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, - 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 - ]; - this.k = sha256_K; - this.W = new Array(64); -} -utils.inherits(SHA256, BlockHash); -module.exports = SHA256; +Readable.prototype._destroy = function (err, cb) { + cb(err); +}; // Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. -SHA256.blockSize = 512; -SHA256.outSize = 256; -SHA256.hmacStrength = 192; -SHA256.padLength = 64; -SHA256.prototype._update = function _update(msg, start) { - var W = this.W; +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + var skipChunkCheck; - for (var i = 0; i < 16; i++) - W[i] = msg[start + i]; - for (; i < W.length; i++) - W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); + if (!state.objectMode) { + if (typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; - var a = this.h[0]; - var b = this.h[1]; - var c = this.h[2]; - var d = this.h[3]; - var e = this.h[4]; - var f = this.h[5]; - var g = this.h[6]; - var h = this.h[7]; + if (encoding !== state.encoding) { + chunk = Buffer.from(chunk, encoding); + encoding = ''; + } - assert(this.k.length === W.length); - for (i = 0; i < W.length; i++) { - var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); - var T2 = sum32(s0_256(a), maj32(a, b, c)); - h = g; - g = f; - f = e; - e = sum32(d, T1); - d = c; - c = b; - b = a; - a = sum32(T1, T2); + skipChunkCheck = true; + } + } else { + skipChunkCheck = true; } - this.h[0] = sum32(this.h[0], a); - this.h[1] = sum32(this.h[1], b); - this.h[2] = sum32(this.h[2], c); - this.h[3] = sum32(this.h[3], d); - this.h[4] = sum32(this.h[4], e); - this.h[5] = sum32(this.h[5], f); - this.h[6] = sum32(this.h[6], g); - this.h[7] = sum32(this.h[7], h); -}; + return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); +}; // Unshift should *always* be something directly out of read() -SHA256.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); + +Readable.prototype.unshift = function (chunk) { + return readableAddChunk(this, chunk, null, true, false); }; -},{"../common":159,"../utils":169,"./common":168,"minimalistic-assert":363}],166:[function(require,module,exports){ -'use strict'; +function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { + debug('readableAddChunk', chunk); + var state = stream._readableState; -var utils = require('../utils'); + if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else { + var er; + if (!skipChunkCheck) er = chunkInvalid(state, chunk); -var SHA512 = require('./512'); + if (er) { + errorOrDestroy(stream, er); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { + chunk = _uint8ArrayToBuffer(chunk); + } -function SHA384() { - if (!(this instanceof SHA384)) - return new SHA384(); + if (addToFront) { + if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true); + } else if (state.ended) { + errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF()); + } else if (state.destroyed) { + return false; + } else { + state.reading = false; - SHA512.call(this); - this.h = [ - 0xcbbb9d5d, 0xc1059ed8, - 0x629a292a, 0x367cd507, - 0x9159015a, 0x3070dd17, - 0x152fecd8, 0xf70e5939, - 0x67332667, 0xffc00b31, - 0x8eb44a87, 0x68581511, - 0xdb0c2e0d, 0x64f98fa7, - 0x47b5481d, 0xbefa4fa4 ]; -} -utils.inherits(SHA384, SHA512); -module.exports = SHA384; + if (state.decoder && !encoding) { + chunk = state.decoder.write(chunk); + if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); + } else { + addChunk(stream, state, chunk, false); + } + } + } else if (!addToFront) { + state.reading = false; + maybeReadMore(stream, state); + } + } // We can push more data if we are below the highWaterMark. + // Also, if we have no data yet, we can stand some more bytes. + // This is to work around cases where hwm=0, such as the repl. -SHA384.blockSize = 1024; -SHA384.outSize = 384; -SHA384.hmacStrength = 192; -SHA384.padLength = 128; -SHA384.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h.slice(0, 12), 'big'); - else - return utils.split32(this.h.slice(0, 12), 'big'); -}; + return !state.ended && (state.length < state.highWaterMark || state.length === 0); +} -},{"../utils":169,"./512":167}],167:[function(require,module,exports){ -'use strict'; +function addChunk(stream, state, chunk, addToFront) { + if (state.flowing && state.length === 0 && !state.sync) { + state.awaitDrain = 0; + stream.emit('data', chunk); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + if (state.needReadable) emitReadable(stream); + } -var utils = require('../utils'); -var common = require('../common'); -var assert = require('minimalistic-assert'); + maybeReadMore(stream, state); +} -var rotr64_hi = utils.rotr64_hi; -var rotr64_lo = utils.rotr64_lo; -var shr64_hi = utils.shr64_hi; -var shr64_lo = utils.shr64_lo; -var sum64 = utils.sum64; -var sum64_hi = utils.sum64_hi; -var sum64_lo = utils.sum64_lo; -var sum64_4_hi = utils.sum64_4_hi; -var sum64_4_lo = utils.sum64_4_lo; -var sum64_5_hi = utils.sum64_5_hi; -var sum64_5_lo = utils.sum64_5_lo; +function chunkInvalid(state, chunk) { + var er; -var BlockHash = common.BlockHash; + if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk); + } -var sha512_K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -]; + return er; +} -function SHA512() { - if (!(this instanceof SHA512)) - return new SHA512(); +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; // backwards compatibility. - BlockHash.call(this); - this.h = [ - 0x6a09e667, 0xf3bcc908, - 0xbb67ae85, 0x84caa73b, - 0x3c6ef372, 0xfe94f82b, - 0xa54ff53a, 0x5f1d36f1, - 0x510e527f, 0xade682d1, - 0x9b05688c, 0x2b3e6c1f, - 0x1f83d9ab, 0xfb41bd6b, - 0x5be0cd19, 0x137e2179 ]; - this.k = sha512_K; - this.W = new Array(160); -} -utils.inherits(SHA512, BlockHash); -module.exports = SHA512; -SHA512.blockSize = 1024; -SHA512.outSize = 512; -SHA512.hmacStrength = 192; -SHA512.padLength = 128; +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + var decoder = new StringDecoder(enc); + this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8 -SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { - var W = this.W; + this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers: - // 32 x 32bit words - for (var i = 0; i < 32; i++) - W[i] = msg[start + i]; - for (; i < W.length; i += 2) { - var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 - var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); - var c1_hi = W[i - 14]; // i - 7 - var c1_lo = W[i - 13]; - var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 - var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); - var c3_hi = W[i - 32]; // i - 16 - var c3_lo = W[i - 31]; + var p = this._readableState.buffer.head; + var content = ''; - W[i] = sum64_4_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); - W[i + 1] = sum64_4_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo); + while (p !== null) { + content += decoder.write(p.data); + p = p.next; } -}; -SHA512.prototype._update = function _update(msg, start) { - this._prepareBlock(msg, start); + this._readableState.buffer.clear(); - var W = this.W; + if (content !== '') this._readableState.buffer.push(content); + this._readableState.length = content.length; + return this; +}; // Don't raise the hwm > 1GB - var ah = this.h[0]; - var al = this.h[1]; - var bh = this.h[2]; - var bl = this.h[3]; - var ch = this.h[4]; - var cl = this.h[5]; - var dh = this.h[6]; - var dl = this.h[7]; - var eh = this.h[8]; - var el = this.h[9]; - var fh = this.h[10]; - var fl = this.h[11]; - var gh = this.h[12]; - var gl = this.h[13]; - var hh = this.h[14]; - var hl = this.h[15]; - assert(this.k.length === W.length); - for (var i = 0; i < W.length; i += 2) { - var c0_hi = hh; - var c0_lo = hl; - var c1_hi = s1_512_hi(eh, el); - var c1_lo = s1_512_lo(eh, el); - var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); - var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); - var c3_hi = this.k[i]; - var c3_lo = this.k[i + 1]; - var c4_hi = W[i]; - var c4_lo = W[i + 1]; +var MAX_HWM = 0x40000000; - var T1_hi = sum64_5_hi( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); - var T1_lo = sum64_5_lo( - c0_hi, c0_lo, - c1_hi, c1_lo, - c2_hi, c2_lo, - c3_hi, c3_lo, - c4_hi, c4_lo); +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE. + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } - c0_hi = s0_512_hi(ah, al); - c0_lo = s0_512_lo(ah, al); - c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); - c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); + return n; +} // This function is designed to be inlinable, so please take care when making +// changes to the function body. - var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); - var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); - hh = gh; - hl = gl; +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; - gh = fh; - gl = fl; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } // If we're asking for more than the current hwm, then raise the hwm. - fh = eh; - fl = el; - eh = sum64_hi(dh, dl, T1_hi, T1_lo); - el = sum64_lo(dl, dl, T1_hi, T1_lo); + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; // Don't have enough - dh = ch; - dl = cl; + if (!state.ended) { + state.needReadable = true; + return 0; + } - ch = bh; - cl = bl; + return state.length; +} // you can override either this method, or the async _read(n) below. - bh = ah; - bl = al; - ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); - al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + + if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; } - sum64(this.h, 0, ah, al); - sum64(this.h, 2, bh, bl); - sum64(this.h, 4, ch, cl); - sum64(this.h, 6, dh, dl); - sum64(this.h, 8, eh, el); - sum64(this.h, 10, fh, fl); - sum64(this.h, 12, gh, gl); - sum64(this.h, 14, hh, hl); -}; + n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. -SHA512.prototype._digest = function digest(enc) { - if (enc === 'hex') - return utils.toHex32(this.h, 'big'); - else - return utils.split32(this.h, 'big'); -}; + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + // if we need a readable event, then we need to do some reading. -function ch64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ ((~xh) & zh); - if (r < 0) - r += 0x100000000; - return r; -} -function ch64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ ((~xl) & zl); - if (r < 0) - r += 0x100000000; - return r; -} + var doRead = state.needReadable; + debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some -function maj64_hi(xh, xl, yh, yl, zh) { - var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); - if (r < 0) - r += 0x100000000; - return r; -} + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. -function maj64_lo(xh, xl, yh, yl, zh, zl) { - var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); - if (r < 0) - r += 0x100000000; - return r; -} -function s0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 28); - var c1_hi = rotr64_hi(xl, xh, 2); // 34 - var c2_hi = rotr64_hi(xl, xh, 7); // 39 + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; // if the length is currently zero, then we *need* a readable event. - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} + if (state.length === 0) state.needReadable = true; // call internal read method -function s0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 28); - var c1_lo = rotr64_lo(xl, xh, 2); // 34 - var c2_lo = rotr64_lo(xl, xh, 7); // 39 + this._read(state.highWaterMark); - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} + state.sync = false; // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. -function s1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 14); - var c1_hi = rotr64_hi(xh, xl, 18); - var c2_hi = rotr64_hi(xl, xh, 9); // 41 + if (!state.reading) n = howMuchToRead(nOrig, state); + } - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; -function s1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 14); - var c1_lo = rotr64_lo(xh, xl, 18); - var c2_lo = rotr64_lo(xl, xh, 9); // 41 + if (ret === null) { + state.needReadable = state.length <= state.highWaterMark; + n = 0; + } else { + state.length -= n; + state.awaitDrain = 0; + } - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. -function g0_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 1); - var c1_hi = rotr64_hi(xh, xl, 8); - var c2_hi = shr64_hi(xh, xl, 7); + if (nOrig !== n && state.ended) endReadable(this); + } - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} + if (ret !== null) this.emit('data', ret); + return ret; +}; -function g0_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 1); - var c1_lo = rotr64_lo(xh, xl, 8); - var c2_lo = shr64_lo(xh, xl, 7); +function onEofChunk(stream, state) { + debug('onEofChunk'); + if (state.ended) return; - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} + if (state.decoder) { + var chunk = state.decoder.end(); -function g1_512_hi(xh, xl) { - var c0_hi = rotr64_hi(xh, xl, 19); - var c1_hi = rotr64_hi(xl, xh, 29); // 61 - var c2_hi = shr64_hi(xh, xl, 6); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } - var r = c0_hi ^ c1_hi ^ c2_hi; - if (r < 0) - r += 0x100000000; - return r; -} + state.ended = true; -function g1_512_lo(xh, xl) { - var c0_lo = rotr64_lo(xh, xl, 19); - var c1_lo = rotr64_lo(xl, xh, 29); // 61 - var c2_lo = shr64_lo(xh, xl, 6); + if (state.sync) { + // if we are sync, wait until next tick to emit the data. + // Otherwise we risk emitting data in the flow() + // the readable code triggers during a read() call + emitReadable(stream); + } else { + // emit 'readable' now to make sure it gets picked up. + state.needReadable = false; - var r = c0_lo ^ c1_lo ^ c2_lo; - if (r < 0) - r += 0x100000000; - return r; -} + if (!state.emittedReadable) { + state.emittedReadable = true; + emitReadable_(stream); + } + } +} // Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. -},{"../common":159,"../utils":169,"minimalistic-assert":363}],168:[function(require,module,exports){ -'use strict'; -var utils = require('../utils'); -var rotr32 = utils.rotr32; +function emitReadable(stream) { + var state = stream._readableState; + debug('emitReadable', state.needReadable, state.emittedReadable); + state.needReadable = false; -function ft_1(s, x, y, z) { - if (s === 0) - return ch32(x, y, z); - if (s === 1 || s === 3) - return p32(x, y, z); - if (s === 2) - return maj32(x, y, z); + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + process.nextTick(emitReadable_, stream); + } } -exports.ft_1 = ft_1; -function ch32(x, y, z) { - return (x & y) ^ ((~x) & z); -} -exports.ch32 = ch32; +function emitReadable_(stream) { + var state = stream._readableState; + debug('emitReadable_', state.destroyed, state.length, state.ended); -function maj32(x, y, z) { - return (x & y) ^ (x & z) ^ (y & z); -} -exports.maj32 = maj32; + if (!state.destroyed && (state.length || state.ended)) { + stream.emit('readable'); + state.emittedReadable = false; + } // The stream needs another readable event if + // 1. It is not flowing, as the flow mechanism will take + // care of it. + // 2. It is not ended. + // 3. It is below the highWaterMark, so we can schedule + // another readable later. -function p32(x, y, z) { - return x ^ y ^ z; -} -exports.p32 = p32; -function s0_256(x) { - return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); -} -exports.s0_256 = s0_256; + state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark; + flow(stream); +} // at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. -function s1_256(x) { - return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); -} -exports.s1_256 = s1_256; -function g0_256(x) { - return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + process.nextTick(maybeReadMore_, stream, state); + } } -exports.g0_256 = g0_256; -function g1_256(x) { - return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); -} -exports.g1_256 = g1_256; +function maybeReadMore_(stream, state) { + // Attempt to read more data if we should. + // + // The conditions for reading more data are (one of): + // - Not enough data buffered (state.length < state.highWaterMark). The loop + // is responsible for filling the buffer with enough data if such data + // is available. If highWaterMark is 0 and we are not in the flowing mode + // we should _not_ attempt to buffer any extra data. We'll get more data + // when the stream consumer calls read() instead. + // - No data in the buffer, and the stream is in flowing mode. In this mode + // the loop below is responsible for ensuring read() is called. Failing to + // call read here would abort the flow and there's no other mechanism for + // continuing the flow if the stream consumer has just subscribed to the + // 'data' event. + // + // In addition to the above conditions to keep reading data, the following + // conditions prevent the data from being read: + // - The stream has ended (state.ended). + // - There is already a pending 'read' operation (state.reading). This is a + // case where the the stream has called the implementation defined _read() + // method, but they are processing the call asynchronously and have _not_ + // called push() with new data. In this case we skip performing more + // read()s. The execution ends in this method again after the _read() ends + // up calling push() with more data. + while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) { + var len = state.length; + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) // didn't get any data, stop spinning. + break; + } -},{"../utils":169}],169:[function(require,module,exports){ -'use strict'; + state.readingMore = false; +} // abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); -exports.inherits = inherits; +Readable.prototype._read = function (n) { + errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()')); +}; -function isSurrogatePair(msg, i) { - if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { - return false; - } - if (i < 0 || i + 1 >= msg.length) { - return false; +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + + case 1: + state.pipes = [state.pipes, dest]; + break; + + default: + state.pipes.push(dest); + break; } - return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; -} -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg === 'string') { - if (!enc) { - // Inspired by stringToUtf8ByteArray() in closure-library by Google - // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 - // Apache License 2.0 - // https://github.com/google/closure-library/blob/master/LICENSE - var p = 0; - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - if (c < 128) { - res[p++] = c; - } else if (c < 2048) { - res[p++] = (c >> 6) | 192; - res[p++] = (c & 63) | 128; - } else if (isSurrogatePair(msg, i)) { - c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); - res[p++] = (c >> 18) | 240; - res[p++] = ((c >> 12) & 63) | 128; - res[p++] = ((c >> 6) & 63) | 128; - res[p++] = (c & 63) | 128; - } else { - res[p++] = (c >> 12) | 224; - res[p++] = ((c >> 6) & 63) | 128; - res[p++] = (c & 63) | 128; - } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + var endFn = doEnd ? onend : unpipe; + if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn); + dest.on('unpipe', onunpipe); + + function onunpipe(readable, unpipeInfo) { + debug('onunpipe'); + + if (readable === src) { + if (unpipeInfo && unpipeInfo.hasUnpiped === false) { + unpipeInfo.hasUnpiped = true; + cleanup(); } - } else if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); } - } else { - for (i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; } - return res; -} -exports.toArray = toArray; -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); - return res; -} -exports.toHex = toHex; + function onend() { + debug('onend'); + dest.end(); + } // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. -function htonl(w) { - var res = (w >>> 24) | - ((w >>> 8) & 0xff00) | - ((w << 8) & 0xff0000) | - ((w & 0xff) << 24); - return res >>> 0; -} -exports.htonl = htonl; -function toHex32(msg, endian) { - var res = ''; - for (var i = 0; i < msg.length; i++) { - var w = msg[i]; - if (endian === 'little') - w = htonl(w); - res += zero8(w.toString(16)); - } - return res; -} -exports.toHex32 = toHex32; + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + var cleanedUp = false; -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -exports.zero2 = zero2; + function cleanup() { + debug('cleanup'); // cleanup event handlers once the pipe is broken -function zero8(word) { - if (word.length === 7) - return '0' + word; - else if (word.length === 6) - return '00' + word; - else if (word.length === 5) - return '000' + word; - else if (word.length === 4) - return '0000' + word; - else if (word.length === 3) - return '00000' + word; - else if (word.length === 2) - return '000000' + word; - else if (word.length === 1) - return '0000000' + word; - else - return word; -} -exports.zero8 = zero8; + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', unpipe); + src.removeListener('data', ondata); + cleanedUp = true; // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. -function join32(msg, start, end, endian) { - var len = end - start; - assert(len % 4 === 0); - var res = new Array(len / 4); - for (var i = 0, k = start; i < res.length; i++, k += 4) { - var w; - if (endian === 'big') - w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; - else - w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; - res[i] = w >>> 0; + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); } - return res; -} -exports.join32 = join32; -function split32(msg, endian) { - var res = new Array(msg.length * 4); - for (var i = 0, k = 0; i < msg.length; i++, k += 4) { - var m = msg[i]; - if (endian === 'big') { - res[k] = m >>> 24; - res[k + 1] = (m >>> 16) & 0xff; - res[k + 2] = (m >>> 8) & 0xff; - res[k + 3] = m & 0xff; - } else { - res[k + 3] = m >>> 24; - res[k + 2] = (m >>> 16) & 0xff; - res[k + 1] = (m >>> 8) & 0xff; - res[k] = m & 0xff; + src.on('data', ondata); + + function ondata(chunk) { + debug('ondata'); + var ret = dest.write(chunk); + debug('dest.write', ret); + + if (ret === false) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', state.awaitDrain); + state.awaitDrain++; + } + + src.pause(); } - } - return res; -} -exports.split32 = split32; + } // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. -function rotr32(w, b) { - return (w >>> b) | (w << (32 - b)); -} -exports.rotr32 = rotr32; -function rotl32(w, b) { - return (w << b) | (w >>> (32 - b)); -} -exports.rotl32 = rotl32; + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er); + } // Make sure our error handler is attached before userland ones. -function sum32(a, b) { - return (a + b) >>> 0; -} -exports.sum32 = sum32; -function sum32_3(a, b, c) { - return (a + b + c) >>> 0; -} -exports.sum32_3 = sum32_3; + prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. -function sum32_4(a, b, c, d) { - return (a + b + c + d) >>> 0; -} -exports.sum32_4 = sum32_4; + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } -function sum32_5(a, b, c, d, e) { - return (a + b + c + d + e) >>> 0; -} -exports.sum32_5 = sum32_5; + dest.once('close', onclose); -function sum64(buf, pos, ah, al) { - var bh = buf[pos]; - var bl = buf[pos + 1]; + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - buf[pos] = hi >>> 0; - buf[pos + 1] = lo; -} -exports.sum64 = sum64; + dest.once('finish', onfinish); -function sum64_hi(ah, al, bh, bl) { - var lo = (al + bl) >>> 0; - var hi = (lo < al ? 1 : 0) + ah + bh; - return hi >>> 0; -} -exports.sum64_hi = sum64_hi; + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } // tell the dest that it's being piped to -function sum64_lo(ah, al, bh, bl) { - var lo = al + bl; - return lo >>> 0; -} -exports.sum64_lo = sum64_lo; -function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; + dest.emit('pipe', src); // start the flow if it hasn't been started already. - var hi = ah + bh + ch + dh + carry; - return hi >>> 0; -} -exports.sum64_4_hi = sum64_4_hi; + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } -function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { - var lo = al + bl + cl + dl; - return lo >>> 0; -} -exports.sum64_4_lo = sum64_4_lo; + return dest; +}; -function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var carry = 0; - var lo = al; - lo = (lo + bl) >>> 0; - carry += lo < al ? 1 : 0; - lo = (lo + cl) >>> 0; - carry += lo < cl ? 1 : 0; - lo = (lo + dl) >>> 0; - carry += lo < dl ? 1 : 0; - lo = (lo + el) >>> 0; - carry += lo < el ? 1 : 0; +function pipeOnDrain(src) { + return function pipeOnDrainFunctionResult() { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; - var hi = ah + bh + ch + dh + eh + carry; - return hi >>> 0; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; } -exports.sum64_5_hi = sum64_5_hi; -function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { - var lo = al + bl + cl + dl + el; +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + var unpipeInfo = { + hasUnpiped: false + }; // if we're not piping anywhere, then do nothing. - return lo >>> 0; -} -exports.sum64_5_lo = sum64_5_lo; + if (state.pipesCount === 0) return this; // just one destination. most common case. -function rotr64_hi(ah, al, num) { - var r = (al << (32 - num)) | (ah >>> num); - return r >>> 0; -} -exports.rotr64_hi = rotr64_hi; + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + if (!dest) dest = state.pipes; // got a match. -function rotr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.rotr64_lo = rotr64_lo; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this, unpipeInfo); + return this; + } // slow case. multiple pipe destinations. -function shr64_hi(ah, al, num) { - return ah >>> num; -} -exports.shr64_hi = shr64_hi; -function shr64_lo(ah, al, num) { - var r = (ah << (32 - num)) | (al >>> num); - return r >>> 0; -} -exports.shr64_lo = shr64_lo; + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; -},{"inherits":193,"minimalistic-assert":363}],170:[function(require,module,exports){ -'use strict'; + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this, { + hasUnpiped: false + }); + } -var hash = require('hash.js'); -var utils = require('minimalistic-crypto-utils'); -var assert = require('minimalistic-assert'); + return this; + } // try to find the right one. -function HmacDRBG(options) { - if (!(this instanceof HmacDRBG)) - return new HmacDRBG(options); - this.hash = options.hash; - this.predResist = !!options.predResist; - this.outLen = this.hash.outSize; - this.minEntropy = options.minEntropy || this.hash.hmacStrength; + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + dest.emit('unpipe', this, unpipeInfo); + return this; +}; // set up data events if they are asked for +// Ensure readable listeners eventually get something - this._reseed = null; - this.reseedInterval = null; - this.K = null; - this.V = null; - var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); - var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); - var pers = utils.toArray(options.pers, options.persEnc || 'hex'); - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); - this._init(entropy, nonce, pers); -} -module.exports = HmacDRBG; +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + var state = this._readableState; -HmacDRBG.prototype._init = function init(entropy, nonce, pers) { - var seed = entropy.concat(nonce).concat(pers); + if (ev === 'data') { + // update readableListening so that resume() may be a no-op + // a few lines down. This is needed to support once('readable'). + state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused - this.K = new Array(this.outLen / 8); - this.V = new Array(this.outLen / 8); - for (var i = 0; i < this.V.length; i++) { - this.K[i] = 0x00; - this.V[i] = 0x01; - } + if (state.flowing !== false) this.resume(); + } else if (ev === 'readable') { + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.flowing = false; + state.emittedReadable = false; + debug('on readable', state.length, state.reading); - this._update(seed); - this._reseed = 1; - this.reseedInterval = 0x1000000000000; // 2^48 -}; + if (state.length) { + emitReadable(this); + } else if (!state.reading) { + process.nextTick(nReadingNextTick, this); + } + } + } -HmacDRBG.prototype._hmac = function hmac() { - return new hash.hmac(this.hash, this.K); + return res; }; -HmacDRBG.prototype._update = function update(seed) { - var kmac = this._hmac() - .update(this.V) - .update([ 0x00 ]); - if (seed) - kmac = kmac.update(seed); - this.K = kmac.digest(); - this.V = this._hmac().update(this.V).digest(); - if (!seed) - return; +Readable.prototype.addListener = Readable.prototype.on; - this.K = this._hmac() - .update(this.V) - .update([ 0x01 ]) - .update(seed) - .digest(); - this.V = this._hmac().update(this.V).digest(); -}; +Readable.prototype.removeListener = function (ev, fn) { + var res = Stream.prototype.removeListener.call(this, ev, fn); -HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { - // Optional entropy enc - if (typeof entropyEnc !== 'string') { - addEnc = add; - add = entropyEnc; - entropyEnc = null; + if (ev === 'readable') { + // We need to check if there is someone still listening to + // readable and reset the state. However this needs to happen + // after readable has been emitted but before I/O (nextTick) to + // support once('readable', fn) cycles. This means that calling + // resume within the same tick will have no + // effect. + process.nextTick(updateReadableListening, this); } - entropy = utils.toArray(entropy, entropyEnc); - add = utils.toArray(add, addEnc); + return res; +}; - assert(entropy.length >= (this.minEntropy / 8), - 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); +Readable.prototype.removeAllListeners = function (ev) { + var res = Stream.prototype.removeAllListeners.apply(this, arguments); - this._update(entropy.concat(add || [])); - this._reseed = 1; + if (ev === 'readable' || ev === undefined) { + // We need to check if there is someone still listening to + // readable and reset the state. However this needs to happen + // after readable has been emitted but before I/O (nextTick) to + // support once('readable', fn) cycles. This means that calling + // resume within the same tick will have no + // effect. + process.nextTick(updateReadableListening, this); + } + + return res; }; -HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { - if (this._reseed > this.reseedInterval) - throw new Error('Reseed is required'); +function updateReadableListening(self) { + var state = self._readableState; + state.readableListening = self.listenerCount('readable') > 0; - // Optional encoding - if (typeof enc !== 'string') { - addEnc = add; - add = enc; - enc = null; + if (state.resumeScheduled && !state.paused) { + // flowing needs to be set to true now, otherwise + // the upcoming resume will not flow. + state.flowing = true; // crude way to check if we should resume + } else if (self.listenerCount('data') > 0) { + self.resume(); } +} - // Optional additional data - if (add) { - add = utils.toArray(add, addEnc || 'hex'); - this._update(add); - } +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} // pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. - var temp = []; - while (temp.length < len) { - this.V = this._hmac().update(this.V).digest(); - temp = temp.concat(this.V); + +Readable.prototype.resume = function () { + var state = this._readableState; + + if (!state.flowing) { + debug('resume'); // we flow only if there is no one listening + // for readable, but we still have to call + // resume() + + state.flowing = !state.readableListening; + resume(this, state); } - var res = temp.slice(0, len); - this._update(add); - this._reseed++; - return utils.encode(res, enc); + state.paused = false; + return this; }; -},{"hash.js":158,"minimalistic-assert":363,"minimalistic-crypto-utils":364}],171:[function(require,module,exports){ -var http = require('http') -var url = require('url') +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + process.nextTick(resume_, stream, state); + } +} -var https = module.exports +function resume_(stream, state) { + debug('resume', state.reading); -for (var key in http) { - if (http.hasOwnProperty(key)) https[key] = http[key] -} + if (!state.reading) { + stream.read(0); + } -https.request = function (params, cb) { - params = validateParams(params) - return http.request.call(this, params, cb) + state.resumeScheduled = false; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); } -https.get = function (params, cb) { - params = validateParams(params) - return http.get.call(this, params, cb) -} +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); -function validateParams (params) { - if (typeof params === 'string') { - params = url.parse(params) - } - if (!params.protocol) { - params.protocol = 'https:' - } - if (params.protocol !== 'https:') { - throw new Error('Protocol "' + params.protocol + '" not supported. Expected "https:"') + if (this._readableState.flowing !== false) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); } - return params -} -},{"http":551,"url":586}],172:[function(require,module,exports){ -"use strict"; + this._readableState.paused = true; + return this; +}; -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); -var _nanoid = require("nanoid"); + while (state.flowing && stream.read() !== null) { + ; + } +} // wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. -var _utils = require("./utils"); -var defaults = { - title: 'Untitled event', - productId: 'adamgibbons/ics', - method: 'PUBLISH', - uid: (0, _nanoid.nanoid)(), - timestamp: (0, _utils.formatDate)(null, 'utc'), - start: (0, _utils.formatDate)(null, 'utc') -}; -var _default = defaults; -exports["default"] = _default; -},{"./utils":183,"nanoid":372}],173:[function(require,module,exports){ -"use strict"; +Readable.prototype.wrap = function (stream) { + var _this = this; -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.createEvent = createEvent; -exports.createEvents = createEvents; + var state = this._readableState; + var paused = false; + stream.on('end', function () { + debug('wrapped end'); -var _nanoid = require("nanoid"); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) _this.push(chunk); + } -var _pipeline = require("./pipeline"); + _this.push(null); + }); + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode -function assignUniqueId(event) { - event.uid = event.uid || (0, _nanoid.nanoid)(); - return event; -} + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; -function validateAndBuildEvent(event) { - return (0, _pipeline.validateEvent)((0, _pipeline.buildEvent)(event)); -} + var ret = _this.push(chunk); -function applyInitialFormatting(_ref) { - var error = _ref.error, - value = _ref.value; + if (!ret) { + paused = true; + stream.pause(); + } + }); // proxy all the other methods. + // important when wrapping filters and duplexes. - if (error) { - return { - error: error, - value: null - }; - } + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function methodWrap(method) { + return function methodWrapReturnFunction() { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } // proxy certain important events. - return { - error: null, - value: (0, _pipeline.formatEvent)(value) - }; -} -function reformatEventsByPosition(_ref2, idx, list) { - var error = _ref2.error, - value = _ref2.value; - if (error) return { - error: error, - value: value + for (var n = 0; n < kProxyEvents.length; n++) { + stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); + } // when we try to consume some more bytes, simply unpause the + // underlying stream. + + + this._read = function (n) { + debug('wrapped _read', n); + + if (paused) { + paused = false; + stream.resume(); + } }; - if (idx === 0) { - // beginning of list - return { - value: value.slice(0, value.indexOf('END:VCALENDAR')), - error: null - }; - } + return this; +}; - if (idx === list.length - 1) { - // end of list - return { - value: value.slice(value.indexOf('BEGIN:VEVENT')), - error: null - }; - } +if (typeof Symbol === 'function') { + Readable.prototype[Symbol.asyncIterator] = function () { + if (createReadableStreamAsyncIterator === undefined) { + createReadableStreamAsyncIterator = require('./internal/streams/async_iterator'); + } - return { - error: null, - value: value.slice(value.indexOf('BEGIN:VEVENT'), value.indexOf('END:VEVENT') + 12) + return createReadableStreamAsyncIterator(this); }; } -function catenateEvents(accumulator, _ref3, idx) { - var error = _ref3.error, - value = _ref3.value; - - if (error) { - accumulator.error = error; - accumulator.value = null; - return accumulator; +Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.highWaterMark; + } +}); +Object.defineProperty(Readable.prototype, 'readableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState && this._readableState.buffer; + } +}); +Object.defineProperty(Readable.prototype, 'readableFlowing', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.flowing; + }, + set: function set(state) { + if (this._readableState) { + this._readableState.flowing = state; + } } +}); // exposed for testing purposes only. - if (accumulator.value) { - accumulator.value = accumulator.value.concat(value); - return accumulator; +Readable._fromList = fromList; +Object.defineProperty(Readable.prototype, 'readableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._readableState.length; } +}); // Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. - accumulator.value = value; - return accumulator; +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = state.buffer.consume(n, state.decoder); + } + return ret; } -function createEvent(attributes, cb) { - if (!attributes) { - Error('Attributes argument is required'); +function endReadable(stream) { + var state = stream._readableState; + debug('endReadable', state.endEmitted); + + if (!state.endEmitted) { + state.ended = true; + process.nextTick(endReadableNT, state, stream); } +} - assignUniqueId(attributes); +function endReadableNT(state, stream) { + debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift. - if (!cb) { - // No callback, so return error or value in an object - var _validateAndBuildEven = validateAndBuildEvent(attributes), - _error = _validateAndBuildEven.error, - _value = _validateAndBuildEven.value; + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); - if (_error) return { - error: _error, - value: _value - }; - var event = ''; + if (state.autoDestroy) { + // In case of duplex streams we need a way to detect + // if the writable side is ready for autoDestroy as well + var wState = stream._writableState; - try { - event = (0, _pipeline.formatEvent)(_value); - } catch (error) { - return { - error: error, - value: null - }; + if (!wState || wState.autoDestroy && wState.finished) { + stream.destroy(); + } } - - return { - error: null, - value: event - }; - } // Return a node-style callback - - - var _validateAndBuildEven2 = validateAndBuildEvent(attributes), - error = _validateAndBuildEven2.error, - value = _validateAndBuildEven2.value; - - if (error) return cb(error); - return cb(null, (0, _pipeline.formatEvent)(value)); -} - -function createEvents(events, cb) { - if (!events) { - return { - error: Error('one argument is required'), - value: null - }; } +} - if (events.length === 1) { - return createEvent(events[0], cb); - } +if (typeof Symbol === 'function') { + Readable.from = function (iterable, opts) { + if (from === undefined) { + from = require('./internal/streams/from'); + } - var _events$map$map$map$m = events.map(assignUniqueId).map(validateAndBuildEvent).map(applyInitialFormatting).map(reformatEventsByPosition).reduce(catenateEvents, { - error: null, - value: null - }), - error = _events$map$map$map$m.error, - value = _events$map$map$map$m.value; + return from(Readable, iterable, opts); + }; +} - if (!cb) { - return { - error: error, - value: value - }; +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; } - return cb(error, value); + return -1; } -},{"./pipeline":176,"nanoid":372}],174:[function(require,module,exports){ -"use strict"; +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = buildEvent; +},{"../errors":143,"./_stream_duplex":144,"./internal/streams/async_iterator":149,"./internal/streams/buffer_list":150,"./internal/streams/destroy":151,"./internal/streams/from":153,"./internal/streams/state":155,"./internal/streams/stream":156,"_process":390,"buffer":69,"events":129,"inherits":193,"string_decoder/":571,"util":24}],147:[function(require,module,exports){ +arguments[4][56][0].apply(exports,arguments) +},{"../errors":143,"./_stream_duplex":144,"dup":56,"inherits":193}],148:[function(require,module,exports){ +(function (process,global){(function (){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. +'use strict'; -var _defaults = _interopRequireDefault(require("../defaults")); +module.exports = Writable; +/* */ -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} // It seems a linked list but it is not +// there will be only 2 of these for each stream -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function buildEvent() { - var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var title = attributes.title, - productId = attributes.productId, - method = attributes.method, - uid = attributes.uid, - sequence = attributes.sequence, - start = attributes.start, - startType = attributes.startType, - duration = attributes.duration, - end = attributes.end, - description = attributes.description, - url = attributes.url, - geo = attributes.geo, - location = attributes.location, - status = attributes.status, - categories = attributes.categories, - organizer = attributes.organizer, - attendees = attributes.attendees, - alarms = attributes.alarms, - recurrenceRule = attributes.recurrenceRule, - created = attributes.created, - lastModified = attributes.lastModified, - calName = attributes.calName; // fill in default values where necessary +function CorkedRequest(state) { + var _this = this; - var output = Object.assign({}, _defaults["default"], attributes); // remove falsey values + this.next = null; + this.entry = null; - return Object.entries(output).reduce(function (clean, entry) { - return entry[1] ? Object.assign(clean, _defineProperty({}, entry[0], entry[1])) : clean; - }, {}); + this.finish = function () { + onCorkedFinish(_this, state); + }; } -},{"../defaults":172}],175:[function(require,module,exports){ -"use strict"; +/* */ -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = formatEvent; +/**/ -var _utils = require("../utils"); -function formatEvent() { - var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var title = attributes.title, - productId = attributes.productId, - method = attributes.method, - uid = attributes.uid, - sequence = attributes.sequence, - timestamp = attributes.timestamp, - start = attributes.start, - startType = attributes.startType, - startInputType = attributes.startInputType, - startOutputType = attributes.startOutputType, - duration = attributes.duration, - end = attributes.end, - endInputType = attributes.endInputType, - endOutputType = attributes.endOutputType, - description = attributes.description, - url = attributes.url, - geo = attributes.geo, - location = attributes.location, - status = attributes.status, - categories = attributes.categories, - organizer = attributes.organizer, - attendees = attributes.attendees, - alarms = attributes.alarms, - recurrenceRule = attributes.recurrenceRule, - busyStatus = attributes.busyStatus, - created = attributes.created, - lastModified = attributes.lastModified, - calName = attributes.calName; - var icsFormat = ''; - icsFormat += 'BEGIN:VCALENDAR\r\n'; - icsFormat += 'VERSION:2.0\r\n'; - icsFormat += 'CALSCALE:GREGORIAN\r\n'; - icsFormat += (0, _utils.foldLine)("PRODID:".concat(productId)) + '\r\n'; - icsFormat += (0, _utils.foldLine)("METHOD:".concat(method)) + '\r\n'; - icsFormat += calName ? (0, _utils.foldLine)("X-WR-CALNAME:".concat(calName)) + '\r\n' : ''; - icsFormat += "X-PUBLISHED-TTL:PT1H\r\n"; - icsFormat += 'BEGIN:VEVENT\r\n'; - icsFormat += "UID:".concat(uid, "\r\n"); - icsFormat += (0, _utils.foldLine)("SUMMARY:".concat(title ? (0, _utils.setSummary)(title) : title)) + '\r\n'; - icsFormat += "DTSTAMP:".concat(timestamp, "\r\n"); // All day events like anniversaries must be specified as VALUE type DATE +var Duplex; +/**/ - icsFormat += "DTSTART".concat(start && start.length == 3 ? ";VALUE=DATE" : "", ":").concat((0, _utils.formatDate)(start, startOutputType || startType, startInputType), "\r\n"); // End is not required for all day events on single days (like anniversaries) +Writable.WritableState = WritableState; +/**/ - if (!end || end.length !== 3 || start.length !== end.length || start.some(function (val, i) { - return val !== end[i]; - })) { - if (end) { - icsFormat += "DTEND".concat(end.length === 3 ? ";VALUE=DATE" : "", ":").concat((0, _utils.formatDate)(end, endOutputType || startOutputType || startType, endInputType || startInputType), "\r\n"); - } - } +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ - icsFormat += sequence ? "SEQUENCE:".concat(sequence, "\r\n") : ''; - icsFormat += description ? (0, _utils.foldLine)("DESCRIPTION:".concat((0, _utils.setDescription)(description))) + '\r\n' : ''; - icsFormat += url ? (0, _utils.foldLine)("URL:".concat(url)) + '\r\n' : ''; - icsFormat += geo ? (0, _utils.foldLine)("GEO:".concat((0, _utils.setGeolocation)(geo))) + '\r\n' : ''; - icsFormat += location ? (0, _utils.foldLine)("LOCATION:".concat((0, _utils.setLocation)(location))) + '\r\n' : ''; - icsFormat += status ? (0, _utils.foldLine)("STATUS:".concat(status)) + '\r\n' : ''; - icsFormat += categories ? (0, _utils.foldLine)("CATEGORIES:".concat(categories)) + '\r\n' : ''; - icsFormat += organizer ? (0, _utils.foldLine)("ORGANIZER;".concat((0, _utils.setOrganizer)(organizer))) + '\r\n' : ''; - icsFormat += busyStatus ? (0, _utils.foldLine)("X-MICROSOFT-CDO-BUSYSTATUS:".concat(busyStatus)) + '\r\n' : ''; - icsFormat += created ? 'CREATED:' + (0, _utils.formatDate)(created) + '\r\n' : ''; - icsFormat += lastModified ? 'LAST-MODIFIED:' + (0, _utils.formatDate)(lastModified) + '\r\n' : ''; +/**/ - if (attendees) { - attendees.map(function (attendee) { - icsFormat += (0, _utils.foldLine)("ATTENDEE;".concat((0, _utils.setContact)(attendee))) + '\r\n'; - }); - } +var Stream = require('./internal/streams/stream'); +/**/ - if (alarms) { - alarms.map(function (alarm) { - icsFormat += (0, _utils.setAlarm)(alarm); - }); - } - icsFormat += recurrenceRule ? "RRULE:".concat(recurrenceRule, "\r\n") : ''; - icsFormat += duration ? "DURATION:".concat((0, _utils.formatDuration)(duration), "\r\n") : ''; - icsFormat += "END:VEVENT\r\n"; - icsFormat += "END:VCALENDAR\r\n"; - return icsFormat; -} -},{"../utils":183}],176:[function(require,module,exports){ -"use strict"; +var Buffer = require('buffer').Buffer; -Object.defineProperty(exports, "__esModule", { - value: true -}); -Object.defineProperty(exports, "buildEvent", { - enumerable: true, - get: function get() { - return _build["default"]; - } -}); -Object.defineProperty(exports, "formatEvent", { - enumerable: true, - get: function get() { - return _format["default"]; - } -}); -Object.defineProperty(exports, "validateEvent", { - enumerable: true, - get: function get() { - return _validate["default"]; - } -}); +var OurUint8Array = global.Uint8Array || function () {}; -var _build = _interopRequireDefault(require("./build")); +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} -var _format = _interopRequireDefault(require("./format")); +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} -var _validate = _interopRequireDefault(require("./validate")); +var destroyImpl = require('./internal/streams/destroy'); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -},{"./build":174,"./format":175,"./validate":177}],177:[function(require,module,exports){ -"use strict"; +var _require = require('./internal/streams/state'), + getHighWaterMark = _require.getHighWaterMark; -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = void 0; +var _require$codes = require('../errors').codes, + ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE, + ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED, + ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK, + ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE, + ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED, + ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES, + ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END, + ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING; -var _schema = _interopRequireDefault(require("../schema")); +var errorOrDestroy = destroyImpl.errorOrDestroy; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +require('inherits')(Writable, Stream); -var _default = _schema["default"]; -exports["default"] = _default; -},{"../schema":178}],178:[function(require,module,exports){ -"use strict"; +function nop() {} -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = validateEvent; +function WritableState(options, stream, isDuplex) { + Duplex = Duplex || require('./_stream_duplex'); + options = options || {}; // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream, + // e.g. options.readableObjectMode vs. options.writableObjectMode, etc. -var yup = _interopRequireWildcard(require("yup")); + if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream + // contains buffers or objects. -function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } + this.objectMode = !!options.objectMode; + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called -// yup url validation blocks localhost, so use a more flexible regex instead -// taken from https://github.com/jquense/yup/issues/224#issuecomment-417172609 -// This does mean that the url validation error is -// "url must match the following: ...." as opposed to "url must be a valid URL" -var urlRegex = /^(?:([a-z0-9+.-]+):\/\/)(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/; -var dateTimeSchema = yup.array().min(3).max(7).of(yup.lazy(function (item, options) { - var itemIndex = parseInt(options.path.match(/.*\[(\d+)]/)[1]); - return [yup.number().integer(), yup.number().integer().min(1).max(12), yup.number().integer().min(1).max(31), yup.number().integer().min(0).max(23), yup.number().integer().min(0).max(60), yup.number().integer().min(0).max(60)][itemIndex]; -})); -var durationSchema = yup.object().shape({ - before: yup["boolean"](), - //option to set before alaram - weeks: yup.number(), - days: yup.number(), - hours: yup.number(), - minutes: yup.number(), - seconds: yup.number() -}).noUnknown(); -var contactSchema = yup.object().shape({ - name: yup.string(), - email: yup.string().email(), - rsvp: yup["boolean"](), - dir: yup.string().matches(urlRegex), - partstat: yup.string(), - role: yup.string() -}).noUnknown(); -var organizerSchema = yup.object().shape({ - name: yup.string(), - email: yup.string().email() -}).noUnknown(); -var alarmSchema = yup.object().shape({ - action: yup.string().matches(/audio|display|email/).required(), - trigger: yup.mixed().required(), - description: yup.string(), - duration: durationSchema, - repeat: yup.number(), - attach: yup.string(), - attachType: yup.string(), - summary: yup.string(), - attendee: contactSchema, - 'x-prop': yup.mixed(), - 'iana-prop': yup.mixed() -}).noUnknown(); -var schema = yup.object().shape({ - summary: yup.string(), - timestamp: yup.mixed(), - title: yup.string(), - productId: yup.string(), - method: yup.string(), - uid: yup.string().required(), - sequence: yup.number(), - start: dateTimeSchema.required(), - duration: durationSchema, - startType: yup.string().matches(/utc|local/), - startInputType: yup.string().matches(/utc|local/), - startOutputType: yup.string().matches(/utc|local/), - end: dateTimeSchema, - endInputType: yup.string().matches(/utc|local/), - endOutputType: yup.string().matches(/utc|local/), - description: yup.string(), - url: yup.string().matches(urlRegex), - geo: yup.object().shape({ - lat: yup.number(), - lon: yup.number() - }), - location: yup.string(), - status: yup.string().matches(/TENTATIVE|CANCELLED|CONFIRMED/i), - categories: yup.array().of(yup.string()), - organizer: organizerSchema, - attendees: yup.array().of(contactSchema), - alarms: yup.array().of(alarmSchema), - recurrenceRule: yup.string(), - busyStatus: yup.string().matches(/TENTATIVE|FREE|BUSY|OOF/i), - created: dateTimeSchema, - lastModified: dateTimeSchema, - calName: yup.string() -}).test('xor', "object should have end or duration", function (val) { - var hasEnd = !!val.end; - var hasDuration = !!val.duration; - return hasEnd && !hasDuration || !hasEnd && hasDuration || !hasEnd && !hasDuration; -}).noUnknown(); + this.finalCalled = false; // drain event flag. -function validateEvent(candidate) { - try { - var value = schema.validateSync(candidate, { - abortEarly: false, - strict: true - }); - return { - error: null, - value: value - }; - } catch (error) { - return { - error: Object.assign({}, error), - value: undefined - }; - } -} -},{"yup":640}],179:[function(require,module,exports){ -"use strict"; + this.needDrain = false; // at the start of calling end() -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = foldLine; + this.ending = false; // when end() has been called, and returned -function foldLine(line) { - var parts = []; - var length = 75; + this.ended = false; // when 'finish' is emitted - while (line.length > length) { - parts.push(line.slice(0, length)); - line = line.slice(length); - length = 74; - } + this.finished = false; // has it been destroyed - parts.push(line); - return parts.join('\r\n\t'); -} -},{}],180:[function(require,module,exports){ -"use strict"; + this.destroyed = false; // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = formatDate; + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. -function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. -function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + this.length = 0; // a flag to see when we're in the middle of a write. -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + this.writing = false; // when true all writes will be buffered until .uncork() call -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. -function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + this.sync = true; // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. -function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) -var pad = function pad(n) { - return n < 10 ? "0".concat(n) : "".concat(n); -}; + this.onwrite = function (er) { + onwrite(stream, er); + }; // the callback that the user supplies to write(chunk,encoding,cb) -function formatDate() { - var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; - var outputType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'utc'; - var inputType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'local'; - if (Array.isArray(args) && args.length === 3) { - var _args = _slicedToArray(args, 3), - year = _args[0], - month = _args[1], - date = _args[2]; + this.writecb = null; // the amount that is being written when _write is called. - return "".concat(year).concat(pad(month)).concat(pad(date)); - } + this.writelen = 0; + this.bufferedRequest = null; + this.lastBufferedRequest = null; // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted - var outDate = new Date(new Date().setUTCSeconds(0, 0)); + this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams - if (Array.isArray(args) && args.length > 0 && args[0]) { - var _args2 = _slicedToArray(args, 6), - _year = _args2[0], - _month = _args2[1], - _date = _args2[2], - _args2$ = _args2[3], - hours = _args2$ === void 0 ? 0 : _args2$, - _args2$2 = _args2[4], - minutes = _args2$2 === void 0 ? 0 : _args2$2, - _args2$3 = _args2[5], - seconds = _args2$3 === void 0 ? 0 : _args2$3; + this.prefinished = false; // True if the error was already emitted and should not be thrown again - if (inputType === 'local') { - outDate = new Date(_year, _month - 1, _date, hours, minutes, seconds); - } else { - outDate = new Date(Date.UTC(_year, _month - 1, _date, hours, minutes, seconds)); - } - } + this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true. - if (outputType === 'local') { - return [outDate.getFullYear(), pad(outDate.getMonth() + 1), pad(outDate.getDate()), 'T', pad(outDate.getHours()), pad(outDate.getMinutes()), pad(outDate.getSeconds())].join(''); - } + this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end') - return [outDate.getUTCFullYear(), pad(outDate.getUTCMonth() + 1), pad(outDate.getUTCDate()), 'T', pad(outDate.getUTCHours()), pad(outDate.getUTCMinutes()), pad(outDate.getUTCSeconds()), 'Z'].join(''); -} -},{}],181:[function(require,module,exports){ -"use strict"; + this.autoDestroy = !!options.autoDestroy; // count buffered requests -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = formatDuration; + this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two -function formatDuration() { - var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var weeks = attributes.weeks, - days = attributes.days, - hours = attributes.hours, - minutes = attributes.minutes, - seconds = attributes.seconds; - var formattedDuration = 'P'; - formattedDuration += weeks ? "".concat(weeks, "W") : ''; - formattedDuration += days ? "".concat(days, "D") : ''; - formattedDuration += 'T'; - formattedDuration += hours ? "".concat(hours, "H") : ''; - formattedDuration += minutes ? "".concat(minutes, "M") : ''; - formattedDuration += seconds ? "".concat(seconds, "S") : ''; - return formattedDuration; + this.corkedRequestsFree = new CorkedRequest(this); } -},{}],182:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = formatText; -function formatText(text) { - return text.replace(/\\/gm, "\\\\").replace(/\r?\n/gm, "\\n").replace(/;/gm, "\\;").replace(/,/gm, "\\,"); -} -},{}],183:[function(require,module,exports){ -"use strict"; +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; -Object.defineProperty(exports, "__esModule", { - value: true -}); -Object.defineProperty(exports, "formatDate", { - enumerable: true, - get: function get() { - return _formatDate["default"]; - } -}); -Object.defineProperty(exports, "setGeolocation", { - enumerable: true, - get: function get() { - return _setGeolocation["default"]; - } -}); -Object.defineProperty(exports, "setContact", { - enumerable: true, - get: function get() { - return _setContact["default"]; - } -}); -Object.defineProperty(exports, "setOrganizer", { - enumerable: true, - get: function get() { - return _setOrganizer["default"]; - } -}); -Object.defineProperty(exports, "setAlarm", { - enumerable: true, - get: function get() { - return _setAlarm["default"]; - } -}); -Object.defineProperty(exports, "setDescription", { - enumerable: true, - get: function get() { - return _setDescription["default"]; - } -}); -Object.defineProperty(exports, "setSummary", { - enumerable: true, - get: function get() { - return _setSummary["default"]; - } -}); -Object.defineProperty(exports, "formatDuration", { - enumerable: true, - get: function get() { - return _formatDuration["default"]; - } -}); -Object.defineProperty(exports, "foldLine", { - enumerable: true, - get: function get() { - return _foldLine["default"]; - } -}); -Object.defineProperty(exports, "setLocation", { - enumerable: true, - get: function get() { - return _setLocation["default"]; + while (current) { + out.push(current); + current = current.next; } -}); - -var _formatDate = _interopRequireDefault(require("./format-date")); -var _setGeolocation = _interopRequireDefault(require("./set-geolocation")); + return out; +}; -var _setContact = _interopRequireDefault(require("./set-contact")); +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function writableStateBufferGetter() { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); // Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. -var _setOrganizer = _interopRequireDefault(require("./set-organizer")); -var _setAlarm = _interopRequireDefault(require("./set-alarm")); +var realHasInstance; -var _setDescription = _interopRequireDefault(require("./set-description")); +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function value(object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function realHasInstance(object) { + return object instanceof this; + }; +} -var _setSummary = _interopRequireDefault(require("./set-summary")); +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + // Checking for a Stream.Duplex instance is faster here instead of inside + // the WritableState constructor, at least with V8 6.5 -var _formatDuration = _interopRequireDefault(require("./format-duration")); + var isDuplex = this instanceof Duplex; + if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options); + this._writableState = new WritableState(options, this, isDuplex); // legacy. -var _foldLine = _interopRequireDefault(require("./fold-line")); + this.writable = true; -var _setLocation = _interopRequireDefault(require("./set-location")); + if (options) { + if (typeof options.write === 'function') this._write = options.write; + if (typeof options.writev === 'function') this._writev = options.writev; + if (typeof options.destroy === 'function') this._destroy = options.destroy; + if (typeof options.final === 'function') this._final = options.final; + } -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } -},{"./fold-line":179,"./format-date":180,"./format-duration":181,"./set-alarm":184,"./set-contact":185,"./set-description":186,"./set-geolocation":187,"./set-location":188,"./set-organizer":189,"./set-summary":190}],184:[function(require,module,exports){ -"use strict"; + Stream.call(this); +} // Otherwise people can pipe Writable streams, which is just wrong. -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setAlarm; -var _formatDate = _interopRequireDefault(require("./format-date")); +Writable.prototype.pipe = function () { + errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE()); +}; -var _foldLine = _interopRequireDefault(require("./fold-line")); +function writeAfterEnd(stream, cb) { + var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + errorOrDestroy(stream, er); + process.nextTick(cb, er); +} // Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. -function setDuration(_ref) { - var weeks = _ref.weeks, - days = _ref.days, - hours = _ref.hours, - minutes = _ref.minutes, - seconds = _ref.seconds; - var formattedString = 'P'; - formattedString += weeks ? "".concat(weeks, "W") : ''; - formattedString += days ? "".concat(days, "D") : ''; - formattedString += 'T'; - formattedString += hours ? "".concat(hours, "H") : ''; - formattedString += minutes ? "".concat(minutes, "M") : ''; - formattedString += seconds ? "".concat(seconds, "S") : ''; - return formattedString; -} -function setTrigger(trigger) { - var formattedString = ''; +function validChunk(stream, state, chunk, cb) { + var er; - if (Array.isArray(trigger)) { - formattedString = "TRIGGER;VALUE=DATE-TIME:".concat((0, _formatDate["default"])(trigger), "\r\n"); - } else { - var alert = trigger.before ? '-' : ''; - formattedString = "TRIGGER:".concat(alert + setDuration(trigger), "\r\n"); + if (chunk === null) { + er = new ERR_STREAM_NULL_VALUES(); + } else if (typeof chunk !== 'string' && !state.objectMode) { + er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk); } - return formattedString; -} + if (er) { + errorOrDestroy(stream, er); + process.nextTick(cb, er); + return false; + } -function setAction(action) { - return action.toUpperCase(); + return true; } -function setAlarm() { - var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var action = attributes.action, - repeat = attributes.repeat, - description = attributes.description, - duration = attributes.duration, - attach = attributes.attach, - attachType = attributes.attachType, - trigger = attributes.trigger, - summary = attributes.summary; - var formattedString = 'BEGIN:VALARM\r\n'; - formattedString += (0, _foldLine["default"])("ACTION:".concat(setAction(action))) + '\r\n'; - formattedString += repeat ? (0, _foldLine["default"])("REPEAT:".concat(repeat)) + '\r\n' : ''; - formattedString += description ? (0, _foldLine["default"])("DESCRIPTION:".concat(description)) + '\r\n' : ''; - formattedString += duration ? (0, _foldLine["default"])("DURATION:".concat(setDuration(duration))) + '\r\n' : ''; - var attachInfo = attachType ? attachType : 'FMTTYPE=audio/basic'; - formattedString += attach ? (0, _foldLine["default"])("ATTACH;".concat(attachInfo, ":").concat(attach)) + '\r\n' : ''; - formattedString += trigger ? setTrigger(trigger) : ''; - formattedString += summary ? (0, _foldLine["default"])("SUMMARY:".concat(summary)) + '\r\n' : ''; - formattedString += 'END:VALARM\r\n'; - return formattedString; -} // Example: A duration of 15 days, 5 hours, and 20 seconds would be: -// P15DT5H0M20S -// A duration of 7 weeks would be: -// P7W -},{"./fold-line":179,"./format-date":180}],185:[function(require,module,exports){ -"use strict"; +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setContact; + var isBuf = !state.objectMode && _isUint8Array(chunk); -function setContact(_ref) { - var name = _ref.name, - email = _ref.email, - rsvp = _ref.rsvp, - dir = _ref.dir, - partstat = _ref.partstat, - role = _ref.role; - var formattedAttendee = ''; - formattedAttendee += rsvp ? 'RSVP=TRUE;' : 'RSVP=FALSE;'; - formattedAttendee += role ? "ROLE=".concat(role, ";") : ''; - formattedAttendee += partstat ? "PARTSTAT=".concat(partstat, ";") : ''; - formattedAttendee += dir ? "DIR=".concat(dir, ";") : ''; - formattedAttendee += 'CN='; - formattedAttendee += name || 'Unnamed attendee'; - formattedAttendee += email ? ":mailto:".concat(email) : ''; - return formattedAttendee; -} -},{}],186:[function(require,module,exports){ -"use strict"; + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setDescription; + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } -var _formatText = _interopRequireDefault(require("./format-text")); + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + if (typeof cb !== 'function') cb = nop; + if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + return ret; +}; -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +Writable.prototype.cork = function () { + this._writableState.corked++; +}; -function setDescription(description) { - return (0, _formatText["default"])(description); -} -},{"./format-text":182}],187:[function(require,module,exports){ -"use strict"; +Writable.prototype.uncork = function () { + var state = this._writableState; -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setGeolocation; + if (state.corked) { + state.corked--; + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; -function setGeolocation(_ref) { - var lat = _ref.lat, - lon = _ref.lon; - return "".concat(lat, ";").concat(lon); -} -},{}],188:[function(require,module,exports){ -"use strict"; +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; -Object.defineProperty(exports, "__esModule", { - value: true +Object.defineProperty(Writable.prototype, 'writableBuffer', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState && this._writableState.getBuffer(); + } }); -exports["default"] = setLocation; - -var _formatText = _interopRequireDefault(require("./format-text")); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } -function setLocation(location) { - return (0, _formatText["default"])(location); + return chunk; } -},{"./format-text":182}],189:[function(require,module,exports){ -"use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setOrganizer; +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.highWaterMark; + } +}); // if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. -function setOrganizer(_ref) { - var name = _ref.name, - email = _ref.email, - dir = _ref.dir; - var formattedOrganizer = ''; - formattedOrganizer += dir ? "DIR=".concat(dir, ";") : ''; - formattedOrganizer += 'CN='; - formattedOrganizer += name || 'Organizer'; - formattedOrganizer += email ? ":mailto:".concat(email) : ''; - return formattedOrganizer; -} -},{}],190:[function(require,module,exports){ -"use strict"; +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports["default"] = setSummary; + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } -var _formatText = _interopRequireDefault(require("./format-text")); + var len = state.objectMode ? 1 : chunk.length; + state.length += len; + var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + if (!ret) state.needDrain = true; -function setSummary(summary) { - return (0, _formatText["default"])(summary); -} -},{"./format-text":182}],191:[function(require,module,exports){ -var ics = require('./dist'); + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; -module.exports = ics; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } -},{"./dist":173}],192:[function(require,module,exports){ -/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } - i += d + return ret; +} - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + process.nextTick(cb, er); // this can emit finish, and it will always happen + // after error + + process.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + errorOrDestroy(stream, er); } else { - m = m + Math.pow(2, mLen) - e = e - eBias + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + errorOrDestroy(stream, er); // this can emit finish, but finish must + // always follow error + + finishMaybe(stream, state); } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) } -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = (nBytes * 8) - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} - value = Math.abs(value) +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK(); + onwriteStateUpdate(state); + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state) || stream.destroyed; - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); } - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = ((value * c) - 1) * Math.pow(2, mLen) - e = e + eBias + if (sync) { + process.nextTick(afterWrite, stream, state, finished, cb); } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 + afterWrite(stream, state, finished, cb); } } +} - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} // Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. - buffer[offset + i - d] |= s * 128 -} -},{}],193:[function(require,module,exports){ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }) - } - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); } -} - -},{}],194:[function(require,module,exports){ -'use strict'; +} // if there's something in the buffer waiting, then process it -var ip = exports; -var Buffer = require('buffer').Buffer; -var os = require('os'); -ip.toBuffer = function(ip, buff, offset) { - offset = ~~offset; +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; - var result; + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + var count = 0; + var allBuffers = true; - if (this.isV4Format(ip)) { - result = buff || new Buffer(offset + 4); - ip.split(/\./g).map(function(byte) { - result[offset++] = parseInt(byte, 10) & 0xff; - }); - } else if (this.isV6Format(ip)) { - var sections = ip.split(':', 8); + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } - var i; - for (i = 0; i < sections.length; i++) { - var isv4 = this.isV4Format(sections[i]); - var v4Buffer; + buffer.allBuffers = allBuffers; + doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite - if (isv4) { - v4Buffer = this.toBuffer(sections[i]); - sections[i] = v4Buffer.slice(0, 2).toString('hex'); - } + state.pendingcb++; + state.lastBufferedRequest = null; - if (v4Buffer && ++i < 8) { - sections.splice(i, 0, v4Buffer.slice(2, 4).toString('hex')); - } + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); } - if (sections[0] === '') { - while (sections.length < 8) sections.unshift('0'); - } else if (sections[sections.length - 1] === '') { - while (sections.length < 8) sections.push('0'); - } else if (sections.length < 8) { - for (i = 0; i < sections.length && sections[i] !== ''; i++); - var argv = [ i, 1 ]; - for (i = 9 - sections.length; i > 0; i--) { - argv.push('0'); + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + + if (state.writing) { + break; } - sections.splice.apply(sections, argv); } - result = buff || new Buffer(offset + 16); - for (i = 0; i < sections.length; i++) { - var word = parseInt(sections[i], 16); - result[offset++] = (word >> 8) & 0xff; - result[offset++] = word & 0xff; - } + if (entry === null) state.lastBufferedRequest = null; } - if (!result) { - throw Error('Invalid ip address: ' + ip); - } + state.bufferedRequest = entry; + state.bufferProcessing = false; +} - return result; +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()')); }; -ip.toString = function(buff, offset, length) { - offset = ~~offset; - length = length || (buff.length - offset); +Writable.prototype._writev = null; - var result = []; - if (length === 4) { - // IPv4 - for (var i = 0; i < length; i++) { - result.push(buff[offset + i]); - } - result = result.join('.'); - } else if (length === 16) { - // IPv6 - for (var i = 0; i < length; i += 2) { - result.push(buff.readUInt16BE(offset + i).toString(16)); - } - result = result.join(':'); - result = result.replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3'); - result = result.replace(/:{3,4}/, '::'); +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; } - return result; -}; + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks -var ipv4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/; -var ipv6Regex = - /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i; + if (state.corked) { + state.corked = 1; + this.uncork(); + } // ignore unnecessary end() calls. -ip.isV4Format = function(ip) { - return ipv4Regex.test(ip); -}; -ip.isV6Format = function(ip) { - return ipv6Regex.test(ip); + if (!state.ending) endWritable(this, state, cb); + return this; }; -function _normalizeFamily(family) { - return family ? family.toLowerCase() : 'ipv4'; -} -ip.fromPrefixLen = function(prefixlen, family) { - if (prefixlen > 32) { - family = 'ipv6'; - } else { - family = _normalizeFamily(family); +Object.defineProperty(Writable.prototype, 'writableLength', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + return this._writableState.length; } +}); - var len = 4; - if (family === 'ipv6') { - len = 16; - } - var buff = new Buffer(len); +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} - for (var i = 0, n = buff.length; i < n; ++i) { - var bits = 8; - if (prefixlen < 8) { - bits = prefixlen; +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + + if (err) { + errorOrDestroy(stream, err); } - prefixlen -= bits; - buff[i] = ~(0xff >> bits) & 0xff; + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} + +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function' && !state.destroyed) { + state.pendingcb++; + state.finalCalled = true; + process.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } } +} - return ip.toString(buff); -}; +function finishMaybe(stream, state) { + var need = needFinish(state); -ip.mask = function(addr, mask) { - addr = ip.toBuffer(addr); - mask = ip.toBuffer(mask); + if (need) { + prefinish(stream, state); - var result = new Buffer(Math.max(addr.length, mask.length)); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); - var i = 0; - // Same protocol - do bitwise and - if (addr.length === mask.length) { - for (i = 0; i < addr.length; i++) { - result[i] = addr[i] & mask[i]; - } - } else if (mask.length === 4) { - // IPv6 address and IPv4 mask - // (Mask low bits) - for (i = 0; i < mask.length; i++) { - result[i] = addr[addr.length - 4 + i] & mask[i]; - } - } else { - // IPv6 mask and IPv4 addr - for (var i = 0; i < result.length - 6; i++) { - result[i] = 0; - } + if (state.autoDestroy) { + // In case of duplex streams we need a way to detect + // if the readable side is ready for autoDestroy as well + var rState = stream._readableState; - // ::ffff:ipv4 - result[10] = 0xff; - result[11] = 0xff; - for (i = 0; i < addr.length; i++) { - result[i + 12] = addr[i] & mask[i + 12]; + if (!rState || rState.autoDestroy && rState.endEmitted) { + stream.destroy(); + } + } } - i = i + 12; } - for (; i < result.length; i++) - result[i] = 0; - - return ip.toString(result); -}; -ip.cidr = function(cidrString) { - var cidrParts = cidrString.split('/'); + return need; +} - var addr = cidrParts[0]; - if (cidrParts.length !== 2) - throw new Error('invalid CIDR subnet: ' + addr); +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); - var mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); + if (cb) { + if (state.finished) process.nextTick(cb);else stream.once('finish', cb); + } - return ip.mask(addr, mask); -}; + state.ended = true; + stream.writable = false; +} -ip.subnet = function(addr, mask) { - var networkAddress = ip.toLong(ip.mask(addr, mask)); +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; - // Calculate the mask's length. - var maskBuffer = ip.toBuffer(mask); - var maskLength = 0; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } // reuse the free corkReq. - for (var i = 0; i < maskBuffer.length; i++) { - if (maskBuffer[i] === 0xff) { - maskLength += 8; - } else { - var octet = maskBuffer[i] & 0xff; - while (octet) { - octet = (octet << 1) & 0xff; - maskLength++; - } - } - } - var numberOfAddresses = Math.pow(2, 32 - maskLength); + state.corkedRequestsFree.next = corkReq; +} - return { - networkAddress: ip.fromLong(networkAddress), - firstAddress: numberOfAddresses <= 2 ? - ip.fromLong(networkAddress) : - ip.fromLong(networkAddress + 1), - lastAddress: numberOfAddresses <= 2 ? - ip.fromLong(networkAddress + numberOfAddresses - 1) : - ip.fromLong(networkAddress + numberOfAddresses - 2), - broadcastAddress: ip.fromLong(networkAddress + numberOfAddresses - 1), - subnetMask: mask, - subnetMaskLength: maskLength, - numHosts: numberOfAddresses <= 2 ? - numberOfAddresses : numberOfAddresses - 2, - length: numberOfAddresses, - contains: function(other) { - return networkAddress === ip.toLong(ip.mask(other, mask)); +Object.defineProperty(Writable.prototype, 'destroyed', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function get() { + if (this._writableState === undefined) { + return false; } - }; -}; -ip.cidrSubnet = function(cidrString) { - var cidrParts = cidrString.split('/'); + return this._writableState.destroyed; + }, + set: function set(value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } // backward compatibility, the user is explicitly + // managing destroyed - var addr = cidrParts[0]; - if (cidrParts.length !== 2) - throw new Error('invalid CIDR subnet: ' + addr); - var mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); + this._writableState.destroyed = value; + } +}); +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; - return ip.subnet(addr, mask); +Writable.prototype._destroy = function (err, cb) { + cb(err); }; +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -ip.not = function(addr) { - var buff = ip.toBuffer(addr); - for (var i = 0; i < buff.length; i++) { - buff[i] = 0xff ^ buff[i]; - } - return ip.toString(buff); -}; +},{"../errors":143,"./_stream_duplex":144,"./internal/streams/destroy":151,"./internal/streams/state":155,"./internal/streams/stream":156,"_process":390,"buffer":69,"inherits":193,"util-deprecate":588}],149:[function(require,module,exports){ +(function (process){(function (){ +'use strict'; -ip.or = function(a, b) { - a = ip.toBuffer(a); - b = ip.toBuffer(b); +var _Object$setPrototypeO; - // same protocol - if (a.length === b.length) { - for (var i = 0; i < a.length; ++i) { - a[i] |= b[i]; - } - return ip.toString(a); +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - // mixed protocols - } else { - var buff = a; - var other = b; - if (b.length > a.length) { - buff = b; - other = a; - } +var finished = require('./end-of-stream'); - var offset = buff.length - other.length; - for (var i = offset; i < buff.length; ++i) { - buff[i] |= other[i - offset]; - } +var kLastResolve = Symbol('lastResolve'); +var kLastReject = Symbol('lastReject'); +var kError = Symbol('error'); +var kEnded = Symbol('ended'); +var kLastPromise = Symbol('lastPromise'); +var kHandlePromise = Symbol('handlePromise'); +var kStream = Symbol('stream'); - return ip.toString(buff); - } -}; +function createIterResult(value, done) { + return { + value: value, + done: done + }; +} -ip.isEqual = function(a, b) { - a = ip.toBuffer(a); - b = ip.toBuffer(b); +function readAndResolve(iter) { + var resolve = iter[kLastResolve]; - // Same protocol - if (a.length === b.length) { - for (var i = 0; i < a.length; i++) { - if (a[i] !== b[i]) return false; + if (resolve !== null) { + var data = iter[kStream].read(); // we defer if data is null + // we can be expecting either 'end' or + // 'error' + + if (data !== null) { + iter[kLastPromise] = null; + iter[kLastResolve] = null; + iter[kLastReject] = null; + resolve(createIterResult(data, false)); } - return true; } +} - // Swap - if (b.length === 4) { - var t = b; - b = a; - a = t; - } +function onReadable(iter) { + // we wait for the next tick, because it might + // emit an error with process.nextTick + process.nextTick(readAndResolve, iter); +} - // a - IPv4, b - IPv6 - for (var i = 0; i < 10; i++) { - if (b[i] !== 0) return false; - } +function wrapForNext(lastPromise, iter) { + return function (resolve, reject) { + lastPromise.then(function () { + if (iter[kEnded]) { + resolve(createIterResult(undefined, true)); + return; + } - var word = b.readUInt16BE(10); - if (word !== 0 && word !== 0xffff) return false; + iter[kHandlePromise](resolve, reject); + }, reject); + }; +} - for (var i = 0; i < 4; i++) { - if (a[i] !== b[i + 12]) return false; - } +var AsyncIteratorPrototype = Object.getPrototypeOf(function () {}); +var ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = { + get stream() { + return this[kStream]; + }, - return true; -}; + next: function next() { + var _this = this; -ip.isPrivate = function(addr) { - return /^(::f{4}:)?10\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i - .test(addr) || - /^(::f{4}:)?192\.168\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || - /^(::f{4}:)?172\.(1[6-9]|2\d|30|31)\.([0-9]{1,3})\.([0-9]{1,3})$/i - .test(addr) || - /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || - /^(::f{4}:)?169\.254\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || - /^f[cd][0-9a-f]{2}:/i.test(addr) || - /^fe80:/i.test(addr) || - /^::1$/.test(addr) || - /^::$/.test(addr); -}; + // if we have detected an error in the meanwhile + // reject straight away + var error = this[kError]; -ip.isPublic = function(addr) { - return !ip.isPrivate(addr); -}; + if (error !== null) { + return Promise.reject(error); + } -ip.isLoopback = function(addr) { - return /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/ - .test(addr) || - /^fe80::1$/.test(addr) || - /^::1$/.test(addr) || - /^::$/.test(addr); -}; + if (this[kEnded]) { + return Promise.resolve(createIterResult(undefined, true)); + } -ip.loopback = function(family) { - // - // Default to `ipv4` - // - family = _normalizeFamily(family); + if (this[kStream].destroyed) { + // We need to defer via nextTick because if .destroy(err) is + // called, the error will be emitted via nextTick, and + // we cannot guarantee that there is no error lingering around + // waiting to be emitted. + return new Promise(function (resolve, reject) { + process.nextTick(function () { + if (_this[kError]) { + reject(_this[kError]); + } else { + resolve(createIterResult(undefined, true)); + } + }); + }); + } // if we have multiple next() calls + // we will wait for the previous Promise to finish + // this logic is optimized to support for await loops, + // where next() is only called once at a time - if (family !== 'ipv4' && family !== 'ipv6') { - throw new Error('family must be ipv4 or ipv6'); - } - return family === 'ipv4' ? '127.0.0.1' : 'fe80::1'; -}; + var lastPromise = this[kLastPromise]; + var promise; -// -// ### function address (name, family) -// #### @name {string|'public'|'private'} **Optional** Name or security -// of the network interface. -// #### @family {ipv4|ipv6} **Optional** IP family of the address (defaults -// to ipv4). -// -// Returns the address for the network interface on the current system with -// the specified `name`: -// * String: First `family` address of the interface. -// If not found see `undefined`. -// * 'public': the first public ip address of family. -// * 'private': the first private ip address of family. -// * undefined: First address with `ipv4` or loopback address `127.0.0.1`. -// -ip.address = function(name, family) { - var interfaces = os.networkInterfaces(); - var all; + if (lastPromise) { + promise = new Promise(wrapForNext(lastPromise, this)); + } else { + // fast path needed to support multiple this.push() + // without triggering the next() queue + var data = this[kStream].read(); - // - // Default to `ipv4` - // - family = _normalizeFamily(family); + if (data !== null) { + return Promise.resolve(createIterResult(data, false)); + } - // - // If a specific network interface has been named, - // return the address. - // - if (name && name !== 'private' && name !== 'public') { - var res = interfaces[name].filter(function(details) { - var itemFamily = details.family.toLowerCase(); - return itemFamily === family; - }); - if (res.length === 0) - return undefined; - return res[0].address; + promise = new Promise(this[kHandlePromise]); + } + + this[kLastPromise] = promise; + return promise; } +}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () { + return this; +}), _defineProperty(_Object$setPrototypeO, "return", function _return() { + var _this2 = this; - var all = Object.keys(interfaces).map(function (nic) { - // - // Note: name will only be `public` or `private` - // when this is called. - // - var addresses = interfaces[nic].filter(function (details) { - details.family = details.family.toLowerCase(); - if (details.family !== family || ip.isLoopback(details.address)) { - return false; - } else if (!name) { - return true; + // destroy(err, cb) is a private API + // we can guarantee we have that here, because we control the + // Readable class this is attached to + return new Promise(function (resolve, reject) { + _this2[kStream].destroy(null, function (err) { + if (err) { + reject(err); + return; } - return name === 'public' ? ip.isPrivate(details.address) : - ip.isPublic(details.address); + resolve(createIterResult(undefined, true)); }); + }); +}), _Object$setPrototypeO), AsyncIteratorPrototype); - return addresses.length ? addresses[0].address : undefined; - }).filter(Boolean); +var createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) { + var _Object$create; - return !all.length ? ip.loopback(family) : all[0]; -}; + var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, { + value: stream, + writable: true + }), _defineProperty(_Object$create, kLastResolve, { + value: null, + writable: true + }), _defineProperty(_Object$create, kLastReject, { + value: null, + writable: true + }), _defineProperty(_Object$create, kError, { + value: null, + writable: true + }), _defineProperty(_Object$create, kEnded, { + value: stream._readableState.endEmitted, + writable: true + }), _defineProperty(_Object$create, kHandlePromise, { + value: function value(resolve, reject) { + var data = iterator[kStream].read(); -ip.toLong = function(ip) { - var ipl = 0; - ip.split('.').forEach(function(octet) { - ipl <<= 8; - ipl += parseInt(octet); - }); - return(ipl >>> 0); -}; + if (data) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + resolve(createIterResult(data, false)); + } else { + iterator[kLastResolve] = resolve; + iterator[kLastReject] = reject; + } + }, + writable: true + }), _Object$create)); + iterator[kLastPromise] = null; + finished(stream, function (err) { + if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') { + var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise + // returned by next() and store the error -ip.fromLong = function(ipl) { - return ((ipl >>> 24) + '.' + - (ipl >> 16 & 255) + '.' + - (ipl >> 8 & 255) + '.' + - (ipl & 255) ); -}; + if (reject !== null) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + reject(err); + } -},{"buffer":69,"os":376}],195:[function(require,module,exports){ -'use strict'; + iterator[kError] = err; + return; + } -var hasToStringTag = require('has-tostringtag/shams')(); -var callBound = require('call-bind/callBound'); + var resolve = iterator[kLastResolve]; -var $toString = callBound('Object.prototype.toString'); + if (resolve !== null) { + iterator[kLastPromise] = null; + iterator[kLastResolve] = null; + iterator[kLastReject] = null; + resolve(createIterResult(undefined, true)); + } -var isStandardArguments = function isArguments(value) { - if (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) { - return false; - } - return $toString(value) === '[object Arguments]'; + iterator[kEnded] = true; + }); + stream.on('readable', onReadable.bind(null, iterator)); + return iterator; }; -var isLegacyArguments = function isArguments(value) { - if (isStandardArguments(value)) { - return true; - } - return value !== null && - typeof value === 'object' && - typeof value.length === 'number' && - value.length >= 0 && - $toString(value) !== '[object Array]' && - $toString(value.callee) === '[object Function]'; -}; - -var supportsStandardArguments = (function () { - return isStandardArguments(arguments); -}()); - -isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests - -module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments; - -},{"call-bind/callBound":71,"has-tostringtag/shams":140}],196:[function(require,module,exports){ - -var char = '[a-zA-Z0-9\/\+]' -var trail2 = '[AQgw]==' -var trail4 = '[AEIMQUYcgkosw048]=' -var rx = '(?:' +char+ '{4})*(?:' +char+ '(?:(?:' +trail2 + ')|(?:' +char+trail4+ ')))?' -module.exports = function (prefix,suffix, length) { - if(!Number.isInteger(length)) return new RegExp('^'+(prefix||'')+rx+(suffix||'')+'$') - - var mod = length % 3 - - return new RegExp('^'+(prefix||'')+( - char +'{'+~~((length*8)/6)+'}' + ( - mod === 0 ? '' - : mod === 1 ? trail2 - : trail4 - ) - )+(suffix||'')+'$') -} +module.exports = createReadableStreamAsyncIterator; +}).call(this)}).call(this,require('_process')) +},{"./end-of-stream":152,"_process":390}],150:[function(require,module,exports){ +arguments[4][59][0].apply(exports,arguments) +},{"buffer":69,"dup":59,"util":24}],151:[function(require,module,exports){ +(function (process){(function (){ +'use strict'; // undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err) { + if (!this._writableState) { + process.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + process.nextTick(emitErrorNT, this, err); + } + } + return this; + } // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + if (this._readableState) { + this._readableState.destroyed = true; + } // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + this._destroy(err || null, function (err) { + if (!cb && err) { + if (!_this._writableState) { + process.nextTick(emitErrorAndCloseNT, _this, err); + } else if (!_this._writableState.errorEmitted) { + _this._writableState.errorEmitted = true; + process.nextTick(emitErrorAndCloseNT, _this, err); + } else { + process.nextTick(emitCloseNT, _this); + } + } else if (cb) { + process.nextTick(emitCloseNT, _this); + cb(err); + } else { + process.nextTick(emitCloseNT, _this); + } + }); + return this; +} +function emitErrorAndCloseNT(self, err) { + emitErrorNT(self, err); + emitCloseNT(self); +} +function emitCloseNT(self) { + if (self._writableState && !self._writableState.emitClose) return; + if (self._readableState && !self._readableState.emitClose) return; + self.emit('close'); +} +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} -},{}],197:[function(require,module,exports){ -'use strict'; +function emitErrorNT(self, err) { + self.emit('error', err); +} -var toStr = Object.prototype.toString; -var fnToStr = Function.prototype.toString; -var isFnRegex = /^\s*(?:function)?\*/; -var hasToStringTag = require('has-tostringtag/shams')(); -var getProto = Object.getPrototypeOf; -var getGeneratorFunc = function () { // eslint-disable-line consistent-return - if (!hasToStringTag) { - return false; - } - try { - return Function('return function*() {}')(); - } catch (e) { - } -}; -var GeneratorFunction; +function errorOrDestroy(stream, err) { + // We have tests that rely on errors being emitted + // in the same tick, so changing this is semver major. + // For now when you opt-in to autoDestroy we allow + // the error to be emitted nextTick. In a future + // semver major update we should change the default to this. + var rState = stream._readableState; + var wState = stream._writableState; + if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err); +} -module.exports = function isGeneratorFunction(fn) { - if (typeof fn !== 'function') { - return false; - } - if (isFnRegex.test(fnToStr.call(fn))) { - return true; - } - if (!hasToStringTag) { - var str = toStr.call(fn); - return str === '[object GeneratorFunction]'; - } - if (!getProto) { - return false; - } - if (typeof GeneratorFunction === 'undefined') { - var generatorFunc = getGeneratorFunc(); - GeneratorFunction = generatorFunc ? getProto(generatorFunc) : false; - } - return getProto(fn) === GeneratorFunction; +module.exports = { + destroy: destroy, + undestroy: undestroy, + errorOrDestroy: errorOrDestroy }; +}).call(this)}).call(this,require('_process')) -},{"has-tostringtag/shams":140}],198:[function(require,module,exports){ -var reIpv4FirstPass = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ - -var reSubnetString = /\/\d{1,3}(?=%|$)/ -var reForwardSlash = /\// -var reZone = /%.*$/ -var reBadCharacters = /([^0-9a-f:/%])/i -var reBadAddress = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\/$)/i +},{"_process":390}],152:[function(require,module,exports){ +arguments[4][61][0].apply(exports,arguments) +},{"../../../errors":143,"dup":61}],153:[function(require,module,exports){ +arguments[4][62][0].apply(exports,arguments) +},{"dup":62}],154:[function(require,module,exports){ +arguments[4][63][0].apply(exports,arguments) +},{"../../../errors":143,"./end-of-stream":152,"dup":63}],155:[function(require,module,exports){ +arguments[4][64][0].apply(exports,arguments) +},{"../../../errors":143,"dup":64}],156:[function(require,module,exports){ +arguments[4][65][0].apply(exports,arguments) +},{"dup":65,"events":129}],157:[function(require,module,exports){ +arguments[4][66][0].apply(exports,arguments) +},{"./lib/_stream_duplex.js":144,"./lib/_stream_passthrough.js":145,"./lib/_stream_readable.js":146,"./lib/_stream_transform.js":147,"./lib/_stream_writable.js":148,"./lib/internal/streams/end-of-stream.js":152,"./lib/internal/streams/pipeline.js":154,"dup":66}],158:[function(require,module,exports){ +var hash = exports; -function validate4 (input) { - if (!(reIpv4FirstPass.test(input))) return false +hash.utils = require('./hash/utils'); +hash.common = require('./hash/common'); +hash.sha = require('./hash/sha'); +hash.ripemd = require('./hash/ripemd'); +hash.hmac = require('./hash/hmac'); - var parts = input.split('.') +// Proxy hash functions to the main object +hash.sha1 = hash.sha.sha1; +hash.sha256 = hash.sha.sha256; +hash.sha224 = hash.sha.sha224; +hash.sha384 = hash.sha.sha384; +hash.sha512 = hash.sha.sha512; +hash.ripemd160 = hash.ripemd.ripemd160; - if (parts.length !== 4) return false +},{"./hash/common":159,"./hash/hmac":160,"./hash/ripemd":161,"./hash/sha":162,"./hash/utils":169}],159:[function(require,module,exports){ +'use strict'; - if (parts[0][0] === '0' && parts[0].length > 1) return false - if (parts[1][0] === '0' && parts[1].length > 1) return false - if (parts[2][0] === '0' && parts[2].length > 1) return false - if (parts[3][0] === '0' && parts[3].length > 1) return false +var utils = require('./utils'); +var assert = require('minimalistic-assert'); - var n0 = Number(parts[0]) - var n1 = Number(parts[1]) - var n2 = Number(parts[2]) - var n3 = Number(parts[3]) +function BlockHash() { + this.pending = null; + this.pendingTotal = 0; + this.blockSize = this.constructor.blockSize; + this.outSize = this.constructor.outSize; + this.hmacStrength = this.constructor.hmacStrength; + this.padLength = this.constructor.padLength / 8; + this.endian = 'big'; - return (n0 >= 0 && n0 < 256 && n1 >= 0 && n1 < 256 && n2 >= 0 && n2 < 256 && n3 >= 0 && n3 < 256) + this._delta8 = this.blockSize / 8; + this._delta32 = this.blockSize / 32; } +exports.BlockHash = BlockHash; -function validate6 (input) { - var withoutSubnet = input.replace(reSubnetString, '') - var hasSubnet = (input.length !== withoutSubnet.length) - - // FIXME: this should probably be an option in the future - if (hasSubnet) return false +BlockHash.prototype.update = function update(msg, enc) { + // Convert message to array, pad it, and join into 32bit blocks + msg = utils.toArray(msg, enc); + if (!this.pending) + this.pending = msg; + else + this.pending = this.pending.concat(msg); + this.pendingTotal += msg.length; - if (!hasSubnet) { - if (reForwardSlash.test(input)) return false - } + // Enough data, try updating + if (this.pending.length >= this._delta8) { + msg = this.pending; - var withoutZone = withoutSubnet.replace(reZone, '') - var lastPartSeparator = withoutZone.lastIndexOf(':') + // Process pending data in blocks + var r = msg.length % this._delta8; + this.pending = msg.slice(msg.length - r, msg.length); + if (this.pending.length === 0) + this.pending = null; - if (lastPartSeparator === -1) return false + msg = utils.join32(msg, 0, msg.length - r, this.endian); + for (var i = 0; i < msg.length; i += this._delta32) + this._update(msg, i, i + this._delta32); + } - var lastPart = withoutZone.substring(lastPartSeparator + 1) - var hasV4Part = validate4(lastPart) - var address = (hasV4Part ? withoutZone.substring(0, lastPartSeparator + 1) + '1234:5678' : withoutZone) + return this; +}; - if (reBadCharacters.test(address)) return false - if (reBadAddress.test(address)) return false +BlockHash.prototype.digest = function digest(enc) { + this.update(this._pad()); + assert(this.pending === null); - var halves = address.split('::') + return this._digest(enc); +}; - if (halves.length > 2) return false +BlockHash.prototype._pad = function pad() { + var len = this.pendingTotal; + var bytes = this._delta8; + var k = bytes - ((len + this.padLength) % bytes); + var res = new Array(k + this.padLength); + res[0] = 0x80; + for (var i = 1; i < k; i++) + res[i] = 0; - if (halves.length === 2) { - var first = (halves[0] === '' ? [] : halves[0].split(':')) - var last = (halves[1] === '' ? [] : halves[1].split(':')) - var remainingLength = 8 - (first.length + last.length) + // Append length + len <<= 3; + if (this.endian === 'big') { + for (var t = 8; t < this.padLength; t++) + res[i++] = 0; - if (remainingLength <= 0) return false + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = (len >>> 24) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = len & 0xff; } else { - if (address.split(':').length !== 8) return false + res[i++] = len & 0xff; + res[i++] = (len >>> 8) & 0xff; + res[i++] = (len >>> 16) & 0xff; + res[i++] = (len >>> 24) & 0xff; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + res[i++] = 0; + + for (t = 8; t < this.padLength; t++) + res[i++] = 0; } - return true -} + return res; +}; -function validate (input) { - return validate4(input) || validate6(input) -} +},{"./utils":169,"minimalistic-assert":363}],160:[function(require,module,exports){ +'use strict'; -module.exports = function validator (options) { - if (!options) options = {} +var utils = require('./utils'); +var assert = require('minimalistic-assert'); - if (options.version === 4) return validate4 - if (options.version === 6) return validate6 - if (options.version == null) return validate +function Hmac(hash, key, enc) { + if (!(this instanceof Hmac)) + return new Hmac(hash, key, enc); + this.Hash = hash; + this.blockSize = hash.blockSize / 8; + this.outSize = hash.outSize / 8; + this.inner = null; + this.outer = null; - throw new Error('Unknown version: ' + options.version) + this._init(utils.toArray(key, enc)); } +module.exports = Hmac; -module.exports['__all_regexes__'] = [ - reIpv4FirstPass, - reSubnetString, - reForwardSlash, - reZone, - reBadCharacters, - reBadAddress -] - -},{}],199:[function(require,module,exports){ -var createIpValidator = require('is-my-ip-valid') +Hmac.prototype._init = function init(key) { + // Shorten key, if needed + if (key.length > this.blockSize) + key = new this.Hash().update(key).digest(); + assert(key.length <= this.blockSize); -var reEmailWhitespace = /\s/ -var reHostnameFirstPass = /^[a-zA-Z0-9.-]+$/ -var reHostnamePart = /^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/ -var rePhoneFirstPass = /^\+[0-9][0-9 ]{5,27}[0-9]$/ -var rePhoneDoubleSpace = / {2}/ -var rePhoneGlobalSpace = / /g + // Add padding to key + for (var i = key.length; i < this.blockSize; i++) + key.push(0); -exports['date-time'] = /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}[tT ]\d{2}:\d{2}:\d{2}(?:\.\d+|)([zZ]|[+-]\d{2}:\d{2})$/ -exports['date'] = /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}$/ -exports['time'] = /^\d{2}:\d{2}:\d{2}$/ -exports['email'] = function (input) { return (input.indexOf('@') !== -1) && (!reEmailWhitespace.test(input)) } -exports['ip-address'] = exports['ipv4'] = createIpValidator({ version: 4 }) -exports['ipv6'] = createIpValidator({ version: 6 }) -exports['uri'] = /^[a-zA-Z][a-zA-Z0-9+\-.]*:[^\s]*$/ -exports['color'] = /(#?([0-9A-Fa-f]{3,6})\b)|(aqua)|(black)|(blue)|(fuchsia)|(gray)|(green)|(lime)|(maroon)|(navy)|(olive)|(orange)|(purple)|(red)|(silver)|(teal)|(white)|(yellow)|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\))/ -exports['hostname'] = function (input) { - if (!(reHostnameFirstPass.test(input))) return false + for (i = 0; i < key.length; i++) + key[i] ^= 0x36; + this.inner = new this.Hash().update(key); - var parts = input.split('.') + // 0x36 ^ 0x5c = 0x6a + for (i = 0; i < key.length; i++) + key[i] ^= 0x6a; + this.outer = new this.Hash().update(key); +}; - for (var i = 0; i < parts.length; i++) { - if (!(reHostnamePart.test(parts[i]))) return false - } +Hmac.prototype.update = function update(msg, enc) { + this.inner.update(msg, enc); + return this; +}; - return true -} -exports['alpha'] = /^[a-zA-Z]+$/ -exports['alphanumeric'] = /^[a-zA-Z0-9]+$/ -exports['style'] = /.:\s*[^;]/g -exports['phone'] = function (input) { - if (!(rePhoneFirstPass.test(input))) return false - if (rePhoneDoubleSpace.test(input)) return false +Hmac.prototype.digest = function digest(enc) { + this.outer.update(this.inner.digest()); + return this.outer.digest(enc); +}; - var digits = input.substring(1).replace(rePhoneGlobalSpace, '').length +},{"./utils":169,"minimalistic-assert":363}],161:[function(require,module,exports){ +'use strict'; - return (digits >= 7 && digits <= 15) -} -exports['utc-millisec'] = /^[0-9]{1,15}\.?[0-9]{0,15}$/ +var utils = require('./utils'); +var common = require('./common'); -},{"is-my-ip-valid":198}],200:[function(require,module,exports){ -var genobj = require('generate-object-property') -var genfun = require('generate-function') -var jsonpointer = require('jsonpointer') -var xtend = require('xtend') -var formats = require('./formats') +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_3 = utils.sum32_3; +var sum32_4 = utils.sum32_4; +var BlockHash = common.BlockHash; -var get = function(obj, additionalSchemas, ptr) { +function RIPEMD160() { + if (!(this instanceof RIPEMD160)) + return new RIPEMD160(); - var visit = function(sub) { - if (sub && sub.id === ptr) return sub - if (typeof sub !== 'object' || !sub) return null - return Object.keys(sub).reduce(function(res, k) { - return res || visit(sub[k]) - }, null) - } + BlockHash.call(this); - var res = visit(obj) - if (res) return res + this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; + this.endian = 'little'; +} +utils.inherits(RIPEMD160, BlockHash); +exports.ripemd160 = RIPEMD160; - ptr = ptr.replace(/^#/, '') - ptr = ptr.replace(/\/$/, '') +RIPEMD160.blockSize = 512; +RIPEMD160.outSize = 160; +RIPEMD160.hmacStrength = 192; +RIPEMD160.padLength = 64; - try { - return jsonpointer.get(obj, decodeURI(ptr)) - } catch (err) { - var end = ptr.indexOf('#') - var other - // external reference - if (end !== 0) { - // fragment doesn't exist. - if (end === -1) { - other = additionalSchemas[ptr] - } else { - var ext = ptr.slice(0, end) - other = additionalSchemas[ext] - var fragment = ptr.slice(end).replace(/^#/, '') - try { - return jsonpointer.get(other, fragment) - } catch (err) {} - } - } else { - other = additionalSchemas[ptr] - } - return other || null +RIPEMD160.prototype._update = function update(msg, start) { + var A = this.h[0]; + var B = this.h[1]; + var C = this.h[2]; + var D = this.h[3]; + var E = this.h[4]; + var Ah = A; + var Bh = B; + var Ch = C; + var Dh = D; + var Eh = E; + for (var j = 0; j < 80; j++) { + var T = sum32( + rotl32( + sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), + s[j]), + E); + A = E; + E = D; + D = rotl32(C, 10); + C = B; + B = T; + T = sum32( + rotl32( + sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), + sh[j]), + Eh); + Ah = Eh; + Eh = Dh; + Dh = rotl32(Ch, 10); + Ch = Bh; + Bh = T; } -} + T = sum32_3(this.h[1], C, Dh); + this.h[1] = sum32_3(this.h[2], D, Eh); + this.h[2] = sum32_3(this.h[3], E, Ah); + this.h[3] = sum32_3(this.h[4], A, Bh); + this.h[4] = sum32_3(this.h[0], B, Ch); + this.h[0] = T; +}; -var types = {} +RIPEMD160.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'little'); + else + return utils.split32(this.h, 'little'); +}; -types.any = function() { - return 'true' +function f(j, x, y, z) { + if (j <= 15) + return x ^ y ^ z; + else if (j <= 31) + return (x & y) | ((~x) & z); + else if (j <= 47) + return (x | (~y)) ^ z; + else if (j <= 63) + return (x & z) | (y & (~z)); + else + return x ^ (y | (~z)); } -types.null = function(name) { - return name+' === null' +function K(j) { + if (j <= 15) + return 0x00000000; + else if (j <= 31) + return 0x5a827999; + else if (j <= 47) + return 0x6ed9eba1; + else if (j <= 63) + return 0x8f1bbcdc; + else + return 0xa953fd4e; } -types.boolean = function(name) { - return 'typeof '+name+' === "boolean"' +function Kh(j) { + if (j <= 15) + return 0x50a28be6; + else if (j <= 31) + return 0x5c4dd124; + else if (j <= 47) + return 0x6d703ef3; + else if (j <= 63) + return 0x7a6d76e9; + else + return 0x00000000; } -types.array = function(name) { - return 'Array.isArray('+name+')' -} +var r = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 +]; -types.object = function(name) { - return 'typeof '+name+' === "object" && '+name+' && !Array.isArray('+name+')' -} +var rh = [ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 +]; -types.number = function(name) { - return 'typeof '+name+' === "number" && isFinite('+name+')' -} +var s = [ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 +]; -types.integer = function(name) { - return 'typeof '+name+' === "number" && (Math.floor('+name+') === '+name+' || '+name+' > 9007199254740992 || '+name+' < -9007199254740992)' -} +var sh = [ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 +]; -types.string = function(name) { - return 'typeof '+name+' === "string"' -} +},{"./common":159,"./utils":169}],162:[function(require,module,exports){ +'use strict'; -var unique = function(array, len) { - len = Math.min(len === -1 ? array.length : len, array.length) - var list = [] - for (var i = 0; i < len; i++) { - list.push(typeof array[i] === 'object' ? JSON.stringify(array[i]) : array[i]) - } - for (var i = 1; i < list.length; i++) { - if (list.indexOf(list[i]) !== i) return false - } - return true -} +exports.sha1 = require('./sha/1'); +exports.sha224 = require('./sha/224'); +exports.sha256 = require('./sha/256'); +exports.sha384 = require('./sha/384'); +exports.sha512 = require('./sha/512'); -var isMultipleOf = function(name, multipleOf) { - var res; - var factor = ((multipleOf | 0) !== multipleOf) ? Math.pow(10, multipleOf.toString().split('.').pop().length) : 1 - if (factor > 1) { - var factorName = ((name | 0) !== name) ? Math.pow(10, name.toString().split('.').pop().length) : 1 - if (factorName > factor) res = true - else res = Math.round(factor * name) % (factor * multipleOf) - } - else res = name % multipleOf; - return !res; -} +},{"./sha/1":163,"./sha/224":164,"./sha/256":165,"./sha/384":166,"./sha/512":167}],163:[function(require,module,exports){ +'use strict'; -var testLimitedRegex = function (r, s, maxLength) { - if (maxLength > -1 && s.length > maxLength) return true - return r.test(s) -} +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); -var compile = function(schema, cache, root, reporter, opts) { - var fmts = opts ? xtend(formats, opts.formats) : formats - var scope = {unique:unique, formats:fmts, isMultipleOf:isMultipleOf, testLimitedRegex:testLimitedRegex} - var verbose = opts ? !!opts.verbose : false; - var greedy = opts && opts.greedy !== undefined ? - opts.greedy : false; +var rotl32 = utils.rotl32; +var sum32 = utils.sum32; +var sum32_5 = utils.sum32_5; +var ft_1 = shaCommon.ft_1; +var BlockHash = common.BlockHash; - var syms = {} - var allocated = [] - var gensym = function(name) { - var res = name+(syms[name] = (syms[name] || 0)+1) - allocated.push(res) - return res - } +var sha1_K = [ + 0x5A827999, 0x6ED9EBA1, + 0x8F1BBCDC, 0xCA62C1D6 +]; - var formatName = function(field) { - var s = JSON.stringify(field) - try { - var pattern = /\[([^\[\]"]+)\]/ - while (pattern.test(s)) s = s.replace(pattern, replacer) - return s - } catch (_) { - return JSON.stringify(field) - } +function SHA1() { + if (!(this instanceof SHA1)) + return new SHA1(); - function replacer (match, v) { - if (allocated.indexOf(v) === -1) throw new Error('Unreplaceable') - return '." + ' + v + ' + "' - } - } + BlockHash.call(this); + this.h = [ + 0x67452301, 0xefcdab89, 0x98badcfe, + 0x10325476, 0xc3d2e1f0 ]; + this.W = new Array(80); +} - var reversePatterns = {} - var patterns = function(p) { - if (reversePatterns[p]) return reversePatterns[p] - var n = gensym('pattern') - scope[n] = new RegExp(p) - reversePatterns[p] = n - return n - } +utils.inherits(SHA1, BlockHash); +module.exports = SHA1; - var vars = ['i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','z'] - var genloop = function() { - var v = vars.shift() - vars.push(v+v[0]) - allocated.push(v) - return v - } +SHA1.blockSize = 512; +SHA1.outSize = 160; +SHA1.hmacStrength = 80; +SHA1.padLength = 64; - var visit = function(name, node, reporter, filter, schemaPath) { - var properties = node.properties - var type = node.type - var tuple = false +SHA1.prototype._update = function _update(msg, start) { + var W = this.W; - if (Array.isArray(node.items)) { // tuple type - properties = {} - node.items.forEach(function(item, i) { - properties[i] = item - }) - type = 'array' - tuple = true - } + for (var i = 0; i < 16; i++) + W[i] = msg[start + i]; - var indent = 0 - var error = function(msg, prop, value) { - validate('errors++') - if (reporter === true) { - validate('if (validate.errors === null) validate.errors = []') - if (verbose) { - validate( - 'validate.errors.push({field:%s,message:%s,value:%s,type:%s,schemaPath:%s})', - formatName(prop || name), - JSON.stringify(msg), - value || name, - JSON.stringify(type), - JSON.stringify(schemaPath) - ) - } else { - validate('validate.errors.push({field:%s,message:%s})', formatName(prop || name), JSON.stringify(msg)) - } - } - } + for(; i < W.length; i++) + W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); - if (node.required === true) { - indent++ - validate('if (%s === undefined) {', name) - error('is required') - validate('} else {') - } else { - indent++ - validate('if (%s !== undefined) {', name) - } + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; - var valid = [].concat(type) - .map(function(t) { - if (t && !types.hasOwnProperty(t)) { - throw new Error('Unknown type: ' + t) - } + for (i = 0; i < W.length; i++) { + var s = ~~(i / 20); + var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); + e = d; + d = c; + c = rotl32(b, 30); + b = a; + a = t; + } - return types[t || 'any'](name) - }) - .join(' || ') || 'true' + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); +}; - if (valid !== 'true') { - indent++ - validate('if (!(%s)) {', valid) - error('is the wrong type') - validate('} else {') - } +SHA1.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; - if (tuple) { - if (node.additionalItems === false) { - validate('if (%s.length > %d) {', name, node.items.length) - error('has additional items') - validate('}') - } else if (node.additionalItems) { - var i = genloop() - validate('for (var %s = %d; %s < %s.length; %s++) {', i, node.items.length, i, name, i) - visit(name+'['+i+']', node.additionalItems, reporter, filter, schemaPath.concat('additionalItems')) - validate('}') - } - } +},{"../common":159,"../utils":169,"./common":168}],164:[function(require,module,exports){ +'use strict'; - if (node.format && fmts[node.format]) { - if (type !== 'string' && formats[node.format]) validate('if (%s) {', types.string(name)) - var n = gensym('format') - scope[n] = fmts[node.format] +var utils = require('../utils'); +var SHA256 = require('./256'); - if (typeof scope[n] === 'function') validate('if (!%s(%s)) {', n, name) - else validate('if (!testLimitedRegex(%s, %s, %d)) {', n, name, typeof node.maxLength === 'undefined' ? -1 : node.maxLength) - error('must be '+node.format+' format') - validate('}') - if (type !== 'string' && formats[node.format]) validate('}') - } +function SHA224() { + if (!(this instanceof SHA224)) + return new SHA224(); - if (Array.isArray(node.required)) { - var n = gensym('missing') - validate('var %s = 0', n) - var checkRequired = function (req) { - var prop = genobj(name, req); - validate('if (%s === undefined) {', prop) - error('is required', prop) - validate('%s++', n) - validate('}') - } - validate('if ((%s)) {', type !== 'object' ? types.object(name) : 'true') - node.required.map(checkRequired) - validate('}'); - if (!greedy) { - validate('if (%s === 0) {', n) - indent++ - } - } + SHA256.call(this); + this.h = [ + 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, + 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; +} +utils.inherits(SHA224, SHA256); +module.exports = SHA224; - if (node.uniqueItems) { - if (type !== 'array') validate('if (%s) {', types.array(name)) - validate('if (!(unique(%s, %d))) {', name, node.maxItems || -1) - error('must be unique') - validate('}') - if (type !== 'array') validate('}') - } +SHA224.blockSize = 512; +SHA224.outSize = 224; +SHA224.hmacStrength = 192; +SHA224.padLength = 64; - if (node.enum) { - var complex = node.enum.some(function(e) { - return typeof e === 'object' - }) +SHA224.prototype._digest = function digest(enc) { + // Just truncate output + if (enc === 'hex') + return utils.toHex32(this.h.slice(0, 7), 'big'); + else + return utils.split32(this.h.slice(0, 7), 'big'); +}; - var compare = complex ? - function(e) { - return 'JSON.stringify('+name+')'+' !== JSON.stringify('+JSON.stringify(e)+')' - } : - function(e) { - return name+' !== '+JSON.stringify(e) - } - validate('if (%s) {', node.enum.map(compare).join(' && ') || 'false') - error('must be an enum value') - validate('}') - } +},{"../utils":169,"./256":165}],165:[function(require,module,exports){ +'use strict'; - if (node.dependencies) { - if (type !== 'object') validate('if (%s) {', types.object(name)) +var utils = require('../utils'); +var common = require('../common'); +var shaCommon = require('./common'); +var assert = require('minimalistic-assert'); - Object.keys(node.dependencies).forEach(function(key) { - var deps = node.dependencies[key] - if (typeof deps === 'string') deps = [deps] +var sum32 = utils.sum32; +var sum32_4 = utils.sum32_4; +var sum32_5 = utils.sum32_5; +var ch32 = shaCommon.ch32; +var maj32 = shaCommon.maj32; +var s0_256 = shaCommon.s0_256; +var s1_256 = shaCommon.s1_256; +var g0_256 = shaCommon.g0_256; +var g1_256 = shaCommon.g1_256; - var exists = function(k) { - return genobj(name, k) + ' !== undefined' - } +var BlockHash = common.BlockHash; - if (Array.isArray(deps)) { - validate('if (%s !== undefined && !(%s)) {', genobj(name, key), deps.map(exists).join(' && ') || 'true') - error('dependencies not set') - validate('}') - } - if (typeof deps === 'object') { - validate('if (%s !== undefined) {', genobj(name, key)) - visit(name, deps, reporter, filter, schemaPath.concat(['dependencies', key])) - validate('}') - } - }) +var sha256_K = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, + 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, + 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, + 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, + 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +]; - if (type !== 'object') validate('}') - } +function SHA256() { + if (!(this instanceof SHA256)) + return new SHA256(); - if (node.additionalProperties || node.additionalProperties === false) { - if (type !== 'object') validate('if (%s) {', types.object(name)) + BlockHash.call(this); + this.h = [ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ]; + this.k = sha256_K; + this.W = new Array(64); +} +utils.inherits(SHA256, BlockHash); +module.exports = SHA256; - var i = genloop() - var keys = gensym('keys') +SHA256.blockSize = 512; +SHA256.outSize = 256; +SHA256.hmacStrength = 192; +SHA256.padLength = 64; - var toCompare = function(p) { - return keys+'['+i+'] !== '+JSON.stringify(p) - } +SHA256.prototype._update = function _update(msg, start) { + var W = this.W; - var toTest = function(p) { - return '!'+patterns(p)+'.test('+keys+'['+i+'])' - } + for (var i = 0; i < 16; i++) + W[i] = msg[start + i]; + for (; i < W.length; i++) + W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); - var additionalProp = Object.keys(properties || {}).map(toCompare) - .concat(Object.keys(node.patternProperties || {}).map(toTest)) - .join(' && ') || 'true' + var a = this.h[0]; + var b = this.h[1]; + var c = this.h[2]; + var d = this.h[3]; + var e = this.h[4]; + var f = this.h[5]; + var g = this.h[6]; + var h = this.h[7]; - validate('var %s = Object.keys(%s)', keys, name) - ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i) - ('if (%s) {', additionalProp) + assert(this.k.length === W.length); + for (i = 0; i < W.length; i++) { + var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); + var T2 = sum32(s0_256(a), maj32(a, b, c)); + h = g; + g = f; + f = e; + e = sum32(d, T1); + d = c; + c = b; + b = a; + a = sum32(T1, T2); + } - if (node.additionalProperties === false) { - if (filter) validate('delete %s', name+'['+keys+'['+i+']]') - error('has additional properties', null, JSON.stringify(name+'.') + ' + ' + keys + '['+i+']') - } else { - visit(name+'['+keys+'['+i+']]', node.additionalProperties, reporter, filter, schemaPath.concat(['additionalProperties'])) - } + this.h[0] = sum32(this.h[0], a); + this.h[1] = sum32(this.h[1], b); + this.h[2] = sum32(this.h[2], c); + this.h[3] = sum32(this.h[3], d); + this.h[4] = sum32(this.h[4], e); + this.h[5] = sum32(this.h[5], f); + this.h[6] = sum32(this.h[6], g); + this.h[7] = sum32(this.h[7], h); +}; - validate - ('}') - ('}') +SHA256.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; - if (type !== 'object') validate('}') - } +},{"../common":159,"../utils":169,"./common":168,"minimalistic-assert":363}],166:[function(require,module,exports){ +'use strict'; - if (node.$ref) { - var sub = get(root, opts && opts.schemas || {}, node.$ref) - if (sub) { - var fn = cache[node.$ref] - if (!fn) { - cache[node.$ref] = function proxy(data) { - return fn(data) - } - fn = compile(sub, cache, root, false, opts) - } - var n = gensym('ref') - scope[n] = fn - validate('if (!(%s(%s))) {', n, name) - error('referenced schema does not match') - validate('}') - } - } +var utils = require('../utils'); - if (node.not) { - var prev = gensym('prev') - validate('var %s = errors', prev) - visit(name, node.not, false, filter, schemaPath.concat('not')) - validate('if (%s === errors) {', prev) - error('negative schema matches') - validate('} else {') - ('errors = %s', prev) - ('}') - } +var SHA512 = require('./512'); - if (node.items && !tuple) { - if (type !== 'array') validate('if (%s) {', types.array(name)) +function SHA384() { + if (!(this instanceof SHA384)) + return new SHA384(); - var i = genloop() - validate('for (var %s = 0; %s < %s.length; %s++) {', i, i, name, i) - visit(name+'['+i+']', node.items, reporter, filter, schemaPath.concat('items')) - validate('}') + SHA512.call(this); + this.h = [ + 0xcbbb9d5d, 0xc1059ed8, + 0x629a292a, 0x367cd507, + 0x9159015a, 0x3070dd17, + 0x152fecd8, 0xf70e5939, + 0x67332667, 0xffc00b31, + 0x8eb44a87, 0x68581511, + 0xdb0c2e0d, 0x64f98fa7, + 0x47b5481d, 0xbefa4fa4 ]; +} +utils.inherits(SHA384, SHA512); +module.exports = SHA384; - if (type !== 'array') validate('}') - } +SHA384.blockSize = 1024; +SHA384.outSize = 384; +SHA384.hmacStrength = 192; +SHA384.padLength = 128; - if (node.patternProperties) { - if (type !== 'object') validate('if (%s) {', types.object(name)) - var keys = gensym('keys') - var i = genloop() - validate - ('var %s = Object.keys(%s)', keys, name) - ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i) - - Object.keys(node.patternProperties).forEach(function(key) { - var p = patterns(key) - validate('if (%s.test(%s)) {', p, keys+'['+i+']') - visit(name+'['+keys+'['+i+']]', node.patternProperties[key], reporter, filter, schemaPath.concat(['patternProperties', key])) - validate('}') - }) +SHA384.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h.slice(0, 12), 'big'); + else + return utils.split32(this.h.slice(0, 12), 'big'); +}; - validate('}') - if (type !== 'object') validate('}') - } +},{"../utils":169,"./512":167}],167:[function(require,module,exports){ +'use strict'; - if (node.pattern) { - var p = patterns(node.pattern) - if (type !== 'string') validate('if (%s) {', types.string(name)) - validate('if (!(testLimitedRegex(%s, %s, %d))) {', p, name, typeof node.maxLength === 'undefined' ? -1 : node.maxLength) - error('pattern mismatch') - validate('}') - if (type !== 'string') validate('}') - } +var utils = require('../utils'); +var common = require('../common'); +var assert = require('minimalistic-assert'); - if (node.allOf) { - node.allOf.forEach(function(sch, key) { - visit(name, sch, reporter, filter, schemaPath.concat(['allOf', key])) - }) - } +var rotr64_hi = utils.rotr64_hi; +var rotr64_lo = utils.rotr64_lo; +var shr64_hi = utils.shr64_hi; +var shr64_lo = utils.shr64_lo; +var sum64 = utils.sum64; +var sum64_hi = utils.sum64_hi; +var sum64_lo = utils.sum64_lo; +var sum64_4_hi = utils.sum64_4_hi; +var sum64_4_lo = utils.sum64_4_lo; +var sum64_5_hi = utils.sum64_5_hi; +var sum64_5_lo = utils.sum64_5_lo; - if (node.anyOf && node.anyOf.length) { - var prev = gensym('prev') +var BlockHash = common.BlockHash; - node.anyOf.forEach(function(sch, i) { - if (i === 0) { - validate('var %s = errors', prev) - } else { - validate('if (errors !== %s) {', prev) - ('errors = %s', prev) - } - visit(name, sch, false, false, schemaPath) - }) - node.anyOf.forEach(function(sch, i) { - if (i) validate('}') - }) - validate('if (%s !== errors) {', prev) - error('no schemas match') - validate('}') - } +var sha512_K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; - if (node.oneOf && node.oneOf.length) { - var prev = gensym('prev') - var passes = gensym('passes') +function SHA512() { + if (!(this instanceof SHA512)) + return new SHA512(); - validate - ('var %s = errors', prev) - ('var %s = 0', passes) + BlockHash.call(this); + this.h = [ + 0x6a09e667, 0xf3bcc908, + 0xbb67ae85, 0x84caa73b, + 0x3c6ef372, 0xfe94f82b, + 0xa54ff53a, 0x5f1d36f1, + 0x510e527f, 0xade682d1, + 0x9b05688c, 0x2b3e6c1f, + 0x1f83d9ab, 0xfb41bd6b, + 0x5be0cd19, 0x137e2179 ]; + this.k = sha512_K; + this.W = new Array(160); +} +utils.inherits(SHA512, BlockHash); +module.exports = SHA512; - node.oneOf.forEach(function(sch, i) { - visit(name, sch, false, false, schemaPath) - validate('if (%s === errors) {', prev) - ('%s++', passes) - ('} else {') - ('errors = %s', prev) - ('}') - }) +SHA512.blockSize = 1024; +SHA512.outSize = 512; +SHA512.hmacStrength = 192; +SHA512.padLength = 128; - validate('if (%s !== 1) {', passes) - error('no (or more than one) schemas match') - validate('}') - } +SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { + var W = this.W; - if (node.multipleOf !== undefined) { - if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) + // 32 x 32bit words + for (var i = 0; i < 32; i++) + W[i] = msg[start + i]; + for (; i < W.length; i += 2) { + var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 + var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); + var c1_hi = W[i - 14]; // i - 7 + var c1_lo = W[i - 13]; + var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 + var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); + var c3_hi = W[i - 32]; // i - 16 + var c3_lo = W[i - 31]; - validate('if (!isMultipleOf(%s, %d)) {', name, node.multipleOf) + W[i] = sum64_4_hi( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo); + W[i + 1] = sum64_4_lo( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo); + } +}; - error('has a remainder') - validate('}') +SHA512.prototype._update = function _update(msg, start) { + this._prepareBlock(msg, start); - if (type !== 'number' && type !== 'integer') validate('}') - } + var W = this.W; - if (node.maxProperties !== undefined) { - if (type !== 'object') validate('if (%s) {', types.object(name)) + var ah = this.h[0]; + var al = this.h[1]; + var bh = this.h[2]; + var bl = this.h[3]; + var ch = this.h[4]; + var cl = this.h[5]; + var dh = this.h[6]; + var dl = this.h[7]; + var eh = this.h[8]; + var el = this.h[9]; + var fh = this.h[10]; + var fl = this.h[11]; + var gh = this.h[12]; + var gl = this.h[13]; + var hh = this.h[14]; + var hl = this.h[15]; - validate('if (Object.keys(%s).length > %d) {', name, node.maxProperties) - error('has more properties than allowed') - validate('}') + assert(this.k.length === W.length); + for (var i = 0; i < W.length; i += 2) { + var c0_hi = hh; + var c0_lo = hl; + var c1_hi = s1_512_hi(eh, el); + var c1_lo = s1_512_lo(eh, el); + var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); + var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); + var c3_hi = this.k[i]; + var c3_lo = this.k[i + 1]; + var c4_hi = W[i]; + var c4_lo = W[i + 1]; - if (type !== 'object') validate('}') - } + var T1_hi = sum64_5_hi( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo, + c4_hi, c4_lo); + var T1_lo = sum64_5_lo( + c0_hi, c0_lo, + c1_hi, c1_lo, + c2_hi, c2_lo, + c3_hi, c3_lo, + c4_hi, c4_lo); - if (node.minProperties !== undefined) { - if (type !== 'object') validate('if (%s) {', types.object(name)) + c0_hi = s0_512_hi(ah, al); + c0_lo = s0_512_lo(ah, al); + c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); + c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); - validate('if (Object.keys(%s).length < %d) {', name, node.minProperties) - error('has less properties than allowed') - validate('}') + var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); + var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); - if (type !== 'object') validate('}') - } + hh = gh; + hl = gl; - if (node.maxItems !== undefined) { - if (type !== 'array') validate('if (%s) {', types.array(name)) + gh = fh; + gl = fl; - validate('if (%s.length > %d) {', name, node.maxItems) - error('has more items than allowed') - validate('}') + fh = eh; + fl = el; - if (type !== 'array') validate('}') - } + eh = sum64_hi(dh, dl, T1_hi, T1_lo); + el = sum64_lo(dl, dl, T1_hi, T1_lo); - if (node.minItems !== undefined) { - if (type !== 'array') validate('if (%s) {', types.array(name)) + dh = ch; + dl = cl; - validate('if (%s.length < %d) {', name, node.minItems) - error('has less items than allowed') - validate('}') + ch = bh; + cl = bl; - if (type !== 'array') validate('}') - } + bh = ah; + bl = al; - if (node.maxLength !== undefined) { - if (type !== 'string') validate('if (%s) {', types.string(name)) + ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); + al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); + } - validate('if (%s.length > %d) {', name, node.maxLength) - error('has longer length than allowed') - validate('}') + sum64(this.h, 0, ah, al); + sum64(this.h, 2, bh, bl); + sum64(this.h, 4, ch, cl); + sum64(this.h, 6, dh, dl); + sum64(this.h, 8, eh, el); + sum64(this.h, 10, fh, fl); + sum64(this.h, 12, gh, gl); + sum64(this.h, 14, hh, hl); +}; - if (type !== 'string') validate('}') - } +SHA512.prototype._digest = function digest(enc) { + if (enc === 'hex') + return utils.toHex32(this.h, 'big'); + else + return utils.split32(this.h, 'big'); +}; - if (node.minLength !== undefined) { - if (type !== 'string') validate('if (%s) {', types.string(name)) +function ch64_hi(xh, xl, yh, yl, zh) { + var r = (xh & yh) ^ ((~xh) & zh); + if (r < 0) + r += 0x100000000; + return r; +} - validate('if (%s.length < %d) {', name, node.minLength) - error('has less length than allowed') - validate('}') +function ch64_lo(xh, xl, yh, yl, zh, zl) { + var r = (xl & yl) ^ ((~xl) & zl); + if (r < 0) + r += 0x100000000; + return r; +} - if (type !== 'string') validate('}') - } +function maj64_hi(xh, xl, yh, yl, zh) { + var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); + if (r < 0) + r += 0x100000000; + return r; +} - if (node.minimum !== undefined) { - if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) +function maj64_lo(xh, xl, yh, yl, zh, zl) { + var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); + if (r < 0) + r += 0x100000000; + return r; +} - validate('if (%s %s %d) {', name, node.exclusiveMinimum ? '<=' : '<', node.minimum) - error('is less than minimum') - validate('}') +function s0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 28); + var c1_hi = rotr64_hi(xl, xh, 2); // 34 + var c2_hi = rotr64_hi(xl, xh, 7); // 39 - if (type !== 'number' && type !== 'integer') validate('}') - } + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} - if (node.maximum !== undefined) { - if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) +function s0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 28); + var c1_lo = rotr64_lo(xl, xh, 2); // 34 + var c2_lo = rotr64_lo(xl, xh, 7); // 39 - validate('if (%s %s %d) {', name, node.exclusiveMaximum ? '>=' : '>', node.maximum) - error('is more than maximum') - validate('}') + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} - if (type !== 'number' && type !== 'integer') validate('}') - } +function s1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 14); + var c1_hi = rotr64_hi(xh, xl, 18); + var c2_hi = rotr64_hi(xl, xh, 9); // 41 - if (properties) { - Object.keys(properties).forEach(function(p) { - if (Array.isArray(type) && type.indexOf('null') !== -1) validate('if (%s !== null) {', name) + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} - visit( - genobj(name, p), - properties[p], - reporter, - filter, - schemaPath.concat(tuple ? p : ['properties', p]) - ) +function s1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 14); + var c1_lo = rotr64_lo(xh, xl, 18); + var c2_lo = rotr64_lo(xl, xh, 9); // 41 - if (Array.isArray(type) && type.indexOf('null') !== -1) validate('}') - }) - } + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} - while (indent--) validate('}') - } +function g0_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 1); + var c1_hi = rotr64_hi(xh, xl, 8); + var c2_hi = shr64_hi(xh, xl, 7); - var validate = genfun - ('function validate(data) {') - // Since undefined is not a valid JSON value, we coerce to null and other checks will catch this - ('if (data === undefined) data = null') - ('validate.errors = null') - ('var errors = 0') + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} - visit('data', schema, reporter, opts && opts.filter, []) +function g0_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 1); + var c1_lo = rotr64_lo(xh, xl, 8); + var c2_lo = shr64_lo(xh, xl, 7); - validate - ('return errors === 0') - ('}') + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; +} - validate = validate.toFunction(scope) - validate.errors = null +function g1_512_hi(xh, xl) { + var c0_hi = rotr64_hi(xh, xl, 19); + var c1_hi = rotr64_hi(xl, xh, 29); // 61 + var c2_hi = shr64_hi(xh, xl, 6); - if (Object.defineProperty) { - Object.defineProperty(validate, 'error', { - get: function() { - if (!validate.errors) return '' - return validate.errors.map(function(err) { - return err.field + ' ' + err.message; - }).join('\n') - } - }) - } + var r = c0_hi ^ c1_hi ^ c2_hi; + if (r < 0) + r += 0x100000000; + return r; +} - validate.toJSON = function() { - return schema - } +function g1_512_lo(xh, xl) { + var c0_lo = rotr64_lo(xh, xl, 19); + var c1_lo = rotr64_lo(xl, xh, 29); // 61 + var c2_lo = shr64_lo(xh, xl, 6); - return validate + var r = c0_lo ^ c1_lo ^ c2_lo; + if (r < 0) + r += 0x100000000; + return r; } -module.exports = function(schema, opts) { - if (typeof schema === 'string') schema = JSON.parse(schema) - return compile(schema, {}, schema, true, opts) +},{"../common":159,"../utils":169,"minimalistic-assert":363}],168:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var rotr32 = utils.rotr32; + +function ft_1(s, x, y, z) { + if (s === 0) + return ch32(x, y, z); + if (s === 1 || s === 3) + return p32(x, y, z); + if (s === 2) + return maj32(x, y, z); } +exports.ft_1 = ft_1; -module.exports.filter = function(schema, opts) { - var validate = module.exports(schema, xtend(opts, {filter: true})) - return function(sch) { - validate(sch) - return sch - } +function ch32(x, y, z) { + return (x & y) ^ ((~x) & z); } +exports.ch32 = ch32; -},{"./formats":199,"generate-function":135,"generate-object-property":136,"jsonpointer":206,"xtend":632}],201:[function(require,module,exports){ -"use strict" -function isProperty(str) { - return /^[$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc][$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc0-9\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19b0-\u19c0\u19c8\u19c9\u19d0-\u19d9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f]*$/.test(str) +function maj32(x, y, z) { + return (x & y) ^ (x & z) ^ (y & z); } -module.exports = isProperty -},{}],202:[function(require,module,exports){ -(function (global){(function (){ -'use strict'; +exports.maj32 = maj32; -var forEach = require('foreach'); -var availableTypedArrays = require('available-typed-arrays'); -var callBound = require('call-bind/callBound'); +function p32(x, y, z) { + return x ^ y ^ z; +} +exports.p32 = p32; -var $toString = callBound('Object.prototype.toString'); -var hasToStringTag = require('has-tostringtag/shams')(); +function s0_256(x) { + return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); +} +exports.s0_256 = s0_256; -var typedArrays = availableTypedArrays(); +function s1_256(x) { + return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); +} +exports.s1_256 = s1_256; -var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) { - for (var i = 0; i < array.length; i += 1) { - if (array[i] === value) { - return i; - } - } - return -1; -}; -var $slice = callBound('String.prototype.slice'); -var toStrTags = {}; -var gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor'); -var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof'); -if (hasToStringTag && gOPD && getPrototypeOf) { - forEach(typedArrays, function (typedArray) { - var arr = new global[typedArray](); - if (Symbol.toStringTag in arr) { - var proto = getPrototypeOf(arr); - var descriptor = gOPD(proto, Symbol.toStringTag); - if (!descriptor) { - var superProto = getPrototypeOf(proto); - descriptor = gOPD(superProto, Symbol.toStringTag); - } - toStrTags[typedArray] = descriptor.get; - } - }); +function g0_256(x) { + return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); } +exports.g0_256 = g0_256; -var tryTypedArrays = function tryAllTypedArrays(value) { - var anyTrue = false; - forEach(toStrTags, function (getter, typedArray) { - if (!anyTrue) { - try { - anyTrue = getter.call(value) === typedArray; - } catch (e) { /**/ } - } - }); - return anyTrue; +function g1_256(x) { + return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); +} +exports.g1_256 = g1_256; + +},{"../utils":169}],169:[function(require,module,exports){ +'use strict'; + +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); + +exports.inherits = inherits; + +function isSurrogatePair(msg, i) { + if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { + return false; + } + if (i < 0 || i + 1 >= msg.length) { + return false; + } + return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; +} + +function toArray(msg, enc) { + if (Array.isArray(msg)) + return msg.slice(); + if (!msg) + return []; + var res = []; + if (typeof msg === 'string') { + if (!enc) { + // Inspired by stringToUtf8ByteArray() in closure-library by Google + // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 + // Apache License 2.0 + // https://github.com/google/closure-library/blob/master/LICENSE + var p = 0; + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + if (c < 128) { + res[p++] = c; + } else if (c < 2048) { + res[p++] = (c >> 6) | 192; + res[p++] = (c & 63) | 128; + } else if (isSurrogatePair(msg, i)) { + c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); + res[p++] = (c >> 18) | 240; + res[p++] = ((c >> 12) & 63) | 128; + res[p++] = ((c >> 6) & 63) | 128; + res[p++] = (c & 63) | 128; + } else { + res[p++] = (c >> 12) | 224; + res[p++] = ((c >> 6) & 63) | 128; + res[p++] = (c & 63) | 128; + } + } + } else if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) + msg = '0' + msg; + for (i = 0; i < msg.length; i += 2) + res.push(parseInt(msg[i] + msg[i + 1], 16)); + } + } else { + for (i = 0; i < msg.length; i++) + res[i] = msg[i] | 0; + } + return res; +} +exports.toArray = toArray; + +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) + res += zero2(msg[i].toString(16)); + return res; +} +exports.toHex = toHex; + +function htonl(w) { + var res = (w >>> 24) | + ((w >>> 8) & 0xff00) | + ((w << 8) & 0xff0000) | + ((w & 0xff) << 24); + return res >>> 0; +} +exports.htonl = htonl; + +function toHex32(msg, endian) { + var res = ''; + for (var i = 0; i < msg.length; i++) { + var w = msg[i]; + if (endian === 'little') + w = htonl(w); + res += zero8(w.toString(16)); + } + return res; +} +exports.toHex32 = toHex32; + +function zero2(word) { + if (word.length === 1) + return '0' + word; + else + return word; +} +exports.zero2 = zero2; + +function zero8(word) { + if (word.length === 7) + return '0' + word; + else if (word.length === 6) + return '00' + word; + else if (word.length === 5) + return '000' + word; + else if (word.length === 4) + return '0000' + word; + else if (word.length === 3) + return '00000' + word; + else if (word.length === 2) + return '000000' + word; + else if (word.length === 1) + return '0000000' + word; + else + return word; +} +exports.zero8 = zero8; + +function join32(msg, start, end, endian) { + var len = end - start; + assert(len % 4 === 0); + var res = new Array(len / 4); + for (var i = 0, k = start; i < res.length; i++, k += 4) { + var w; + if (endian === 'big') + w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; + else + w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; + res[i] = w >>> 0; + } + return res; +} +exports.join32 = join32; + +function split32(msg, endian) { + var res = new Array(msg.length * 4); + for (var i = 0, k = 0; i < msg.length; i++, k += 4) { + var m = msg[i]; + if (endian === 'big') { + res[k] = m >>> 24; + res[k + 1] = (m >>> 16) & 0xff; + res[k + 2] = (m >>> 8) & 0xff; + res[k + 3] = m & 0xff; + } else { + res[k + 3] = m >>> 24; + res[k + 2] = (m >>> 16) & 0xff; + res[k + 1] = (m >>> 8) & 0xff; + res[k] = m & 0xff; + } + } + return res; +} +exports.split32 = split32; + +function rotr32(w, b) { + return (w >>> b) | (w << (32 - b)); +} +exports.rotr32 = rotr32; + +function rotl32(w, b) { + return (w << b) | (w >>> (32 - b)); +} +exports.rotl32 = rotl32; + +function sum32(a, b) { + return (a + b) >>> 0; +} +exports.sum32 = sum32; + +function sum32_3(a, b, c) { + return (a + b + c) >>> 0; +} +exports.sum32_3 = sum32_3; + +function sum32_4(a, b, c, d) { + return (a + b + c + d) >>> 0; +} +exports.sum32_4 = sum32_4; + +function sum32_5(a, b, c, d, e) { + return (a + b + c + d + e) >>> 0; +} +exports.sum32_5 = sum32_5; + +function sum64(buf, pos, ah, al) { + var bh = buf[pos]; + var bl = buf[pos + 1]; + + var lo = (al + bl) >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + buf[pos] = hi >>> 0; + buf[pos + 1] = lo; +} +exports.sum64 = sum64; + +function sum64_hi(ah, al, bh, bl) { + var lo = (al + bl) >>> 0; + var hi = (lo < al ? 1 : 0) + ah + bh; + return hi >>> 0; +} +exports.sum64_hi = sum64_hi; + +function sum64_lo(ah, al, bh, bl) { + var lo = al + bl; + return lo >>> 0; +} +exports.sum64_lo = sum64_lo; + +function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { + var carry = 0; + var lo = al; + lo = (lo + bl) >>> 0; + carry += lo < al ? 1 : 0; + lo = (lo + cl) >>> 0; + carry += lo < cl ? 1 : 0; + lo = (lo + dl) >>> 0; + carry += lo < dl ? 1 : 0; + + var hi = ah + bh + ch + dh + carry; + return hi >>> 0; +} +exports.sum64_4_hi = sum64_4_hi; + +function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { + var lo = al + bl + cl + dl; + return lo >>> 0; +} +exports.sum64_4_lo = sum64_4_lo; + +function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var carry = 0; + var lo = al; + lo = (lo + bl) >>> 0; + carry += lo < al ? 1 : 0; + lo = (lo + cl) >>> 0; + carry += lo < cl ? 1 : 0; + lo = (lo + dl) >>> 0; + carry += lo < dl ? 1 : 0; + lo = (lo + el) >>> 0; + carry += lo < el ? 1 : 0; + + var hi = ah + bh + ch + dh + eh + carry; + return hi >>> 0; +} +exports.sum64_5_hi = sum64_5_hi; + +function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { + var lo = al + bl + cl + dl + el; + + return lo >>> 0; +} +exports.sum64_5_lo = sum64_5_lo; + +function rotr64_hi(ah, al, num) { + var r = (al << (32 - num)) | (ah >>> num); + return r >>> 0; +} +exports.rotr64_hi = rotr64_hi; + +function rotr64_lo(ah, al, num) { + var r = (ah << (32 - num)) | (al >>> num); + return r >>> 0; +} +exports.rotr64_lo = rotr64_lo; + +function shr64_hi(ah, al, num) { + return ah >>> num; +} +exports.shr64_hi = shr64_hi; + +function shr64_lo(ah, al, num) { + var r = (ah << (32 - num)) | (al >>> num); + return r >>> 0; +} +exports.shr64_lo = shr64_lo; + +},{"inherits":193,"minimalistic-assert":363}],170:[function(require,module,exports){ +'use strict'; + +var hash = require('hash.js'); +var utils = require('minimalistic-crypto-utils'); +var assert = require('minimalistic-assert'); + +function HmacDRBG(options) { + if (!(this instanceof HmacDRBG)) + return new HmacDRBG(options); + this.hash = options.hash; + this.predResist = !!options.predResist; + + this.outLen = this.hash.outSize; + this.minEntropy = options.minEntropy || this.hash.hmacStrength; + + this._reseed = null; + this.reseedInterval = null; + this.K = null; + this.V = null; + + var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); + var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); + var pers = utils.toArray(options.pers, options.persEnc || 'hex'); + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + this._init(entropy, nonce, pers); +} +module.exports = HmacDRBG; + +HmacDRBG.prototype._init = function init(entropy, nonce, pers) { + var seed = entropy.concat(nonce).concat(pers); + + this.K = new Array(this.outLen / 8); + this.V = new Array(this.outLen / 8); + for (var i = 0; i < this.V.length; i++) { + this.K[i] = 0x00; + this.V[i] = 0x01; + } + + this._update(seed); + this._reseed = 1; + this.reseedInterval = 0x1000000000000; // 2^48 }; -module.exports = function isTypedArray(value) { - if (!value || typeof value !== 'object') { return false; } - if (!hasToStringTag || !(Symbol.toStringTag in value)) { - var tag = $slice($toString(value), 8, -1); - return $indexOf(typedArrays, tag) > -1; - } - if (!gOPD) { return false; } - return tryTypedArrays(value); +HmacDRBG.prototype._hmac = function hmac() { + return new hash.hmac(this.hash, this.K); }; -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"available-typed-arrays":20,"call-bind/callBound":71,"es-abstract/helpers/getOwnPropertyDescriptor":128,"foreach":132,"has-tostringtag/shams":140}],203:[function(require,module,exports){ -module.exports = isTypedArray -isTypedArray.strict = isStrictTypedArray -isTypedArray.loose = isLooseTypedArray +HmacDRBG.prototype._update = function update(seed) { + var kmac = this._hmac() + .update(this.V) + .update([ 0x00 ]); + if (seed) + kmac = kmac.update(seed); + this.K = kmac.digest(); + this.V = this._hmac().update(this.V).digest(); + if (!seed) + return; -var toString = Object.prototype.toString -var names = { - '[object Int8Array]': true - , '[object Int16Array]': true - , '[object Int32Array]': true - , '[object Uint8Array]': true - , '[object Uint8ClampedArray]': true - , '[object Uint16Array]': true - , '[object Uint32Array]': true - , '[object Float32Array]': true - , '[object Float64Array]': true + this.K = this._hmac() + .update(this.V) + .update([ 0x01 ]) + .update(seed) + .digest(); + this.V = this._hmac().update(this.V).digest(); +}; + +HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { + // Optional entropy enc + if (typeof entropyEnc !== 'string') { + addEnc = add; + add = entropyEnc; + entropyEnc = null; + } + + entropy = utils.toArray(entropy, entropyEnc); + add = utils.toArray(add, addEnc); + + assert(entropy.length >= (this.minEntropy / 8), + 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); + + this._update(entropy.concat(add || [])); + this._reseed = 1; +}; + +HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { + if (this._reseed > this.reseedInterval) + throw new Error('Reseed is required'); + + // Optional encoding + if (typeof enc !== 'string') { + addEnc = add; + add = enc; + enc = null; + } + + // Optional additional data + if (add) { + add = utils.toArray(add, addEnc || 'hex'); + this._update(add); + } + + var temp = []; + while (temp.length < len) { + this.V = this._hmac().update(this.V).digest(); + temp = temp.concat(this.V); + } + + var res = temp.slice(0, len); + this._update(add); + this._reseed++; + return utils.encode(res, enc); +}; + +},{"hash.js":158,"minimalistic-assert":363,"minimalistic-crypto-utils":364}],171:[function(require,module,exports){ +var http = require('http') +var url = require('url') + +var https = module.exports + +for (var key in http) { + if (http.hasOwnProperty(key)) https[key] = http[key] } -function isTypedArray(arr) { - return ( - isStrictTypedArray(arr) - || isLooseTypedArray(arr) - ) +https.request = function (params, cb) { + params = validateParams(params) + return http.request.call(this, params, cb) } -function isStrictTypedArray(arr) { - return ( - arr instanceof Int8Array - || arr instanceof Int16Array - || arr instanceof Int32Array - || arr instanceof Uint8Array - || arr instanceof Uint8ClampedArray - || arr instanceof Uint16Array - || arr instanceof Uint32Array - || arr instanceof Float32Array - || arr instanceof Float64Array - ) +https.get = function (params, cb) { + params = validateParams(params) + return http.get.call(this, params, cb) } -function isLooseTypedArray(arr) { - return names[toString.call(arr)] +function validateParams (params) { + if (typeof params === 'string') { + params = url.parse(params) + } + if (!params.protocol) { + params.protocol = 'https:' + } + if (params.protocol !== 'https:') { + throw new Error('Protocol "' + params.protocol + '" not supported. Expected "https:"') + } + return params } -},{}],204:[function(require,module,exports){ -module.exports={ - "com.ac": true, - "net.ac": true, - "gov.ac": true, - "org.ac": true, - "mil.ac": true, - "co.ae": true, - "net.ae": true, - "gov.ae": true, - "ac.ae": true, - "sch.ae": true, +},{"http":551,"url":586}],172:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _nanoid = require("nanoid"); + +var _utils = require("./utils"); + +var defaults = { + title: 'Untitled event', + productId: 'adamgibbons/ics', + method: 'PUBLISH', + uid: (0, _nanoid.nanoid)(), + timestamp: (0, _utils.formatDate)(null, 'utc'), + start: (0, _utils.formatDate)(null, 'utc') +}; +var _default = defaults; +exports["default"] = _default; +},{"./utils":183,"nanoid":372}],173:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createEvent = createEvent; +exports.createEvents = createEvents; + +var _nanoid = require("nanoid"); + +var _pipeline = require("./pipeline"); + +function assignUniqueId(event) { + event.uid = event.uid || (0, _nanoid.nanoid)(); + return event; +} + +function validateAndBuildEvent(event) { + return (0, _pipeline.validateEvent)((0, _pipeline.buildEvent)(event)); +} + +function applyInitialFormatting(_ref) { + var error = _ref.error, + value = _ref.value; + + if (error) { + return { + error: error, + value: null + }; + } + + return { + error: null, + value: (0, _pipeline.formatEvent)(value) + }; +} + +function reformatEventsByPosition(_ref2, idx, list) { + var error = _ref2.error, + value = _ref2.value; + if (error) return { + error: error, + value: value + }; + + if (idx === 0) { + // beginning of list + return { + value: value.slice(0, value.indexOf('END:VCALENDAR')), + error: null + }; + } + + if (idx === list.length - 1) { + // end of list + return { + value: value.slice(value.indexOf('BEGIN:VEVENT')), + error: null + }; + } + + return { + error: null, + value: value.slice(value.indexOf('BEGIN:VEVENT'), value.indexOf('END:VEVENT') + 12) + }; +} + +function catenateEvents(accumulator, _ref3, idx) { + var error = _ref3.error, + value = _ref3.value; + + if (error) { + accumulator.error = error; + accumulator.value = null; + return accumulator; + } + + if (accumulator.value) { + accumulator.value = accumulator.value.concat(value); + return accumulator; + } + + accumulator.value = value; + return accumulator; +} + +function createEvent(attributes, cb) { + if (!attributes) { + Error('Attributes argument is required'); + } + + assignUniqueId(attributes); + + if (!cb) { + // No callback, so return error or value in an object + var _validateAndBuildEven = validateAndBuildEvent(attributes), + _error = _validateAndBuildEven.error, + _value = _validateAndBuildEven.value; + + if (_error) return { + error: _error, + value: _value + }; + var event = ''; + + try { + event = (0, _pipeline.formatEvent)(_value); + } catch (error) { + return { + error: error, + value: null + }; + } + + return { + error: null, + value: event + }; + } // Return a node-style callback + + + var _validateAndBuildEven2 = validateAndBuildEvent(attributes), + error = _validateAndBuildEven2.error, + value = _validateAndBuildEven2.value; + + if (error) return cb(error); + return cb(null, (0, _pipeline.formatEvent)(value)); +} + +function createEvents(events, cb) { + if (!events) { + return { + error: Error('one argument is required'), + value: null + }; + } + + if (events.length === 1) { + return createEvent(events[0], cb); + } + + var _events$map$map$map$m = events.map(assignUniqueId).map(validateAndBuildEvent).map(applyInitialFormatting).map(reformatEventsByPosition).reduce(catenateEvents, { + error: null, + value: null + }), + error = _events$map$map$map$m.error, + value = _events$map$map$map$m.value; + + if (!cb) { + return { + error: error, + value: value + }; + } + + return cb(error, value); +} +},{"./pipeline":176,"nanoid":372}],174:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = buildEvent; + +var _defaults = _interopRequireDefault(require("../defaults")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +function buildEvent() { + var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var title = attributes.title, + productId = attributes.productId, + method = attributes.method, + uid = attributes.uid, + sequence = attributes.sequence, + start = attributes.start, + startType = attributes.startType, + duration = attributes.duration, + end = attributes.end, + description = attributes.description, + url = attributes.url, + geo = attributes.geo, + location = attributes.location, + status = attributes.status, + categories = attributes.categories, + organizer = attributes.organizer, + attendees = attributes.attendees, + alarms = attributes.alarms, + recurrenceRule = attributes.recurrenceRule, + created = attributes.created, + lastModified = attributes.lastModified, + calName = attributes.calName; // fill in default values where necessary + + var output = Object.assign({}, _defaults["default"], attributes); // remove falsey values + + return Object.entries(output).reduce(function (clean, entry) { + return entry[1] ? Object.assign(clean, _defineProperty({}, entry[0], entry[1])) : clean; + }, {}); +} +},{"../defaults":172}],175:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = formatEvent; + +var _utils = require("../utils"); + +function formatEvent() { + var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var title = attributes.title, + productId = attributes.productId, + method = attributes.method, + uid = attributes.uid, + sequence = attributes.sequence, + timestamp = attributes.timestamp, + start = attributes.start, + startType = attributes.startType, + startInputType = attributes.startInputType, + startOutputType = attributes.startOutputType, + duration = attributes.duration, + end = attributes.end, + endInputType = attributes.endInputType, + endOutputType = attributes.endOutputType, + description = attributes.description, + url = attributes.url, + geo = attributes.geo, + location = attributes.location, + status = attributes.status, + categories = attributes.categories, + organizer = attributes.organizer, + attendees = attributes.attendees, + alarms = attributes.alarms, + recurrenceRule = attributes.recurrenceRule, + busyStatus = attributes.busyStatus, + created = attributes.created, + lastModified = attributes.lastModified, + calName = attributes.calName; + var icsFormat = ''; + icsFormat += 'BEGIN:VCALENDAR\r\n'; + icsFormat += 'VERSION:2.0\r\n'; + icsFormat += 'CALSCALE:GREGORIAN\r\n'; + icsFormat += (0, _utils.foldLine)("PRODID:".concat(productId)) + '\r\n'; + icsFormat += (0, _utils.foldLine)("METHOD:".concat(method)) + '\r\n'; + icsFormat += calName ? (0, _utils.foldLine)("X-WR-CALNAME:".concat(calName)) + '\r\n' : ''; + icsFormat += "X-PUBLISHED-TTL:PT1H\r\n"; + icsFormat += 'BEGIN:VEVENT\r\n'; + icsFormat += "UID:".concat(uid, "\r\n"); + icsFormat += (0, _utils.foldLine)("SUMMARY:".concat(title ? (0, _utils.setSummary)(title) : title)) + '\r\n'; + icsFormat += "DTSTAMP:".concat(timestamp, "\r\n"); // All day events like anniversaries must be specified as VALUE type DATE + + icsFormat += "DTSTART".concat(start && start.length == 3 ? ";VALUE=DATE" : "", ":").concat((0, _utils.formatDate)(start, startOutputType || startType, startInputType), "\r\n"); // End is not required for all day events on single days (like anniversaries) + + if (!end || end.length !== 3 || start.length !== end.length || start.some(function (val, i) { + return val !== end[i]; + })) { + if (end) { + icsFormat += "DTEND".concat(end.length === 3 ? ";VALUE=DATE" : "", ":").concat((0, _utils.formatDate)(end, endOutputType || startOutputType || startType, endInputType || startInputType), "\r\n"); + } + } + + icsFormat += sequence ? "SEQUENCE:".concat(sequence, "\r\n") : ''; + icsFormat += description ? (0, _utils.foldLine)("DESCRIPTION:".concat((0, _utils.setDescription)(description))) + '\r\n' : ''; + icsFormat += url ? (0, _utils.foldLine)("URL:".concat(url)) + '\r\n' : ''; + icsFormat += geo ? (0, _utils.foldLine)("GEO:".concat((0, _utils.setGeolocation)(geo))) + '\r\n' : ''; + icsFormat += location ? (0, _utils.foldLine)("LOCATION:".concat((0, _utils.setLocation)(location))) + '\r\n' : ''; + icsFormat += status ? (0, _utils.foldLine)("STATUS:".concat(status)) + '\r\n' : ''; + icsFormat += categories ? (0, _utils.foldLine)("CATEGORIES:".concat(categories)) + '\r\n' : ''; + icsFormat += organizer ? (0, _utils.foldLine)("ORGANIZER;".concat((0, _utils.setOrganizer)(organizer))) + '\r\n' : ''; + icsFormat += busyStatus ? (0, _utils.foldLine)("X-MICROSOFT-CDO-BUSYSTATUS:".concat(busyStatus)) + '\r\n' : ''; + icsFormat += created ? 'CREATED:' + (0, _utils.formatDate)(created) + '\r\n' : ''; + icsFormat += lastModified ? 'LAST-MODIFIED:' + (0, _utils.formatDate)(lastModified) + '\r\n' : ''; + + if (attendees) { + attendees.map(function (attendee) { + icsFormat += (0, _utils.foldLine)("ATTENDEE;".concat((0, _utils.setContact)(attendee))) + '\r\n'; + }); + } + + if (alarms) { + alarms.map(function (alarm) { + icsFormat += (0, _utils.setAlarm)(alarm); + }); + } + + icsFormat += recurrenceRule ? "RRULE:".concat(recurrenceRule, "\r\n") : ''; + icsFormat += duration ? "DURATION:".concat((0, _utils.formatDuration)(duration), "\r\n") : ''; + icsFormat += "END:VEVENT\r\n"; + icsFormat += "END:VCALENDAR\r\n"; + return icsFormat; +} +},{"../utils":183}],176:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "buildEvent", { + enumerable: true, + get: function get() { + return _build["default"]; + } +}); +Object.defineProperty(exports, "formatEvent", { + enumerable: true, + get: function get() { + return _format["default"]; + } +}); +Object.defineProperty(exports, "validateEvent", { + enumerable: true, + get: function get() { + return _validate["default"]; + } +}); + +var _build = _interopRequireDefault(require("./build")); + +var _format = _interopRequireDefault(require("./format")); + +var _validate = _interopRequireDefault(require("./validate")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +},{"./build":174,"./format":175,"./validate":177}],177:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = void 0; + +var _schema = _interopRequireDefault(require("../schema")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +var _default = _schema["default"]; +exports["default"] = _default; +},{"../schema":178}],178:[function(require,module,exports){ +"use strict"; + +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = validateEvent; + +var yup = _interopRequireWildcard(require("yup")); + +function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +// yup url validation blocks localhost, so use a more flexible regex instead +// taken from https://github.com/jquense/yup/issues/224#issuecomment-417172609 +// This does mean that the url validation error is +// "url must match the following: ...." as opposed to "url must be a valid URL" +var urlRegex = /^(?:([a-z0-9+.-]+):\/\/)(?:\S+(?::\S*)?@)?(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*\.?)(?::\d{2,5})?(?:[/?#]\S*)?$/; +var dateTimeSchema = yup.array().min(3).max(7).of(yup.lazy(function (item, options) { + var itemIndex = parseInt(options.path.match(/.*\[(\d+)]/)[1]); + return [yup.number().integer(), yup.number().integer().min(1).max(12), yup.number().integer().min(1).max(31), yup.number().integer().min(0).max(23), yup.number().integer().min(0).max(60), yup.number().integer().min(0).max(60)][itemIndex]; +})); +var durationSchema = yup.object().shape({ + before: yup["boolean"](), + //option to set before alaram + weeks: yup.number(), + days: yup.number(), + hours: yup.number(), + minutes: yup.number(), + seconds: yup.number() +}).noUnknown(); +var contactSchema = yup.object().shape({ + name: yup.string(), + email: yup.string().email(), + rsvp: yup["boolean"](), + dir: yup.string().matches(urlRegex), + partstat: yup.string(), + role: yup.string() +}).noUnknown(); +var organizerSchema = yup.object().shape({ + name: yup.string(), + email: yup.string().email() +}).noUnknown(); +var alarmSchema = yup.object().shape({ + action: yup.string().matches(/audio|display|email/).required(), + trigger: yup.mixed().required(), + description: yup.string(), + duration: durationSchema, + repeat: yup.number(), + attach: yup.string(), + attachType: yup.string(), + summary: yup.string(), + attendee: contactSchema, + 'x-prop': yup.mixed(), + 'iana-prop': yup.mixed() +}).noUnknown(); +var schema = yup.object().shape({ + summary: yup.string(), + timestamp: yup.mixed(), + title: yup.string(), + productId: yup.string(), + method: yup.string(), + uid: yup.string().required(), + sequence: yup.number(), + start: dateTimeSchema.required(), + duration: durationSchema, + startType: yup.string().matches(/utc|local/), + startInputType: yup.string().matches(/utc|local/), + startOutputType: yup.string().matches(/utc|local/), + end: dateTimeSchema, + endInputType: yup.string().matches(/utc|local/), + endOutputType: yup.string().matches(/utc|local/), + description: yup.string(), + url: yup.string().matches(urlRegex), + geo: yup.object().shape({ + lat: yup.number(), + lon: yup.number() + }), + location: yup.string(), + status: yup.string().matches(/TENTATIVE|CANCELLED|CONFIRMED/i), + categories: yup.array().of(yup.string()), + organizer: organizerSchema, + attendees: yup.array().of(contactSchema), + alarms: yup.array().of(alarmSchema), + recurrenceRule: yup.string(), + busyStatus: yup.string().matches(/TENTATIVE|FREE|BUSY|OOF/i), + created: dateTimeSchema, + lastModified: dateTimeSchema, + calName: yup.string() +}).test('xor', "object should have end or duration", function (val) { + var hasEnd = !!val.end; + var hasDuration = !!val.duration; + return hasEnd && !hasDuration || !hasEnd && hasDuration || !hasEnd && !hasDuration; +}).noUnknown(); + +function validateEvent(candidate) { + try { + var value = schema.validateSync(candidate, { + abortEarly: false, + strict: true + }); + return { + error: null, + value: value + }; + } catch (error) { + return { + error: Object.assign({}, error), + value: undefined + }; + } +} +},{"yup":640}],179:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = foldLine; + +function foldLine(line) { + var parts = []; + var length = 75; + + while (line.length > length) { + parts.push(line.slice(0, length)); + line = line.slice(length); + length = 74; + } + + parts.push(line); + return parts.join('\r\n\t'); +} +},{}],180:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = formatDate; + +function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } + +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } + +function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + +var pad = function pad(n) { + return n < 10 ? "0".concat(n) : "".concat(n); +}; + +function formatDate() { + var args = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var outputType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'utc'; + var inputType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'local'; + + if (Array.isArray(args) && args.length === 3) { + var _args = _slicedToArray(args, 3), + year = _args[0], + month = _args[1], + date = _args[2]; + + return "".concat(year).concat(pad(month)).concat(pad(date)); + } + + var outDate = new Date(new Date().setUTCSeconds(0, 0)); + + if (Array.isArray(args) && args.length > 0 && args[0]) { + var _args2 = _slicedToArray(args, 6), + _year = _args2[0], + _month = _args2[1], + _date = _args2[2], + _args2$ = _args2[3], + hours = _args2$ === void 0 ? 0 : _args2$, + _args2$2 = _args2[4], + minutes = _args2$2 === void 0 ? 0 : _args2$2, + _args2$3 = _args2[5], + seconds = _args2$3 === void 0 ? 0 : _args2$3; + + if (inputType === 'local') { + outDate = new Date(_year, _month - 1, _date, hours, minutes, seconds); + } else { + outDate = new Date(Date.UTC(_year, _month - 1, _date, hours, minutes, seconds)); + } + } + + if (outputType === 'local') { + return [outDate.getFullYear(), pad(outDate.getMonth() + 1), pad(outDate.getDate()), 'T', pad(outDate.getHours()), pad(outDate.getMinutes()), pad(outDate.getSeconds())].join(''); + } + + return [outDate.getUTCFullYear(), pad(outDate.getUTCMonth() + 1), pad(outDate.getUTCDate()), 'T', pad(outDate.getUTCHours()), pad(outDate.getUTCMinutes()), pad(outDate.getUTCSeconds()), 'Z'].join(''); +} +},{}],181:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = formatDuration; + +function formatDuration() { + var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var weeks = attributes.weeks, + days = attributes.days, + hours = attributes.hours, + minutes = attributes.minutes, + seconds = attributes.seconds; + var formattedDuration = 'P'; + formattedDuration += weeks ? "".concat(weeks, "W") : ''; + formattedDuration += days ? "".concat(days, "D") : ''; + formattedDuration += 'T'; + formattedDuration += hours ? "".concat(hours, "H") : ''; + formattedDuration += minutes ? "".concat(minutes, "M") : ''; + formattedDuration += seconds ? "".concat(seconds, "S") : ''; + return formattedDuration; +} +},{}],182:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = formatText; + +function formatText(text) { + return text.replace(/\\/gm, "\\\\").replace(/\r?\n/gm, "\\n").replace(/;/gm, "\\;").replace(/,/gm, "\\,"); +} +},{}],183:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "formatDate", { + enumerable: true, + get: function get() { + return _formatDate["default"]; + } +}); +Object.defineProperty(exports, "setGeolocation", { + enumerable: true, + get: function get() { + return _setGeolocation["default"]; + } +}); +Object.defineProperty(exports, "setContact", { + enumerable: true, + get: function get() { + return _setContact["default"]; + } +}); +Object.defineProperty(exports, "setOrganizer", { + enumerable: true, + get: function get() { + return _setOrganizer["default"]; + } +}); +Object.defineProperty(exports, "setAlarm", { + enumerable: true, + get: function get() { + return _setAlarm["default"]; + } +}); +Object.defineProperty(exports, "setDescription", { + enumerable: true, + get: function get() { + return _setDescription["default"]; + } +}); +Object.defineProperty(exports, "setSummary", { + enumerable: true, + get: function get() { + return _setSummary["default"]; + } +}); +Object.defineProperty(exports, "formatDuration", { + enumerable: true, + get: function get() { + return _formatDuration["default"]; + } +}); +Object.defineProperty(exports, "foldLine", { + enumerable: true, + get: function get() { + return _foldLine["default"]; + } +}); +Object.defineProperty(exports, "setLocation", { + enumerable: true, + get: function get() { + return _setLocation["default"]; + } +}); + +var _formatDate = _interopRequireDefault(require("./format-date")); + +var _setGeolocation = _interopRequireDefault(require("./set-geolocation")); + +var _setContact = _interopRequireDefault(require("./set-contact")); + +var _setOrganizer = _interopRequireDefault(require("./set-organizer")); + +var _setAlarm = _interopRequireDefault(require("./set-alarm")); + +var _setDescription = _interopRequireDefault(require("./set-description")); + +var _setSummary = _interopRequireDefault(require("./set-summary")); + +var _formatDuration = _interopRequireDefault(require("./format-duration")); + +var _foldLine = _interopRequireDefault(require("./fold-line")); + +var _setLocation = _interopRequireDefault(require("./set-location")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } +},{"./fold-line":179,"./format-date":180,"./format-duration":181,"./set-alarm":184,"./set-contact":185,"./set-description":186,"./set-geolocation":187,"./set-location":188,"./set-organizer":189,"./set-summary":190}],184:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setAlarm; + +var _formatDate = _interopRequireDefault(require("./format-date")); + +var _foldLine = _interopRequireDefault(require("./fold-line")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function setDuration(_ref) { + var weeks = _ref.weeks, + days = _ref.days, + hours = _ref.hours, + minutes = _ref.minutes, + seconds = _ref.seconds; + var formattedString = 'P'; + formattedString += weeks ? "".concat(weeks, "W") : ''; + formattedString += days ? "".concat(days, "D") : ''; + formattedString += 'T'; + formattedString += hours ? "".concat(hours, "H") : ''; + formattedString += minutes ? "".concat(minutes, "M") : ''; + formattedString += seconds ? "".concat(seconds, "S") : ''; + return formattedString; +} + +function setTrigger(trigger) { + var formattedString = ''; + + if (Array.isArray(trigger)) { + formattedString = "TRIGGER;VALUE=DATE-TIME:".concat((0, _formatDate["default"])(trigger), "\r\n"); + } else { + var alert = trigger.before ? '-' : ''; + formattedString = "TRIGGER:".concat(alert + setDuration(trigger), "\r\n"); + } + + return formattedString; +} + +function setAction(action) { + return action.toUpperCase(); +} + +function setAlarm() { + var attributes = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var action = attributes.action, + repeat = attributes.repeat, + description = attributes.description, + duration = attributes.duration, + attach = attributes.attach, + attachType = attributes.attachType, + trigger = attributes.trigger, + summary = attributes.summary; + var formattedString = 'BEGIN:VALARM\r\n'; + formattedString += (0, _foldLine["default"])("ACTION:".concat(setAction(action))) + '\r\n'; + formattedString += repeat ? (0, _foldLine["default"])("REPEAT:".concat(repeat)) + '\r\n' : ''; + formattedString += description ? (0, _foldLine["default"])("DESCRIPTION:".concat(description)) + '\r\n' : ''; + formattedString += duration ? (0, _foldLine["default"])("DURATION:".concat(setDuration(duration))) + '\r\n' : ''; + var attachInfo = attachType ? attachType : 'FMTTYPE=audio/basic'; + formattedString += attach ? (0, _foldLine["default"])("ATTACH;".concat(attachInfo, ":").concat(attach)) + '\r\n' : ''; + formattedString += trigger ? setTrigger(trigger) : ''; + formattedString += summary ? (0, _foldLine["default"])("SUMMARY:".concat(summary)) + '\r\n' : ''; + formattedString += 'END:VALARM\r\n'; + return formattedString; +} // Example: A duration of 15 days, 5 hours, and 20 seconds would be: +// P15DT5H0M20S +// A duration of 7 weeks would be: +// P7W +},{"./fold-line":179,"./format-date":180}],185:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setContact; + +function setContact(_ref) { + var name = _ref.name, + email = _ref.email, + rsvp = _ref.rsvp, + dir = _ref.dir, + partstat = _ref.partstat, + role = _ref.role; + var formattedAttendee = ''; + formattedAttendee += rsvp ? 'RSVP=TRUE;' : 'RSVP=FALSE;'; + formattedAttendee += role ? "ROLE=".concat(role, ";") : ''; + formattedAttendee += partstat ? "PARTSTAT=".concat(partstat, ";") : ''; + formattedAttendee += dir ? "DIR=".concat(dir, ";") : ''; + formattedAttendee += 'CN='; + formattedAttendee += name || 'Unnamed attendee'; + formattedAttendee += email ? ":mailto:".concat(email) : ''; + return formattedAttendee; +} +},{}],186:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setDescription; + +var _formatText = _interopRequireDefault(require("./format-text")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function setDescription(description) { + return (0, _formatText["default"])(description); +} +},{"./format-text":182}],187:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setGeolocation; + +function setGeolocation(_ref) { + var lat = _ref.lat, + lon = _ref.lon; + return "".concat(lat, ";").concat(lon); +} +},{}],188:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setLocation; + +var _formatText = _interopRequireDefault(require("./format-text")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function setLocation(location) { + return (0, _formatText["default"])(location); +} +},{"./format-text":182}],189:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setOrganizer; + +function setOrganizer(_ref) { + var name = _ref.name, + email = _ref.email, + dir = _ref.dir; + var formattedOrganizer = ''; + formattedOrganizer += dir ? "DIR=".concat(dir, ";") : ''; + formattedOrganizer += 'CN='; + formattedOrganizer += name || 'Organizer'; + formattedOrganizer += email ? ":mailto:".concat(email) : ''; + return formattedOrganizer; +} +},{}],190:[function(require,module,exports){ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports["default"] = setSummary; + +var _formatText = _interopRequireDefault(require("./format-text")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } + +function setSummary(summary) { + return (0, _formatText["default"])(summary); +} +},{"./format-text":182}],191:[function(require,module,exports){ +var ics = require('./dist'); + +module.exports = ics; + +},{"./dist":173}],192:[function(require,module,exports){ +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = (nBytes * 8) - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = ((value * c) - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} + +},{}],193:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }) + } + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } + } +} + +},{}],194:[function(require,module,exports){ +'use strict'; + +var ip = exports; +var Buffer = require('buffer').Buffer; +var os = require('os'); + +ip.toBuffer = function(ip, buff, offset) { + offset = ~~offset; + + var result; + + if (this.isV4Format(ip)) { + result = buff || new Buffer(offset + 4); + ip.split(/\./g).map(function(byte) { + result[offset++] = parseInt(byte, 10) & 0xff; + }); + } else if (this.isV6Format(ip)) { + var sections = ip.split(':', 8); + + var i; + for (i = 0; i < sections.length; i++) { + var isv4 = this.isV4Format(sections[i]); + var v4Buffer; + + if (isv4) { + v4Buffer = this.toBuffer(sections[i]); + sections[i] = v4Buffer.slice(0, 2).toString('hex'); + } + + if (v4Buffer && ++i < 8) { + sections.splice(i, 0, v4Buffer.slice(2, 4).toString('hex')); + } + } + + if (sections[0] === '') { + while (sections.length < 8) sections.unshift('0'); + } else if (sections[sections.length - 1] === '') { + while (sections.length < 8) sections.push('0'); + } else if (sections.length < 8) { + for (i = 0; i < sections.length && sections[i] !== ''; i++); + var argv = [ i, 1 ]; + for (i = 9 - sections.length; i > 0; i--) { + argv.push('0'); + } + sections.splice.apply(sections, argv); + } + + result = buff || new Buffer(offset + 16); + for (i = 0; i < sections.length; i++) { + var word = parseInt(sections[i], 16); + result[offset++] = (word >> 8) & 0xff; + result[offset++] = word & 0xff; + } + } + + if (!result) { + throw Error('Invalid ip address: ' + ip); + } + + return result; +}; + +ip.toString = function(buff, offset, length) { + offset = ~~offset; + length = length || (buff.length - offset); + + var result = []; + if (length === 4) { + // IPv4 + for (var i = 0; i < length; i++) { + result.push(buff[offset + i]); + } + result = result.join('.'); + } else if (length === 16) { + // IPv6 + for (var i = 0; i < length; i += 2) { + result.push(buff.readUInt16BE(offset + i).toString(16)); + } + result = result.join(':'); + result = result.replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3'); + result = result.replace(/:{3,4}/, '::'); + } + + return result; +}; + +var ipv4Regex = /^(\d{1,3}\.){3,3}\d{1,3}$/; +var ipv6Regex = + /^(::)?(((\d{1,3}\.){3}(\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i; + +ip.isV4Format = function(ip) { + return ipv4Regex.test(ip); +}; + +ip.isV6Format = function(ip) { + return ipv6Regex.test(ip); +}; +function _normalizeFamily(family) { + return family ? family.toLowerCase() : 'ipv4'; +} + +ip.fromPrefixLen = function(prefixlen, family) { + if (prefixlen > 32) { + family = 'ipv6'; + } else { + family = _normalizeFamily(family); + } + + var len = 4; + if (family === 'ipv6') { + len = 16; + } + var buff = new Buffer(len); + + for (var i = 0, n = buff.length; i < n; ++i) { + var bits = 8; + if (prefixlen < 8) { + bits = prefixlen; + } + prefixlen -= bits; + + buff[i] = ~(0xff >> bits) & 0xff; + } + + return ip.toString(buff); +}; + +ip.mask = function(addr, mask) { + addr = ip.toBuffer(addr); + mask = ip.toBuffer(mask); + + var result = new Buffer(Math.max(addr.length, mask.length)); + + var i = 0; + // Same protocol - do bitwise and + if (addr.length === mask.length) { + for (i = 0; i < addr.length; i++) { + result[i] = addr[i] & mask[i]; + } + } else if (mask.length === 4) { + // IPv6 address and IPv4 mask + // (Mask low bits) + for (i = 0; i < mask.length; i++) { + result[i] = addr[addr.length - 4 + i] & mask[i]; + } + } else { + // IPv6 mask and IPv4 addr + for (var i = 0; i < result.length - 6; i++) { + result[i] = 0; + } + + // ::ffff:ipv4 + result[10] = 0xff; + result[11] = 0xff; + for (i = 0; i < addr.length; i++) { + result[i + 12] = addr[i] & mask[i + 12]; + } + i = i + 12; + } + for (; i < result.length; i++) + result[i] = 0; + + return ip.toString(result); +}; + +ip.cidr = function(cidrString) { + var cidrParts = cidrString.split('/'); + + var addr = cidrParts[0]; + if (cidrParts.length !== 2) + throw new Error('invalid CIDR subnet: ' + addr); + + var mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); + + return ip.mask(addr, mask); +}; + +ip.subnet = function(addr, mask) { + var networkAddress = ip.toLong(ip.mask(addr, mask)); + + // Calculate the mask's length. + var maskBuffer = ip.toBuffer(mask); + var maskLength = 0; + + for (var i = 0; i < maskBuffer.length; i++) { + if (maskBuffer[i] === 0xff) { + maskLength += 8; + } else { + var octet = maskBuffer[i] & 0xff; + while (octet) { + octet = (octet << 1) & 0xff; + maskLength++; + } + } + } + + var numberOfAddresses = Math.pow(2, 32 - maskLength); + + return { + networkAddress: ip.fromLong(networkAddress), + firstAddress: numberOfAddresses <= 2 ? + ip.fromLong(networkAddress) : + ip.fromLong(networkAddress + 1), + lastAddress: numberOfAddresses <= 2 ? + ip.fromLong(networkAddress + numberOfAddresses - 1) : + ip.fromLong(networkAddress + numberOfAddresses - 2), + broadcastAddress: ip.fromLong(networkAddress + numberOfAddresses - 1), + subnetMask: mask, + subnetMaskLength: maskLength, + numHosts: numberOfAddresses <= 2 ? + numberOfAddresses : numberOfAddresses - 2, + length: numberOfAddresses, + contains: function(other) { + return networkAddress === ip.toLong(ip.mask(other, mask)); + } + }; +}; + +ip.cidrSubnet = function(cidrString) { + var cidrParts = cidrString.split('/'); + + var addr = cidrParts[0]; + if (cidrParts.length !== 2) + throw new Error('invalid CIDR subnet: ' + addr); + + var mask = ip.fromPrefixLen(parseInt(cidrParts[1], 10)); + + return ip.subnet(addr, mask); +}; + +ip.not = function(addr) { + var buff = ip.toBuffer(addr); + for (var i = 0; i < buff.length; i++) { + buff[i] = 0xff ^ buff[i]; + } + return ip.toString(buff); +}; + +ip.or = function(a, b) { + a = ip.toBuffer(a); + b = ip.toBuffer(b); + + // same protocol + if (a.length === b.length) { + for (var i = 0; i < a.length; ++i) { + a[i] |= b[i]; + } + return ip.toString(a); + + // mixed protocols + } else { + var buff = a; + var other = b; + if (b.length > a.length) { + buff = b; + other = a; + } + + var offset = buff.length - other.length; + for (var i = offset; i < buff.length; ++i) { + buff[i] |= other[i - offset]; + } + + return ip.toString(buff); + } +}; + +ip.isEqual = function(a, b) { + a = ip.toBuffer(a); + b = ip.toBuffer(b); + + // Same protocol + if (a.length === b.length) { + for (var i = 0; i < a.length; i++) { + if (a[i] !== b[i]) return false; + } + return true; + } + + // Swap + if (b.length === 4) { + var t = b; + b = a; + a = t; + } + + // a - IPv4, b - IPv6 + for (var i = 0; i < 10; i++) { + if (b[i] !== 0) return false; + } + + var word = b.readUInt16BE(10); + if (word !== 0 && word !== 0xffff) return false; + + for (var i = 0; i < 4; i++) { + if (a[i] !== b[i + 12]) return false; + } + + return true; +}; + +ip.isPrivate = function(addr) { + return /^(::f{4}:)?10\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i + .test(addr) || + /^(::f{4}:)?192\.168\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || + /^(::f{4}:)?172\.(1[6-9]|2\d|30|31)\.([0-9]{1,3})\.([0-9]{1,3})$/i + .test(addr) || + /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || + /^(::f{4}:)?169\.254\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(addr) || + /^f[cd][0-9a-f]{2}:/i.test(addr) || + /^fe80:/i.test(addr) || + /^::1$/.test(addr) || + /^::$/.test(addr); +}; + +ip.isPublic = function(addr) { + return !ip.isPrivate(addr); +}; + +ip.isLoopback = function(addr) { + return /^(::f{4}:)?127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})/ + .test(addr) || + /^fe80::1$/.test(addr) || + /^::1$/.test(addr) || + /^::$/.test(addr); +}; + +ip.loopback = function(family) { + // + // Default to `ipv4` + // + family = _normalizeFamily(family); + + if (family !== 'ipv4' && family !== 'ipv6') { + throw new Error('family must be ipv4 or ipv6'); + } + + return family === 'ipv4' ? '127.0.0.1' : 'fe80::1'; +}; + +// +// ### function address (name, family) +// #### @name {string|'public'|'private'} **Optional** Name or security +// of the network interface. +// #### @family {ipv4|ipv6} **Optional** IP family of the address (defaults +// to ipv4). +// +// Returns the address for the network interface on the current system with +// the specified `name`: +// * String: First `family` address of the interface. +// If not found see `undefined`. +// * 'public': the first public ip address of family. +// * 'private': the first private ip address of family. +// * undefined: First address with `ipv4` or loopback address `127.0.0.1`. +// +ip.address = function(name, family) { + var interfaces = os.networkInterfaces(); + var all; + + // + // Default to `ipv4` + // + family = _normalizeFamily(family); + + // + // If a specific network interface has been named, + // return the address. + // + if (name && name !== 'private' && name !== 'public') { + var res = interfaces[name].filter(function(details) { + var itemFamily = details.family.toLowerCase(); + return itemFamily === family; + }); + if (res.length === 0) + return undefined; + return res[0].address; + } + + var all = Object.keys(interfaces).map(function (nic) { + // + // Note: name will only be `public` or `private` + // when this is called. + // + var addresses = interfaces[nic].filter(function (details) { + details.family = details.family.toLowerCase(); + if (details.family !== family || ip.isLoopback(details.address)) { + return false; + } else if (!name) { + return true; + } + + return name === 'public' ? ip.isPrivate(details.address) : + ip.isPublic(details.address); + }); + + return addresses.length ? addresses[0].address : undefined; + }).filter(Boolean); + + return !all.length ? ip.loopback(family) : all[0]; +}; + +ip.toLong = function(ip) { + var ipl = 0; + ip.split('.').forEach(function(octet) { + ipl <<= 8; + ipl += parseInt(octet); + }); + return(ipl >>> 0); +}; + +ip.fromLong = function(ipl) { + return ((ipl >>> 24) + '.' + + (ipl >> 16 & 255) + '.' + + (ipl >> 8 & 255) + '.' + + (ipl & 255) ); +}; + +},{"buffer":69,"os":376}],195:[function(require,module,exports){ +'use strict'; + +var hasToStringTag = require('has-tostringtag/shams')(); +var callBound = require('call-bind/callBound'); + +var $toString = callBound('Object.prototype.toString'); + +var isStandardArguments = function isArguments(value) { + if (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) { + return false; + } + return $toString(value) === '[object Arguments]'; +}; + +var isLegacyArguments = function isArguments(value) { + if (isStandardArguments(value)) { + return true; + } + return value !== null && + typeof value === 'object' && + typeof value.length === 'number' && + value.length >= 0 && + $toString(value) !== '[object Array]' && + $toString(value.callee) === '[object Function]'; +}; + +var supportsStandardArguments = (function () { + return isStandardArguments(arguments); +}()); + +isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests + +module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments; + +},{"call-bind/callBound":71,"has-tostringtag/shams":140}],196:[function(require,module,exports){ + +var char = '[a-zA-Z0-9\/\+]' +var trail2 = '[AQgw]==' +var trail4 = '[AEIMQUYcgkosw048]=' +var rx = '(?:' +char+ '{4})*(?:' +char+ '(?:(?:' +trail2 + ')|(?:' +char+trail4+ ')))?' +module.exports = function (prefix,suffix, length) { + if(!Number.isInteger(length)) return new RegExp('^'+(prefix||'')+rx+(suffix||'')+'$') + + var mod = length % 3 + + return new RegExp('^'+(prefix||'')+( + char +'{'+~~((length*8)/6)+'}' + ( + mod === 0 ? '' + : mod === 1 ? trail2 + : trail4 + ) + )+(suffix||'')+'$') +} + + + + + + + + + + + + + + + + +},{}],197:[function(require,module,exports){ +'use strict'; + +var toStr = Object.prototype.toString; +var fnToStr = Function.prototype.toString; +var isFnRegex = /^\s*(?:function)?\*/; +var hasToStringTag = require('has-tostringtag/shams')(); +var getProto = Object.getPrototypeOf; +var getGeneratorFunc = function () { // eslint-disable-line consistent-return + if (!hasToStringTag) { + return false; + } + try { + return Function('return function*() {}')(); + } catch (e) { + } +}; +var GeneratorFunction; + +module.exports = function isGeneratorFunction(fn) { + if (typeof fn !== 'function') { + return false; + } + if (isFnRegex.test(fnToStr.call(fn))) { + return true; + } + if (!hasToStringTag) { + var str = toStr.call(fn); + return str === '[object GeneratorFunction]'; + } + if (!getProto) { + return false; + } + if (typeof GeneratorFunction === 'undefined') { + var generatorFunc = getGeneratorFunc(); + GeneratorFunction = generatorFunc ? getProto(generatorFunc) : false; + } + return getProto(fn) === GeneratorFunction; +}; + +},{"has-tostringtag/shams":140}],198:[function(require,module,exports){ +var reIpv4FirstPass = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ + +var reSubnetString = /\/\d{1,3}(?=%|$)/ +var reForwardSlash = /\// +var reZone = /%.*$/ +var reBadCharacters = /([^0-9a-f:/%])/i +var reBadAddress = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\/$)/i + +function validate4 (input) { + if (!(reIpv4FirstPass.test(input))) return false + + var parts = input.split('.') + + if (parts.length !== 4) return false + + if (parts[0][0] === '0' && parts[0].length > 1) return false + if (parts[1][0] === '0' && parts[1].length > 1) return false + if (parts[2][0] === '0' && parts[2].length > 1) return false + if (parts[3][0] === '0' && parts[3].length > 1) return false + + var n0 = Number(parts[0]) + var n1 = Number(parts[1]) + var n2 = Number(parts[2]) + var n3 = Number(parts[3]) + + return (n0 >= 0 && n0 < 256 && n1 >= 0 && n1 < 256 && n2 >= 0 && n2 < 256 && n3 >= 0 && n3 < 256) +} + +function validate6 (input) { + var withoutSubnet = input.replace(reSubnetString, '') + var hasSubnet = (input.length !== withoutSubnet.length) + + // FIXME: this should probably be an option in the future + if (hasSubnet) return false + + if (!hasSubnet) { + if (reForwardSlash.test(input)) return false + } + + var withoutZone = withoutSubnet.replace(reZone, '') + var lastPartSeparator = withoutZone.lastIndexOf(':') + + if (lastPartSeparator === -1) return false + + var lastPart = withoutZone.substring(lastPartSeparator + 1) + var hasV4Part = validate4(lastPart) + var address = (hasV4Part ? withoutZone.substring(0, lastPartSeparator + 1) + '1234:5678' : withoutZone) + + if (reBadCharacters.test(address)) return false + if (reBadAddress.test(address)) return false + + var halves = address.split('::') + + if (halves.length > 2) return false + + if (halves.length === 2) { + var first = (halves[0] === '' ? [] : halves[0].split(':')) + var last = (halves[1] === '' ? [] : halves[1].split(':')) + var remainingLength = 8 - (first.length + last.length) + + if (remainingLength <= 0) return false + } else { + if (address.split(':').length !== 8) return false + } + + return true +} + +function validate (input) { + return validate4(input) || validate6(input) +} + +module.exports = function validator (options) { + if (!options) options = {} + + if (options.version === 4) return validate4 + if (options.version === 6) return validate6 + if (options.version == null) return validate + + throw new Error('Unknown version: ' + options.version) +} + +module.exports['__all_regexes__'] = [ + reIpv4FirstPass, + reSubnetString, + reForwardSlash, + reZone, + reBadCharacters, + reBadAddress +] + +},{}],199:[function(require,module,exports){ +var createIpValidator = require('is-my-ip-valid') + +var reEmailWhitespace = /\s/ +var reHostnameFirstPass = /^[a-zA-Z0-9.-]+$/ +var reHostnamePart = /^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/ +var rePhoneFirstPass = /^\+[0-9][0-9 ]{5,27}[0-9]$/ +var rePhoneDoubleSpace = / {2}/ +var rePhoneGlobalSpace = / /g + +exports['date-time'] = /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}[tT ]\d{2}:\d{2}:\d{2}(?:\.\d+|)([zZ]|[+-]\d{2}:\d{2})$/ +exports['date'] = /^\d{4}-(?:0[0-9]{1}|1[0-2]{1})-[0-9]{2}$/ +exports['time'] = /^\d{2}:\d{2}:\d{2}$/ +exports['email'] = function (input) { return (input.indexOf('@') !== -1) && (!reEmailWhitespace.test(input)) } +exports['ip-address'] = exports['ipv4'] = createIpValidator({ version: 4 }) +exports['ipv6'] = createIpValidator({ version: 6 }) +exports['uri'] = /^[a-zA-Z][a-zA-Z0-9+\-.]*:[^\s]*$/ +exports['color'] = /(#?([0-9A-Fa-f]{3,6})\b)|(aqua)|(black)|(blue)|(fuchsia)|(gray)|(green)|(lime)|(maroon)|(navy)|(olive)|(orange)|(purple)|(red)|(silver)|(teal)|(white)|(yellow)|(rgb\(\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*,\s*\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\s*\))|(rgb\(\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*,\s*(\d?\d%|100%)+\s*\))/ +exports['hostname'] = function (input) { + if (!(reHostnameFirstPass.test(input))) return false + + var parts = input.split('.') + + for (var i = 0; i < parts.length; i++) { + if (!(reHostnamePart.test(parts[i]))) return false + } + + return true +} +exports['alpha'] = /^[a-zA-Z]+$/ +exports['alphanumeric'] = /^[a-zA-Z0-9]+$/ +exports['style'] = /.:\s*[^;]/g +exports['phone'] = function (input) { + if (!(rePhoneFirstPass.test(input))) return false + if (rePhoneDoubleSpace.test(input)) return false + + var digits = input.substring(1).replace(rePhoneGlobalSpace, '').length + + return (digits >= 7 && digits <= 15) +} +exports['utc-millisec'] = /^[0-9]{1,15}\.?[0-9]{0,15}$/ + +},{"is-my-ip-valid":198}],200:[function(require,module,exports){ +var genobj = require('generate-object-property') +var genfun = require('generate-function') +var jsonpointer = require('jsonpointer') +var xtend = require('xtend') +var formats = require('./formats') + +var get = function(obj, additionalSchemas, ptr) { + + var visit = function(sub) { + if (sub && sub.id === ptr) return sub + if (typeof sub !== 'object' || !sub) return null + return Object.keys(sub).reduce(function(res, k) { + return res || visit(sub[k]) + }, null) + } + + var res = visit(obj) + if (res) return res + + ptr = ptr.replace(/^#/, '') + ptr = ptr.replace(/\/$/, '') + + try { + return jsonpointer.get(obj, decodeURI(ptr)) + } catch (err) { + var end = ptr.indexOf('#') + var other + // external reference + if (end !== 0) { + // fragment doesn't exist. + if (end === -1) { + other = additionalSchemas[ptr] + } else { + var ext = ptr.slice(0, end) + other = additionalSchemas[ext] + var fragment = ptr.slice(end).replace(/^#/, '') + try { + return jsonpointer.get(other, fragment) + } catch (err) {} + } + } else { + other = additionalSchemas[ptr] + } + return other || null + } +} + +var types = {} + +types.any = function() { + return 'true' +} + +types.null = function(name) { + return name+' === null' +} + +types.boolean = function(name) { + return 'typeof '+name+' === "boolean"' +} + +types.array = function(name) { + return 'Array.isArray('+name+')' +} + +types.object = function(name) { + return 'typeof '+name+' === "object" && '+name+' && !Array.isArray('+name+')' +} + +types.number = function(name) { + return 'typeof '+name+' === "number" && isFinite('+name+')' +} + +types.integer = function(name) { + return 'typeof '+name+' === "number" && (Math.floor('+name+') === '+name+' || '+name+' > 9007199254740992 || '+name+' < -9007199254740992)' +} + +types.string = function(name) { + return 'typeof '+name+' === "string"' +} + +var unique = function(array, len) { + len = Math.min(len === -1 ? array.length : len, array.length) + var list = [] + for (var i = 0; i < len; i++) { + list.push(typeof array[i] === 'object' ? JSON.stringify(array[i]) : array[i]) + } + for (var i = 1; i < list.length; i++) { + if (list.indexOf(list[i]) !== i) return false + } + return true +} + +var isMultipleOf = function(name, multipleOf) { + var res; + var factor = ((multipleOf | 0) !== multipleOf) ? Math.pow(10, multipleOf.toString().split('.').pop().length) : 1 + if (factor > 1) { + var factorName = ((name | 0) !== name) ? Math.pow(10, name.toString().split('.').pop().length) : 1 + if (factorName > factor) res = true + else res = Math.round(factor * name) % (factor * multipleOf) + } + else res = name % multipleOf; + return !res; +} + +var testLimitedRegex = function (r, s, maxLength) { + if (maxLength > -1 && s.length > maxLength) return true + return r.test(s) +} + +var compile = function(schema, cache, root, reporter, opts) { + var fmts = opts ? xtend(formats, opts.formats) : formats + var scope = {unique:unique, formats:fmts, isMultipleOf:isMultipleOf, testLimitedRegex:testLimitedRegex} + var verbose = opts ? !!opts.verbose : false; + var greedy = opts && opts.greedy !== undefined ? + opts.greedy : false; + + var syms = {} + var allocated = [] + var gensym = function(name) { + var res = name+(syms[name] = (syms[name] || 0)+1) + allocated.push(res) + return res + } + + var formatName = function(field) { + var s = JSON.stringify(field) + try { + var pattern = /\[([^\[\]"]+)\]/ + while (pattern.test(s)) s = s.replace(pattern, replacer) + return s + } catch (_) { + return JSON.stringify(field) + } + + function replacer (match, v) { + if (allocated.indexOf(v) === -1) throw new Error('Unreplaceable') + return '." + ' + v + ' + "' + } + } + + var reversePatterns = {} + var patterns = function(p) { + if (reversePatterns[p]) return reversePatterns[p] + var n = gensym('pattern') + scope[n] = new RegExp(p) + reversePatterns[p] = n + return n + } + + var vars = ['i','j','k','l','m','n','o','p','q','r','s','t','u','v','x','y','z'] + var genloop = function() { + var v = vars.shift() + vars.push(v+v[0]) + allocated.push(v) + return v + } + + var visit = function(name, node, reporter, filter, schemaPath) { + var properties = node.properties + var type = node.type + var tuple = false + + if (Array.isArray(node.items)) { // tuple type + properties = {} + node.items.forEach(function(item, i) { + properties[i] = item + }) + type = 'array' + tuple = true + } + + var indent = 0 + var error = function(msg, prop, value) { + validate('errors++') + if (reporter === true) { + validate('if (validate.errors === null) validate.errors = []') + if (verbose) { + validate( + 'validate.errors.push({field:%s,message:%s,value:%s,type:%s,schemaPath:%s})', + formatName(prop || name), + JSON.stringify(msg), + value || name, + JSON.stringify(type), + JSON.stringify(schemaPath) + ) + } else { + validate('validate.errors.push({field:%s,message:%s})', formatName(prop || name), JSON.stringify(msg)) + } + } + } + + if (node.required === true) { + indent++ + validate('if (%s === undefined) {', name) + error('is required') + validate('} else {') + } else { + indent++ + validate('if (%s !== undefined) {', name) + } + + var valid = [].concat(type) + .map(function(t) { + if (t && !types.hasOwnProperty(t)) { + throw new Error('Unknown type: ' + t) + } + + return types[t || 'any'](name) + }) + .join(' || ') || 'true' + + if (valid !== 'true') { + indent++ + validate('if (!(%s)) {', valid) + error('is the wrong type') + validate('} else {') + } + + if (tuple) { + if (node.additionalItems === false) { + validate('if (%s.length > %d) {', name, node.items.length) + error('has additional items') + validate('}') + } else if (node.additionalItems) { + var i = genloop() + validate('for (var %s = %d; %s < %s.length; %s++) {', i, node.items.length, i, name, i) + visit(name+'['+i+']', node.additionalItems, reporter, filter, schemaPath.concat('additionalItems')) + validate('}') + } + } + + if (node.format && fmts[node.format]) { + if (type !== 'string' && formats[node.format]) validate('if (%s) {', types.string(name)) + var n = gensym('format') + scope[n] = fmts[node.format] + + if (typeof scope[n] === 'function') validate('if (!%s(%s)) {', n, name) + else validate('if (!testLimitedRegex(%s, %s, %d)) {', n, name, typeof node.maxLength === 'undefined' ? -1 : node.maxLength) + error('must be '+node.format+' format') + validate('}') + if (type !== 'string' && formats[node.format]) validate('}') + } + + if (Array.isArray(node.required)) { + var n = gensym('missing') + validate('var %s = 0', n) + var checkRequired = function (req) { + var prop = genobj(name, req); + validate('if (%s === undefined) {', prop) + error('is required', prop) + validate('%s++', n) + validate('}') + } + validate('if ((%s)) {', type !== 'object' ? types.object(name) : 'true') + node.required.map(checkRequired) + validate('}'); + if (!greedy) { + validate('if (%s === 0) {', n) + indent++ + } + } + + if (node.uniqueItems) { + if (type !== 'array') validate('if (%s) {', types.array(name)) + validate('if (!(unique(%s, %d))) {', name, node.maxItems || -1) + error('must be unique') + validate('}') + if (type !== 'array') validate('}') + } + + if (node.enum) { + var complex = node.enum.some(function(e) { + return typeof e === 'object' + }) + + var compare = complex ? + function(e) { + return 'JSON.stringify('+name+')'+' !== JSON.stringify('+JSON.stringify(e)+')' + } : + function(e) { + return name+' !== '+JSON.stringify(e) + } + + validate('if (%s) {', node.enum.map(compare).join(' && ') || 'false') + error('must be an enum value') + validate('}') + } + + if (node.dependencies) { + if (type !== 'object') validate('if (%s) {', types.object(name)) + + Object.keys(node.dependencies).forEach(function(key) { + var deps = node.dependencies[key] + if (typeof deps === 'string') deps = [deps] + + var exists = function(k) { + return genobj(name, k) + ' !== undefined' + } + + if (Array.isArray(deps)) { + validate('if (%s !== undefined && !(%s)) {', genobj(name, key), deps.map(exists).join(' && ') || 'true') + error('dependencies not set') + validate('}') + } + if (typeof deps === 'object') { + validate('if (%s !== undefined) {', genobj(name, key)) + visit(name, deps, reporter, filter, schemaPath.concat(['dependencies', key])) + validate('}') + } + }) + + if (type !== 'object') validate('}') + } + + if (node.additionalProperties || node.additionalProperties === false) { + if (type !== 'object') validate('if (%s) {', types.object(name)) + + var i = genloop() + var keys = gensym('keys') + + var toCompare = function(p) { + return keys+'['+i+'] !== '+JSON.stringify(p) + } + + var toTest = function(p) { + return '!'+patterns(p)+'.test('+keys+'['+i+'])' + } + + var additionalProp = Object.keys(properties || {}).map(toCompare) + .concat(Object.keys(node.patternProperties || {}).map(toTest)) + .join(' && ') || 'true' + + validate('var %s = Object.keys(%s)', keys, name) + ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i) + ('if (%s) {', additionalProp) + + if (node.additionalProperties === false) { + if (filter) validate('delete %s', name+'['+keys+'['+i+']]') + error('has additional properties', null, JSON.stringify(name+'.') + ' + ' + keys + '['+i+']') + } else { + visit(name+'['+keys+'['+i+']]', node.additionalProperties, reporter, filter, schemaPath.concat(['additionalProperties'])) + } + + validate + ('}') + ('}') + + if (type !== 'object') validate('}') + } + + if (node.$ref) { + var sub = get(root, opts && opts.schemas || {}, node.$ref) + if (sub) { + var fn = cache[node.$ref] + if (!fn) { + cache[node.$ref] = function proxy(data) { + return fn(data) + } + fn = compile(sub, cache, root, false, opts) + } + var n = gensym('ref') + scope[n] = fn + validate('if (!(%s(%s))) {', n, name) + error('referenced schema does not match') + validate('}') + } + } + + if (node.not) { + var prev = gensym('prev') + validate('var %s = errors', prev) + visit(name, node.not, false, filter, schemaPath.concat('not')) + validate('if (%s === errors) {', prev) + error('negative schema matches') + validate('} else {') + ('errors = %s', prev) + ('}') + } + + if (node.items && !tuple) { + if (type !== 'array') validate('if (%s) {', types.array(name)) + + var i = genloop() + validate('for (var %s = 0; %s < %s.length; %s++) {', i, i, name, i) + visit(name+'['+i+']', node.items, reporter, filter, schemaPath.concat('items')) + validate('}') + + if (type !== 'array') validate('}') + } + + if (node.patternProperties) { + if (type !== 'object') validate('if (%s) {', types.object(name)) + var keys = gensym('keys') + var i = genloop() + validate + ('var %s = Object.keys(%s)', keys, name) + ('for (var %s = 0; %s < %s.length; %s++) {', i, i, keys, i) + + Object.keys(node.patternProperties).forEach(function(key) { + var p = patterns(key) + validate('if (%s.test(%s)) {', p, keys+'['+i+']') + visit(name+'['+keys+'['+i+']]', node.patternProperties[key], reporter, filter, schemaPath.concat(['patternProperties', key])) + validate('}') + }) + + validate('}') + if (type !== 'object') validate('}') + } + + if (node.pattern) { + var p = patterns(node.pattern) + if (type !== 'string') validate('if (%s) {', types.string(name)) + validate('if (!(testLimitedRegex(%s, %s, %d))) {', p, name, typeof node.maxLength === 'undefined' ? -1 : node.maxLength) + error('pattern mismatch') + validate('}') + if (type !== 'string') validate('}') + } + + if (node.allOf) { + node.allOf.forEach(function(sch, key) { + visit(name, sch, reporter, filter, schemaPath.concat(['allOf', key])) + }) + } + + if (node.anyOf && node.anyOf.length) { + var prev = gensym('prev') + + node.anyOf.forEach(function(sch, i) { + if (i === 0) { + validate('var %s = errors', prev) + } else { + validate('if (errors !== %s) {', prev) + ('errors = %s', prev) + } + visit(name, sch, false, false, schemaPath) + }) + node.anyOf.forEach(function(sch, i) { + if (i) validate('}') + }) + validate('if (%s !== errors) {', prev) + error('no schemas match') + validate('}') + } + + if (node.oneOf && node.oneOf.length) { + var prev = gensym('prev') + var passes = gensym('passes') + + validate + ('var %s = errors', prev) + ('var %s = 0', passes) + + node.oneOf.forEach(function(sch, i) { + visit(name, sch, false, false, schemaPath) + validate('if (%s === errors) {', prev) + ('%s++', passes) + ('} else {') + ('errors = %s', prev) + ('}') + }) + + validate('if (%s !== 1) {', passes) + error('no (or more than one) schemas match') + validate('}') + } + + if (node.multipleOf !== undefined) { + if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) + + validate('if (!isMultipleOf(%s, %d)) {', name, node.multipleOf) + + error('has a remainder') + validate('}') + + if (type !== 'number' && type !== 'integer') validate('}') + } + + if (node.maxProperties !== undefined) { + if (type !== 'object') validate('if (%s) {', types.object(name)) + + validate('if (Object.keys(%s).length > %d) {', name, node.maxProperties) + error('has more properties than allowed') + validate('}') + + if (type !== 'object') validate('}') + } + + if (node.minProperties !== undefined) { + if (type !== 'object') validate('if (%s) {', types.object(name)) + + validate('if (Object.keys(%s).length < %d) {', name, node.minProperties) + error('has less properties than allowed') + validate('}') + + if (type !== 'object') validate('}') + } + + if (node.maxItems !== undefined) { + if (type !== 'array') validate('if (%s) {', types.array(name)) + + validate('if (%s.length > %d) {', name, node.maxItems) + error('has more items than allowed') + validate('}') + + if (type !== 'array') validate('}') + } + + if (node.minItems !== undefined) { + if (type !== 'array') validate('if (%s) {', types.array(name)) + + validate('if (%s.length < %d) {', name, node.minItems) + error('has less items than allowed') + validate('}') + + if (type !== 'array') validate('}') + } + + if (node.maxLength !== undefined) { + if (type !== 'string') validate('if (%s) {', types.string(name)) + + validate('if (%s.length > %d) {', name, node.maxLength) + error('has longer length than allowed') + validate('}') + + if (type !== 'string') validate('}') + } + + if (node.minLength !== undefined) { + if (type !== 'string') validate('if (%s) {', types.string(name)) + + validate('if (%s.length < %d) {', name, node.minLength) + error('has less length than allowed') + validate('}') + + if (type !== 'string') validate('}') + } + + if (node.minimum !== undefined) { + if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) + + validate('if (%s %s %d) {', name, node.exclusiveMinimum ? '<=' : '<', node.minimum) + error('is less than minimum') + validate('}') + + if (type !== 'number' && type !== 'integer') validate('}') + } + + if (node.maximum !== undefined) { + if (type !== 'number' && type !== 'integer') validate('if (%s) {', types.number(name)) + + validate('if (%s %s %d) {', name, node.exclusiveMaximum ? '>=' : '>', node.maximum) + error('is more than maximum') + validate('}') + + if (type !== 'number' && type !== 'integer') validate('}') + } + + if (properties) { + Object.keys(properties).forEach(function(p) { + if (Array.isArray(type) && type.indexOf('null') !== -1) validate('if (%s !== null) {', name) + + visit( + genobj(name, p), + properties[p], + reporter, + filter, + schemaPath.concat(tuple ? p : ['properties', p]) + ) + + if (Array.isArray(type) && type.indexOf('null') !== -1) validate('}') + }) + } + + while (indent--) validate('}') + } + + var validate = genfun + ('function validate(data) {') + // Since undefined is not a valid JSON value, we coerce to null and other checks will catch this + ('if (data === undefined) data = null') + ('validate.errors = null') + ('var errors = 0') + + visit('data', schema, reporter, opts && opts.filter, []) + + validate + ('return errors === 0') + ('}') + + validate = validate.toFunction(scope) + validate.errors = null + + if (Object.defineProperty) { + Object.defineProperty(validate, 'error', { + get: function() { + if (!validate.errors) return '' + return validate.errors.map(function(err) { + return err.field + ' ' + err.message; + }).join('\n') + } + }) + } + + validate.toJSON = function() { + return schema + } + + return validate +} + +module.exports = function(schema, opts) { + if (typeof schema === 'string') schema = JSON.parse(schema) + return compile(schema, {}, schema, true, opts) +} + +module.exports.filter = function(schema, opts) { + var validate = module.exports(schema, xtend(opts, {filter: true})) + return function(sch) { + validate(sch) + return sch + } +} + +},{"./formats":199,"generate-function":135,"generate-object-property":136,"jsonpointer":206,"xtend":632}],201:[function(require,module,exports){ +"use strict" +function isProperty(str) { + return /^[$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc][$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc0-9\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19b0-\u19c0\u19c8\u19c9\u19d0-\u19d9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f]*$/.test(str) +} +module.exports = isProperty +},{}],202:[function(require,module,exports){ +(function (global){(function (){ +'use strict'; + +var forEach = require('foreach'); +var availableTypedArrays = require('available-typed-arrays'); +var callBound = require('call-bind/callBound'); + +var $toString = callBound('Object.prototype.toString'); +var hasToStringTag = require('has-tostringtag/shams')(); + +var typedArrays = availableTypedArrays(); + +var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) { + for (var i = 0; i < array.length; i += 1) { + if (array[i] === value) { + return i; + } + } + return -1; +}; +var $slice = callBound('String.prototype.slice'); +var toStrTags = {}; +var gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor'); +var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof'); +if (hasToStringTag && gOPD && getPrototypeOf) { + forEach(typedArrays, function (typedArray) { + var arr = new global[typedArray](); + if (Symbol.toStringTag in arr) { + var proto = getPrototypeOf(arr); + var descriptor = gOPD(proto, Symbol.toStringTag); + if (!descriptor) { + var superProto = getPrototypeOf(proto); + descriptor = gOPD(superProto, Symbol.toStringTag); + } + toStrTags[typedArray] = descriptor.get; + } + }); +} + +var tryTypedArrays = function tryAllTypedArrays(value) { + var anyTrue = false; + forEach(toStrTags, function (getter, typedArray) { + if (!anyTrue) { + try { + anyTrue = getter.call(value) === typedArray; + } catch (e) { /**/ } + } + }); + return anyTrue; +}; + +module.exports = function isTypedArray(value) { + if (!value || typeof value !== 'object') { return false; } + if (!hasToStringTag || !(Symbol.toStringTag in value)) { + var tag = $slice($toString(value), 8, -1); + return $indexOf(typedArrays, tag) > -1; + } + if (!gOPD) { return false; } + return tryTypedArrays(value); +}; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{"available-typed-arrays":20,"call-bind/callBound":71,"es-abstract/helpers/getOwnPropertyDescriptor":128,"foreach":132,"has-tostringtag/shams":140}],203:[function(require,module,exports){ +module.exports = isTypedArray +isTypedArray.strict = isStrictTypedArray +isTypedArray.loose = isLooseTypedArray + +var toString = Object.prototype.toString +var names = { + '[object Int8Array]': true + , '[object Int16Array]': true + , '[object Int32Array]': true + , '[object Uint8Array]': true + , '[object Uint8ClampedArray]': true + , '[object Uint16Array]': true + , '[object Uint32Array]': true + , '[object Float32Array]': true + , '[object Float64Array]': true +} + +function isTypedArray(arr) { + return ( + isStrictTypedArray(arr) + || isLooseTypedArray(arr) + ) +} + +function isStrictTypedArray(arr) { + return ( + arr instanceof Int8Array + || arr instanceof Int16Array + || arr instanceof Int32Array + || arr instanceof Uint8Array + || arr instanceof Uint8ClampedArray + || arr instanceof Uint16Array + || arr instanceof Uint32Array + || arr instanceof Float32Array + || arr instanceof Float64Array + ) +} + +function isLooseTypedArray(arr) { + return names[toString.call(arr)] +} + +},{}],204:[function(require,module,exports){ +module.exports={ + "com.ac": true, + "net.ac": true, + "gov.ac": true, + "org.ac": true, + "mil.ac": true, + "co.ae": true, + "net.ae": true, + "gov.ae": true, + "ac.ae": true, + "sch.ae": true, "org.ae": true, "mil.ae": true, "pro.ae": true, @@ -30007,645 +32306,4072 @@ module.exports={ "org.zm": true, "sch.zm": true } -},{}],205:[function(require,module,exports){ -const punycode = require('punycode') -const sldMap = require('./data/sldMap.json') +},{}],205:[function(require,module,exports){ +const punycode = require('punycode') +const sldMap = require('./data/sldMap.json') + +module.exports = function isValidDomain (value, opts) { + if (typeof value !== 'string') return false + if (!(opts instanceof Object)) opts = {} + value = value.toLowerCase() + + if (value.endsWith('.')) { + value = value.slice(0, value.length - 1) + } + + if (opts.allowUnicode) { + value = punycode.toASCII(value) + } + + if (value.length > 253) { + return false + } + + const validChars = /^([a-z0-9-._*]+)$/g + if (!validChars.test(value)) { + return false + } + + const sldRegex = /(.*)\.(([a-z0-9]+)(\.[a-z0-9]+))/ + const matches = value.match(sldRegex) + var tld = null + var labels = null + if (matches && matches.length > 2) { + if (sldMap[matches[2]]) { + tld = matches[2] + labels = matches[1].split('.') + } + } + + if (!labels) { + labels = value.split('.') + if (labels.length <= 1) return false + + tld = labels.pop() + const tldRegex = /^(?:xn--)?(?!^\d+$)[a-z0-9]+$/gi + + if (!tldRegex.test(tld)) return false + } + + if (opts.subdomain === false && labels.length > 1) return false + + const isValid = labels.every(function (label, index) { + if (opts.wildcard && index === 0 && label === '*' && labels.length > 1) { + return true + } + + let validLabelChars = /^([a-zA-Z0-9-_]+)$/g + if (index === labels.length - 1) { + validLabelChars = /^([a-zA-Z0-9-]+)$/g + } + + const doubleDashCount = (label.match(/--/g) || []).length + const xnDashCount = (label.match(/xn--/g) || []).length + if (doubleDashCount !== xnDashCount) { + return false + } + + const isValid = ( + validLabelChars.test(label) && + label.length < 64 && + !label.startsWith('-') && + !label.endsWith('-') + ) + + return isValid + }) + + return isValid +} + +},{"./data/sldMap.json":204,"punycode":445}],206:[function(require,module,exports){ +var hasExcape = /~/ +var escapeMatcher = /~[01]/g +function escapeReplacer (m) { + switch (m) { + case '~1': return '/' + case '~0': return '~' + } + throw new Error('Invalid tilde escape: ' + m) +} + +function untilde (str) { + if (!hasExcape.test(str)) return str + return str.replace(escapeMatcher, escapeReplacer) +} + +function setter (obj, pointer, value) { + var part + var hasNextPart + + if (pointer[1] === 'constructor' && pointer[2] === 'prototype') return obj + if (pointer[1] === '__proto__') return obj + + for (var p = 1, len = pointer.length; p < len;) { + part = untilde(pointer[p++]) + hasNextPart = len > p + + if (typeof obj[part] === 'undefined') { + // support setting of /- + if (Array.isArray(obj) && part === '-') { + part = obj.length + } + + // support nested objects/array when setting values + if (hasNextPart) { + if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = [] + else obj[part] = {} + } + } + + if (!hasNextPart) break + obj = obj[part] + } + + var oldValue = obj[part] + if (value === undefined) delete obj[part] + else obj[part] = value + return oldValue +} + +function compilePointer (pointer) { + if (typeof pointer === 'string') { + pointer = pointer.split('/') + if (pointer[0] === '') return pointer + throw new Error('Invalid JSON pointer.') + } else if (Array.isArray(pointer)) { + return pointer + } + + throw new Error('Invalid JSON pointer.') +} + +function get (obj, pointer) { + if (typeof obj !== 'object') throw new Error('Invalid input object.') + pointer = compilePointer(pointer) + var len = pointer.length + if (len === 1) return obj + + for (var p = 1; p < len;) { + obj = obj[untilde(pointer[p++])] + if (len === p) return obj + if (typeof obj !== 'object') return undefined + } +} + +function set (obj, pointer, value) { + if (typeof obj !== 'object') throw new Error('Invalid input object.') + pointer = compilePointer(pointer) + if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.') + return setter(obj, pointer, value) +} + +function compile (pointer) { + var compiled = compilePointer(pointer) + return { + get: function (object) { + return get(object, compiled) + }, + set: function (object, value) { + return set(object, compiled, value) + } + } +} + +exports.get = get +exports.set = set +exports.compile = compile + +},{}],207:[function(require,module,exports){ +/// keymage.js - Javascript keyboard bindings handling +/// http://github.com/piranha/keymage +/// +/// (c) 2012-2016 Alexander Solovyov under terms of ISC License + +(function(define, undefined) { +define(function() { + var VERSION = '1.1.3'; + var isOsx = typeof navigator !== 'undefined' && + ~navigator.userAgent.indexOf('Mac OS X'); + + // Defining all keys + var MODPROPS = ['shiftKey', 'ctrlKey', 'altKey', 'metaKey']; + var MODS = { + 'shift': 'shift', + 'ctrl': 'ctrl', 'control': 'ctrl', + 'alt': 'alt', 'option': 'alt', + 'win': 'meta', 'cmd': 'meta', 'super': 'meta', + 'meta': 'meta', + // default modifier for os x is cmd and for others is ctrl + 'defmod': isOsx ? 'meta' : 'ctrl' + }; + var MODORDER = ['shift', 'ctrl', 'alt', 'meta']; + var MODNUMS = [16, 17, 18, 91]; + + var KEYS = { + 'backspace': 8, + 'tab': 9, + 'enter': 13, 'return': 13, + 'pause': 19, + 'caps': 20, 'capslock': 20, + 'escape': 27, 'esc': 27, + 'space': 32, + 'pgup': 33, 'pageup': 33, + 'pgdown': 34, 'pagedown': 34, + 'end': 35, + 'home': 36, + 'ins': 45, 'insert': 45, + 'del': 46, 'delete': 46, + + 'left': 37, + 'up': 38, + 'right': 39, + 'down': 40, + + '*': 106, + '+': 107, 'plus': 107, + 'minus': 109, + ';': 186, + '=': 187, + ',': 188, + '-': 189, + '.': 190, + '/': 191, + '`': 192, + '[': 219, + '\\': 220, + ']': 221, + "'": 222 + }; + + var i; + // numpad + for (i = 0; i < 10; i++) { + KEYS['num-' + i] = i + 95; + } + // top row 0-9 + for (i = 0; i < 10; i++) { + KEYS[i.toString()] = i + 48; + } + // f1-f24 + for (i = 1; i < 25; i++) { + KEYS['f' + i] = i + 111; + } + // alphabet + for (i = 65; i < 91; i++) { + KEYS[String.fromCharCode(i).toLowerCase()] = i; + } + + // Reverse key codes + var KEYREV = {}; + for (var k in KEYS) { + var val = KEYS[k]; + if (!KEYREV[val] || KEYREV[val].length < k.length) { + KEYREV[val] = k; + } + } + + // ----------------------- + // Actual work is done here + + var currentScope = ''; + var allChains = {}; + + function parseKeyString(keystring) { + var bits = keystring.split(/-(?!$)/); + var button = bits[bits.length - 1]; + var key = {code: KEYS[button]}; + + if (!key.code) { + throw 'Unknown key "' + button + '" in keystring "' + + keystring + '"'; + } + + var mod; + for (var i = 0; i < bits.length - 1; i++) { + button = bits[i]; + mod = MODS[button]; + if (!mod) { + throw 'Unknown modifier "' + button + '" in keystring "' + + keystring + '"'; + } + key[mod] = true; + } + + return key; + } + + function stringifyKey(key) { + var s = ''; + for (var i = 0; i < MODORDER.length; i++) { + if (key[MODORDER[i]]) { + s += MODORDER[i] + '-'; + } + } + s += KEYREV[key.code]; + return s; + } + + function normalizeKeyChain(keychainString) { + var keychain = []; + var keys = keychainString.split(' '); + + for (var i = 0; i < keys.length; i++) { + var key = parseKeyString(keys[i]); + key = stringifyKey(key); + keychain.push(key); + } + + keychain.original = keychainString; + return keychain; + } + + function eventKeyString(e) { + var key = {code: e.keyCode}; + for (var i = 0; i < MODPROPS.length; i++) { + var mod = MODPROPS[i]; + if (e[mod]) { + key[mod.slice(0, mod.length - 3)] = true; + } + } + return stringifyKey(key); + } + + function getNestedChains(chains, scope) { + for (var i = 0; i < scope.length; i++) { + var bit = scope[i]; + + if (bit) { + chains = chains[bit]; + } + + if (!chains) { + break; + } + } + return chains; + } + + var sequence = []; + function dispatch(e) { + // Skip all modifiers + if (~MODNUMS.indexOf(e.keyCode)) { + return; + } + + var seq = sequence.slice(); + seq.push(eventKeyString(e)); + var scope = currentScope.split('.'); + var matched, chains, key; + + for (var i = scope.length; i >= 0; i--) { + chains = getNestedChains(allChains, scope.slice(0, i)); + if (!chains) { + continue; + } + matched = true; + for (var j = 0; j < seq.length; j++) { + key = seq[j]; + if (!chains[key]) { + matched = false; + break; + } + chains = chains[key]; + } + + if (matched) { + break; + } + } + + var definitionScope = scope.slice(0, i).join('.'); + var preventDefault = chains.preventDefault; + + // partial match, save the sequence + if (matched && !chains.handlers) { + sequence = seq; + if (preventDefault) { + e.preventDefault(); + } + return; + } + + if (matched) { + for (i = 0; i < chains.handlers.length; i++) { + var handler = chains.handlers[i]; + var options = handler._keymage; + + var res = handler.call(options.context, e, { + shortcut: options.original, + scope: currentScope, + definitionScope: definitionScope + }); + + if (res === false || preventDefault) { + e.preventDefault(); + } + } + } + + // either matched or not, drop the sequence + sequence = []; + } + + function getHandlers(scope, keychain, fn) { + var bits = scope.split('.'); + var chains = allChains; + bits = bits.concat(keychain); + + for (var i = 0, l = bits.length; i < l; i++) { + var bit = bits[i]; + if (!bit) continue; + + chains = chains[bit] || (chains[bit] = {}); + if (fn && fn._keymage.preventDefault) { + chains.preventDefault = true; + } + + if (i === l - 1) { + var handlers = chains.handlers || (chains.handlers = []); + return handlers; + } + } + } + + function assignKey(scope, keychain, fn) { + var handlers = getHandlers(scope, keychain, fn); + handlers.push(fn); + } + + function unassignKey(scope, keychain, fn) { + var handlers = getHandlers(scope, keychain); + var idx = handlers.indexOf(fn); + if (~idx) { + handlers.splice(idx, 1); + } + } + + function parsed(scope, keychain, fn, options) { + if (keychain === undefined && fn === undefined) { + return function(keychain, fn) { + return keymage(scope, keychain, fn); + }; + } + + if (typeof keychain === 'function') { + options = fn; + fn = keychain; + keychain = scope; + scope = ''; + } + + var normalized = normalizeKeyChain(keychain); + + return [scope, normalized, fn, options]; + } + + // optional arguments: scope, options. + function keymage(scope, keychain, fn, options) { + var args = parsed(scope, keychain, fn, options); + fn = args[2]; + options = args[3]; + fn._keymage = options || {}; + fn._keymage.original = keychain; + assignKey.apply(null, args); + + return function () { + unassignKey.apply(null, args); + }; + } + + keymage.unbind = function(scope, keychain, fn) { + var args = parsed(scope, keychain, fn); + unassignKey.apply(null, args); + }; + + keymage.parse = parseKeyString; + keymage.stringify = stringifyKey; + + keymage.bindings = allChains; + + keymage.setScope = function(scope) { + currentScope = scope ? scope : ''; + }; + + keymage.getScope = function() { return currentScope; }; + + keymage.pushScope = function(scope) { + currentScope = (currentScope ? currentScope + '.' : '') + scope; + return currentScope; + }; + + keymage.popScope = function(scope) { + var i; + + if (!scope) { + i = currentScope.lastIndexOf('.'); + scope = currentScope.slice(i + 1); + currentScope = i == -1 ? '' : currentScope.slice(0, i); + return scope; + } + + currentScope = currentScope.replace( + new RegExp('(^|\\.)' + scope + '(\\.|$).*'), ''); + return scope; + }; + + keymage.version = VERSION; + + window.addEventListener('keydown', dispatch, false); + + return keymage; +}); +})(typeof define !== 'undefined' ? define : function(factory) { + if (typeof module !== 'undefined') { + module.exports = factory(); + } else { + window.keymage = factory(); + } +}); + +},{}],208:[function(require,module,exports){ +function isObject (o, allowArray) { + return o && 'object' === typeof o && (allowArray || !Array.isArray(o)) +} + +function isBasic (b) { + return 'string' === typeof b || 'number' === typeof b +} + +function get (obj, path, dft) { + if(!isObject(obj, true)) return dft + if(isBasic(path)) return obj[path] + for(var i = 0; i < path.length; i++) { + if(null == (obj = obj[path[i]])) return dft + } + return obj +} + +function isNonNegativeInteger (i) { + return Number.isInteger(i) && i >= 0 +} + +function set (obj, path, value) { + if(!obj) throw new Error('libnested.set: first arg must be an object') + if(isBasic(path)) return obj[path] = value + for(var i = 0; i < path.length; i++) + if(i === path.length - 1) + obj[path[i]] = value + else if(null == obj[path[i]]) + obj = (obj[path[i]] = isNonNegativeInteger(path[i+1]) ? [] : {}) + else + obj = obj[path[i]] + return value +} + +function each (obj, iter, includeArrays, path) { + path = path || [] + //handle array separately, so that arrays can have integer keys + if(Array.isArray(obj)) { + if(!includeArrays) return false + for(var k = 0; k < obj.length; k++) { + //loop content is duplicated, so that return works + var v = obj[k] + if(isObject(v, includeArrays)) { + if(false === each(v, iter, includeArrays, path.concat(k))) + return false + } else { + if(false === iter(v, path.concat(k))) return false + } + } + } + else { + for(var k in obj) { + //loop content is duplicated, so that return works + var v = obj[k] + if(isObject(v, includeArrays)) { + if(false === each(v, iter, includeArrays, path.concat(k))) + return false + } else { + if(false === iter(v, path.concat(k))) return false + } + } + } + return true +} + +function map (obj, iter, out, includeArrays) { + var out = out || Array.isArray(obj) ? [] : {} + each(obj, function (val, path) { + set(out, path, iter(val, path)) + }, includeArrays) + return out +} + +function paths (obj, incluedArrays) { + var out = [] + each(obj, function (_, path) { + out.push(path) + }, incluedArrays) + return out +} + +function id (e) { return e } + +//note, cyclic objects are not supported. +//will cause an stack overflow. +function clone (obj) { + if(!isObject(obj, true)) return obj + var _obj + _obj = Array.isArray(obj) ? [] : {} + for(var k in obj) _obj[k] = clone(obj[k]) + return _obj +} + +exports.get = get +exports.set = set +exports.each = each +exports.map = map +exports.paths = paths +exports.clone = clone +exports.copy = clone + +},{}],209:[function(require,module,exports){ +!function(e){function r(e,r){"use strict";var t,a=r.ready.then((function(){function a(){if(0!==t._sodium_init())throw new Error("libsodium was not correctly initialized.");for(var r=["crypto_aead_chacha20poly1305_decrypt","crypto_aead_chacha20poly1305_decrypt_detached","crypto_aead_chacha20poly1305_encrypt","crypto_aead_chacha20poly1305_encrypt_detached","crypto_aead_chacha20poly1305_ietf_decrypt","crypto_aead_chacha20poly1305_ietf_decrypt_detached","crypto_aead_chacha20poly1305_ietf_encrypt","crypto_aead_chacha20poly1305_ietf_encrypt_detached","crypto_aead_chacha20poly1305_ietf_keygen","crypto_aead_chacha20poly1305_keygen","crypto_aead_xchacha20poly1305_ietf_decrypt","crypto_aead_xchacha20poly1305_ietf_decrypt_detached","crypto_aead_xchacha20poly1305_ietf_encrypt","crypto_aead_xchacha20poly1305_ietf_encrypt_detached","crypto_aead_xchacha20poly1305_ietf_keygen","crypto_auth","crypto_auth_hmacsha256","crypto_auth_hmacsha256_keygen","crypto_auth_hmacsha256_verify","crypto_auth_hmacsha512","crypto_auth_hmacsha512_keygen","crypto_auth_hmacsha512_verify","crypto_auth_keygen","crypto_auth_verify","crypto_box_beforenm","crypto_box_curve25519xchacha20poly1305_keypair","crypto_box_curve25519xchacha20poly1305_seal","crypto_box_curve25519xchacha20poly1305_seal_open","crypto_box_detached","crypto_box_easy","crypto_box_easy_afternm","crypto_box_keypair","crypto_box_open_detached","crypto_box_open_easy","crypto_box_open_easy_afternm","crypto_box_seal","crypto_box_seal_open","crypto_box_seed_keypair","crypto_core_ed25519_add","crypto_core_ed25519_from_hash","crypto_core_ed25519_from_uniform","crypto_core_ed25519_is_valid_point","crypto_core_ed25519_random","crypto_core_ed25519_scalar_add","crypto_core_ed25519_scalar_complement","crypto_core_ed25519_scalar_invert","crypto_core_ed25519_scalar_mul","crypto_core_ed25519_scalar_negate","crypto_core_ed25519_scalar_random","crypto_core_ed25519_scalar_reduce","crypto_core_ed25519_scalar_sub","crypto_core_ed25519_sub","crypto_core_ristretto255_add","crypto_core_ristretto255_from_hash","crypto_core_ristretto255_is_valid_point","crypto_core_ristretto255_random","crypto_core_ristretto255_scalar_add","crypto_core_ristretto255_scalar_complement","crypto_core_ristretto255_scalar_invert","crypto_core_ristretto255_scalar_mul","crypto_core_ristretto255_scalar_negate","crypto_core_ristretto255_scalar_random","crypto_core_ristretto255_scalar_reduce","crypto_core_ristretto255_scalar_sub","crypto_core_ristretto255_sub","crypto_generichash","crypto_generichash_blake2b_salt_personal","crypto_generichash_final","crypto_generichash_init","crypto_generichash_keygen","crypto_generichash_update","crypto_hash","crypto_hash_sha256","crypto_hash_sha256_final","crypto_hash_sha256_init","crypto_hash_sha256_update","crypto_hash_sha512","crypto_hash_sha512_final","crypto_hash_sha512_init","crypto_hash_sha512_update","crypto_kdf_derive_from_key","crypto_kdf_keygen","crypto_kx_client_session_keys","crypto_kx_keypair","crypto_kx_seed_keypair","crypto_kx_server_session_keys","crypto_onetimeauth","crypto_onetimeauth_final","crypto_onetimeauth_init","crypto_onetimeauth_keygen","crypto_onetimeauth_update","crypto_onetimeauth_verify","crypto_pwhash","crypto_pwhash_scryptsalsa208sha256","crypto_pwhash_scryptsalsa208sha256_ll","crypto_pwhash_scryptsalsa208sha256_str","crypto_pwhash_scryptsalsa208sha256_str_verify","crypto_pwhash_str","crypto_pwhash_str_needs_rehash","crypto_pwhash_str_verify","crypto_scalarmult","crypto_scalarmult_base","crypto_scalarmult_ed25519","crypto_scalarmult_ed25519_base","crypto_scalarmult_ed25519_base_noclamp","crypto_scalarmult_ed25519_noclamp","crypto_scalarmult_ristretto255","crypto_scalarmult_ristretto255_base","crypto_secretbox_detached","crypto_secretbox_easy","crypto_secretbox_keygen","crypto_secretbox_open_detached","crypto_secretbox_open_easy","crypto_secretstream_xchacha20poly1305_init_pull","crypto_secretstream_xchacha20poly1305_init_push","crypto_secretstream_xchacha20poly1305_keygen","crypto_secretstream_xchacha20poly1305_pull","crypto_secretstream_xchacha20poly1305_push","crypto_secretstream_xchacha20poly1305_rekey","crypto_shorthash","crypto_shorthash_keygen","crypto_shorthash_siphashx24","crypto_sign","crypto_sign_detached","crypto_sign_ed25519_pk_to_curve25519","crypto_sign_ed25519_sk_to_curve25519","crypto_sign_ed25519_sk_to_pk","crypto_sign_ed25519_sk_to_seed","crypto_sign_final_create","crypto_sign_final_verify","crypto_sign_init","crypto_sign_keypair","crypto_sign_open","crypto_sign_seed_keypair","crypto_sign_update","crypto_sign_verify_detached","crypto_stream_chacha20","crypto_stream_chacha20_ietf_xor","crypto_stream_chacha20_ietf_xor_ic","crypto_stream_chacha20_keygen","crypto_stream_chacha20_xor","crypto_stream_chacha20_xor_ic","crypto_stream_keygen","crypto_stream_xchacha20_keygen","crypto_stream_xchacha20_xor","crypto_stream_xchacha20_xor_ic","randombytes_buf","randombytes_buf_deterministic","randombytes_close","randombytes_random","randombytes_set_implementation","randombytes_stir","randombytes_uniform","sodium_version_string"],a=[E,x,k,S,T,w,Y,B,A,K,M,I,N,L,U,O,C,R,P,G,X,D,F,V,H,q,j,z,W,J,Q,Z,$,ee,re,te,ae,_e,se,ne,ce,oe,he,pe,ye,ie,le,ue,de,ve,ge,be,fe,me,Ee,xe,ke,Se,Te,we,Ye,Be,Ae,Ke,Me,Ie,Ne,Le,Ue,Oe,Ce,Re,Pe,Ge,Xe,De,Fe,Ve,He,qe,je,ze,We,Je,Qe,Ze,$e,er,rr,tr,ar,_r,sr,nr,cr,or,hr,pr,yr,ir,lr,ur,dr,vr,gr,br,fr,mr,Er,xr,kr,Sr,Tr,wr,Yr,Br,Ar,Kr,Mr,Ir,Nr,Lr,Ur,Or,Cr,Rr,Pr,Gr,Xr,Dr,Fr,Vr,Hr,qr,jr,zr,Wr,Jr,Qr,Zr,$r,et,rt,tt,at,_t,st,nt,ct,ot,ht,pt,yt,it],_=0;_=240?(p=4,o=!0):y>=224?(p=3,o=!0):y>=192?(p=2,o=!0):y<128&&(p=1,o=!0)}while(!o);for(var i=p-(c.length-h),l=0;l>8&-39)<<8|87+(r=e[s]>>>4)+(r-10>>8&-39),_+=String.fromCharCode(255&a)+String.fromCharCode(a>>>8);return _}var c={ORIGINAL:1,ORIGINAL_NO_PADDING:3,URLSAFE:5,URLSAFE_NO_PADDING:7};function o(e){if(null==e)return c.URLSAFE_NO_PADDING;if(e!==c.ORIGINAL&&e!==c.ORIGINAL_NO_PADDING&&e!==c.URLSAFE&&e!=c.URLSAFE_NO_PADDING)throw new Error("unsupported base64 variant");return e}function h(e,r){r=o(r),e=m(_,e,"input");var a,_=[],n=0|Math.floor(e.length/3),c=e.length-3*n,h=4*n+(0!==c?0==(2&r)?4:2+(c>>>1):0),p=new l(h+1),y=u(e);return _.push(y),_.push(p.address),0===t._sodium_bin2base64(p.address,p.length,y,e.length,r)&&g(_,"conversion failed"),p.length=h,a=s(p.to_Uint8Array()),v(_),a}function p(e,r){var t=r||"uint8array";if(!y(t))throw new Error(t+" output format is not available");if(e instanceof l){if("uint8array"===t)return e.to_Uint8Array();if("text"===t)return s(e.to_Uint8Array());if("hex"===t)return n(e.to_Uint8Array());if("base64"===t)return h(e.to_Uint8Array(),c.URLSAFE_NO_PADDING);throw new Error('What is output format "'+t+'"?')}if("object"==typeof e){for(var a=Object.keys(e),_={},o=0;o>>24>>>8,o,y);var x=p(g,n);return v(c),x}function ze(e){var r=[];i(e);var a=new l(0|t._crypto_kdf_keybytes()),_=a.address;r.push(_),t._crypto_kdf_keygen(_);var s=p(a,e);return v(r),s}function We(e,r,a,_){var s=[];i(_),e=m(s,e,"clientPublicKey");var n,c=0|t._crypto_kx_publickeybytes();e.length!==c&&b(s,"invalid clientPublicKey length"),n=u(e),s.push(n),r=m(s,r,"clientSecretKey");var o,h=0|t._crypto_kx_secretkeybytes();r.length!==h&&b(s,"invalid clientSecretKey length"),o=u(r),s.push(o),a=m(s,a,"serverPublicKey");var y,d=0|t._crypto_kx_publickeybytes();a.length!==d&&b(s,"invalid serverPublicKey length"),y=u(a),s.push(y);var f=new l(0|t._crypto_kx_sessionkeybytes()),E=f.address;s.push(E);var x=new l(0|t._crypto_kx_sessionkeybytes()),k=x.address;if(s.push(k),0==(0|t._crypto_kx_client_session_keys(E,k,n,o,y))){var S=p({sharedRx:f,sharedTx:x},_);return v(s),S}g(s,"invalid usage")}function Je(e){var r=[];i(e);var a=new l(0|t._crypto_kx_publickeybytes()),_=a.address;r.push(_);var s=new l(0|t._crypto_kx_secretkeybytes()),n=s.address;if(r.push(n),0==(0|t._crypto_kx_keypair(_,n))){var c={publicKey:p(a,e),privateKey:p(s,e),keyType:"x25519"};return v(r),c}g(r,"internal error")}function Qe(e,r){var a=[];i(r),e=m(a,e,"seed");var _,s=0|t._crypto_kx_seedbytes();e.length!==s&&b(a,"invalid seed length"),_=u(e),a.push(_);var n=new l(0|t._crypto_kx_publickeybytes()),c=n.address;a.push(c);var o=new l(0|t._crypto_kx_secretkeybytes()),h=o.address;if(a.push(h),0==(0|t._crypto_kx_seed_keypair(c,h,_))){var y={publicKey:p(n,r),privateKey:p(o,r),keyType:"x25519"};return v(a),y}g(a,"internal error")}function Ze(e,r,a,_){var s=[];i(_),e=m(s,e,"serverPublicKey");var n,c=0|t._crypto_kx_publickeybytes();e.length!==c&&b(s,"invalid serverPublicKey length"),n=u(e),s.push(n),r=m(s,r,"serverSecretKey");var o,h=0|t._crypto_kx_secretkeybytes();r.length!==h&&b(s,"invalid serverSecretKey length"),o=u(r),s.push(o),a=m(s,a,"clientPublicKey");var y,d=0|t._crypto_kx_publickeybytes();a.length!==d&&b(s,"invalid clientPublicKey length"),y=u(a),s.push(y);var f=new l(0|t._crypto_kx_sessionkeybytes()),E=f.address;s.push(E);var x=new l(0|t._crypto_kx_sessionkeybytes()),k=x.address;if(s.push(k),0==(0|t._crypto_kx_server_session_keys(E,k,n,o,y))){var S=p({sharedRx:f,sharedTx:x},_);return v(s),S}g(s,"invalid usage")}function $e(e,r,a){var _=[];i(a);var s=u(e=m(_,e,"message")),n=e.length;_.push(s),r=m(_,r,"key");var c,o=0|t._crypto_onetimeauth_keybytes();r.length!==o&&b(_,"invalid key length"),c=u(r),_.push(c);var h=new l(0|t._crypto_onetimeauth_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_onetimeauth(y,s,n,0,c))){var d=p(h,a);return v(_),d}g(_,"invalid usage")}function er(e,r){var a=[];i(r),f(a,e,"state_address");var _=new l(0|t._crypto_onetimeauth_bytes()),s=_.address;if(a.push(s),0==(0|t._crypto_onetimeauth_final(e,s))){var n=(t._free(e),p(_,r));return v(a),n}g(a,"invalid usage")}function rr(e,r){var a=[];i(r);var _=null;null!=e&&(_=u(e=m(a,e,"key")),e.length,a.push(_));var s=new l(144).address;if(0==(0|t._crypto_onetimeauth_init(s,_))){var n=s;return v(a),n}g(a,"invalid usage")}function tr(e){var r=[];i(e);var a=new l(0|t._crypto_onetimeauth_keybytes()),_=a.address;r.push(_),t._crypto_onetimeauth_keygen(_);var s=p(a,e);return v(r),s}function ar(e,r,a){var _=[];i(a),f(_,e,"state_address");var s=u(r=m(_,r,"message_chunk")),n=r.length;_.push(s),0!=(0|t._crypto_onetimeauth_update(e,s,n))&&g(_,"invalid usage"),v(_)}function _r(e,r,a){var _=[];e=m(_,e,"hash");var s,n=0|t._crypto_onetimeauth_bytes();e.length!==n&&b(_,"invalid hash length"),s=u(e),_.push(s);var c=u(r=m(_,r,"message")),o=r.length;_.push(c),a=m(_,a,"key");var h,p=0|t._crypto_onetimeauth_keybytes();a.length!==p&&b(_,"invalid key length"),h=u(a),_.push(h);var y=0==(0|t._crypto_onetimeauth_verify(s,c,o,0,h));return v(_),y}function sr(e,r,a,_,s,n,c){var o=[];i(c),f(o,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&b(o,"keyLength must be an unsigned integer");var h=u(r=m(o,r,"password")),y=r.length;o.push(h),a=m(o,a,"salt");var d,E=0|t._crypto_pwhash_saltbytes();a.length!==E&&b(o,"invalid salt length"),d=u(a),o.push(d),f(o,_,"opsLimit"),("number"!=typeof _||(0|_)!==_||_<0)&&b(o,"opsLimit must be an unsigned integer"),f(o,s,"memLimit"),("number"!=typeof s||(0|s)!==s||s<0)&&b(o,"memLimit must be an unsigned integer"),f(o,n,"algorithm"),("number"!=typeof n||(0|n)!==n||n<0)&&b(o,"algorithm must be an unsigned integer");var x=new l(0|e),k=x.address;if(o.push(k),0==(0|t._crypto_pwhash(k,e,0,h,y,0,d,_,0,s,n))){var S=p(x,c);return v(o),S}g(o,"invalid usage")}function nr(e,r,a,_,s,n){var c=[];i(n),f(c,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&b(c,"keyLength must be an unsigned integer");var o=u(r=m(c,r,"password")),h=r.length;c.push(o),a=m(c,a,"salt");var y,d=0|t._crypto_pwhash_scryptsalsa208sha256_saltbytes();a.length!==d&&b(c,"invalid salt length"),y=u(a),c.push(y),f(c,_,"opsLimit"),("number"!=typeof _||(0|_)!==_||_<0)&&b(c,"opsLimit must be an unsigned integer"),f(c,s,"memLimit"),("number"!=typeof s||(0|s)!==s||s<0)&&b(c,"memLimit must be an unsigned integer");var E=new l(0|e),x=E.address;if(c.push(x),0==(0|t._crypto_pwhash_scryptsalsa208sha256(x,e,0,o,h,0,y,_,0,s))){var k=p(E,n);return v(c),k}g(c,"invalid usage")}function cr(e,r,a,_,s,n,c){var o=[];i(c);var h=u(e=m(o,e,"password")),y=e.length;o.push(h);var d=u(r=m(o,r,"salt")),E=r.length;o.push(d),f(o,a,"opsLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(o,"opsLimit must be an unsigned integer"),f(o,_,"r"),("number"!=typeof _||(0|_)!==_||_<0)&&b(o,"r must be an unsigned integer"),f(o,s,"p"),("number"!=typeof s||(0|s)!==s||s<0)&&b(o,"p must be an unsigned integer"),f(o,n,"keyLength"),("number"!=typeof n||(0|n)!==n||n<0)&&b(o,"keyLength must be an unsigned integer");var x=new l(0|n),k=x.address;if(o.push(k),0==(0|t._crypto_pwhash_scryptsalsa208sha256_ll(h,y,d,E,a,0,_,s,k,n))){var S=p(x,c);return v(o),S}g(o,"invalid usage")}function or(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"password")),c=e.length;s.push(n),f(s,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(s,"opsLimit must be an unsigned integer"),f(s,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(s,"memLimit must be an unsigned integer");var o=new l(0|t._crypto_pwhash_scryptsalsa208sha256_strbytes()).address;if(s.push(o),0==(0|t._crypto_pwhash_scryptsalsa208sha256_str(o,n,c,0,r,0,a))){var h=t.UTF8ToString(o);return v(s),h}g(s,"invalid usage")}function hr(e,r,a){var s=[];i(a),"string"!=typeof e&&b(s,"hashed_password must be a string"),e=_(e+"\0"),null!=c&&e.length-1!==c&&b(s,"invalid hashed_password length");var n=u(e),c=e.length-1;s.push(n);var o=u(r=m(s,r,"password")),h=r.length;s.push(o);var p=0==(0|t._crypto_pwhash_scryptsalsa208sha256_str_verify(n,o,h,0));return v(s),p}function pr(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"password")),c=e.length;s.push(n),f(s,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(s,"opsLimit must be an unsigned integer"),f(s,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(s,"memLimit must be an unsigned integer");var o=new l(0|t._crypto_pwhash_strbytes()).address;if(s.push(o),0==(0|t._crypto_pwhash_str(o,n,c,0,r,0,a))){var h=t.UTF8ToString(o);return v(s),h}g(s,"invalid usage")}function yr(e,r,a,s){var n=[];i(s),"string"!=typeof e&&b(n,"hashed_password must be a string"),e=_(e+"\0"),null!=o&&e.length-1!==o&&b(n,"invalid hashed_password length");var c=u(e),o=e.length-1;n.push(c),f(n,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(n,"opsLimit must be an unsigned integer"),f(n,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(n,"memLimit must be an unsigned integer");var h=0!=(0|t._crypto_pwhash_str_needs_rehash(c,r,0,a));return v(n),h}function ir(e,r,a){var s=[];i(a),"string"!=typeof e&&b(s,"hashed_password must be a string"),e=_(e+"\0"),null!=c&&e.length-1!==c&&b(s,"invalid hashed_password length");var n=u(e),c=e.length-1;s.push(n);var o=u(r=m(s,r,"password")),h=r.length;s.push(o);var p=0==(0|t._crypto_pwhash_str_verify(n,o,h,0));return v(s),p}function lr(e,r,a){var _=[];i(a),e=m(_,e,"privateKey");var s,n=0|t._crypto_scalarmult_scalarbytes();e.length!==n&&b(_,"invalid privateKey length"),s=u(e),_.push(s),r=m(_,r,"publicKey");var c,o=0|t._crypto_scalarmult_bytes();r.length!==o&&b(_,"invalid publicKey length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult(y,s,c))){var d=p(h,a);return v(_),d}g(_,"weak public key")}function ur(e,r){var a=[];i(r),e=m(a,e,"privateKey");var _,s=0|t._crypto_scalarmult_scalarbytes();e.length!==s&&b(a,"invalid privateKey length"),_=u(e),a.push(_);var n=new l(0|t._crypto_scalarmult_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_base(c,_))){var o=p(n,r);return v(a),o}g(a,"unknown error")}function dr(e,r,a){var _=[];i(a),e=m(_,e,"n");var s,n=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==n&&b(_,"invalid n length"),s=u(e),_.push(s),r=m(_,r,"p");var c,o=0|t._crypto_scalarmult_ed25519_bytes();r.length!==o&&b(_,"invalid p length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_ed25519_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult_ed25519(y,s,c))){var d=p(h,a);return v(_),d}g(_,"invalid point or scalar is 0")}function vr(e,r){var a=[];i(r),e=m(a,e,"scalar");var _,s=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==s&&b(a,"invalid scalar length"),_=u(e),a.push(_);var n=new l(0|t._crypto_scalarmult_ed25519_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_ed25519_base(c,_))){var o=p(n,r);return v(a),o}g(a,"scalar is 0")}function gr(e,r){var a=[];i(r),e=m(a,e,"scalar");var _,s=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==s&&b(a,"invalid scalar length"),_=u(e),a.push(_);var n=new l(0|t._crypto_scalarmult_ed25519_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_ed25519_base_noclamp(c,_))){var o=p(n,r);return v(a),o}g(a,"scalar is 0")}function br(e,r,a){var _=[];i(a),e=m(_,e,"n");var s,n=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==n&&b(_,"invalid n length"),s=u(e),_.push(s),r=m(_,r,"p");var c,o=0|t._crypto_scalarmult_ed25519_bytes();r.length!==o&&b(_,"invalid p length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_ed25519_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult_ed25519_noclamp(y,s,c))){var d=p(h,a);return v(_),d}g(_,"invalid point or scalar is 0")}function fr(e,r,a){var _=[];i(a),e=m(_,e,"scalar");var s,n=0|t._crypto_scalarmult_ristretto255_scalarbytes();e.length!==n&&b(_,"invalid scalar length"),s=u(e),_.push(s),r=m(_,r,"element");var c,o=0|t._crypto_scalarmult_ristretto255_bytes();r.length!==o&&b(_,"invalid element length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_ristretto255_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult_ristretto255(y,s,c))){var d=p(h,a);return v(_),d}g(_,"result is identity element")}function mr(e,r){var a=[];i(r),e=m(a,e,"scalar");var _,s=0|t._crypto_core_ristretto255_scalarbytes();e.length!==s&&b(a,"invalid scalar length"),_=u(e),a.push(_);var n=new l(0|t._crypto_core_ristretto255_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_ristretto255_base(c,_))){var o=p(n,r);return v(a),o}g(a,"scalar is 0")}function Er(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"message")),c=e.length;s.push(n),r=m(s,r,"nonce");var o,h=0|t._crypto_secretbox_noncebytes();r.length!==h&&b(s,"invalid nonce length"),o=u(r),s.push(o),a=m(s,a,"key");var y,d=0|t._crypto_secretbox_keybytes();a.length!==d&&b(s,"invalid key length"),y=u(a),s.push(y);var f=new l(0|c),E=f.address;s.push(E);var x=new l(0|t._crypto_secretbox_macbytes()),k=x.address;if(s.push(k),0==(0|t._crypto_secretbox_detached(E,k,n,c,0,o,y))){var S=p({mac:x,cipher:f},_);return v(s),S}g(s,"invalid usage")}function xr(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"message")),c=e.length;s.push(n),r=m(s,r,"nonce");var o,h=0|t._crypto_secretbox_noncebytes();r.length!==h&&b(s,"invalid nonce length"),o=u(r),s.push(o),a=m(s,a,"key");var y,d=0|t._crypto_secretbox_keybytes();a.length!==d&&b(s,"invalid key length"),y=u(a),s.push(y);var f=new l(c+t._crypto_secretbox_macbytes()|0),E=f.address;if(s.push(E),0==(0|t._crypto_secretbox_easy(E,n,c,0,o,y))){var x=p(f,_);return v(s),x}g(s,"invalid usage")}function kr(e){var r=[];i(e);var a=new l(0|t._crypto_secretbox_keybytes()),_=a.address;r.push(_),t._crypto_secretbox_keygen(_);var s=p(a,e);return v(r),s}function Sr(e,r,a,_,s){var n=[];i(s);var c=u(e=m(n,e,"ciphertext")),o=e.length;n.push(c),r=m(n,r,"mac");var h,y=0|t._crypto_secretbox_macbytes();r.length!==y&&b(n,"invalid mac length"),h=u(r),n.push(h),a=m(n,a,"nonce");var d,f=0|t._crypto_secretbox_noncebytes();a.length!==f&&b(n,"invalid nonce length"),d=u(a),n.push(d),_=m(n,_,"key");var E,x=0|t._crypto_secretbox_keybytes();_.length!==x&&b(n,"invalid key length"),E=u(_),n.push(E);var k=new l(0|o),S=k.address;if(n.push(S),0==(0|t._crypto_secretbox_open_detached(S,c,h,o,0,d,E))){var T=p(k,s);return v(n),T}g(n,"wrong secret key for the given ciphertext")}function Tr(e,r,a,_){var s=[];i(_),e=m(s,e,"ciphertext");var n,c=t._crypto_secretbox_macbytes(),o=e.length;o>>0;return v([]),r}function ht(e,r){var a=[];i(r);for(var _=t._malloc(24),s=0;s<6;s++)t.setValue(_+4*s,t.Runtime.addFunction(e[["implementation_name","random","stir","uniform","buf","close"][s]]),"i32");0!=(0|t._randombytes_set_implementation(_))&&g(a,"unsupported implementation"),v(a)}function pt(e){i(e),t._randombytes_stir()}function yt(e,r){var a=[];i(r),f(a,e,"upper_bound"),("number"!=typeof e||(0|e)!==e||e<0)&&b(a,"upper_bound must be an unsigned integer");var _=t._randombytes_uniform(e)>>>0;return v(a),_}function it(){var e=t._sodium_version_string(),r=t.UTF8ToString(e);return v([]),r}return l.prototype.to_Uint8Array=function(){var e=new Uint8Array(this.length);return e.set(t.HEAPU8.subarray(this.address,this.address+this.length)),e},e.add=function(e,r){if(!(e instanceof Uint8Array&&r instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can added");var t=e.length,a=0,_=0;if(r.length!=e.length)throw new TypeError("Arguments must have the same length");for(_=0;_>=8,a+=e[_]+r[_],e[_]=255&a},e.base64_variants=c,e.compare=function(e,r){if(!(e instanceof Uint8Array&&r instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be compared");if(e.length!==r.length)throw new TypeError("Only instances of identical length can be compared");for(var t=0,a=1,_=e.length;_-- >0;)t|=r[_]-e[_]>>8&a,a&=(r[_]^e[_])-1>>8;return t+t+a-1},e.from_base64=function(e,r){r=o(r);var a,_=[],s=new l(3*(e=m(_,e,"input")).length/4),n=u(e),c=d(4),h=d(4);return _.push(n),_.push(s.address),_.push(s.result_bin_len_p),_.push(s.b64_end_p),0!==t._sodium_base642bin(s.address,s.length,n,e.length,0,c,h,r)&&g(_,"invalid input"),t.getValue(h,"i32")-n!==e.length&&g(_,"incomplete input"),s.length=t.getValue(c,"i32"),a=s.to_Uint8Array(),v(_),a},e.from_hex=function(e){var r,a=[],_=new l((e=m(a,e,"input")).length/2),s=u(e),n=d(4);return a.push(s),a.push(_.address),a.push(_.hex_end_p),0!==t._sodium_hex2bin(_.address,_.length,s,e.length,0,0,n)&&g(a,"invalid input"),t.getValue(n,"i32")-s!==e.length&&g(a,"incomplete input"),r=_.to_Uint8Array(),v(a),r},e.from_string=_,e.increment=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be incremented");for(var r=256,t=0,a=e.length;t>=8,r+=e[t],e[t]=255&r},e.is_zero=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be checked");for(var r=0,t=0,a=e.length;t 0");var a,_=[],s=d(4),n=1,c=0,o=0|e.length,h=new l(o+r);_.push(s),_.push(h.address);for(var p=h.address,y=h.address+o+r;p>>48|o>>>32|o>>>16|o))-1>>16);return 0!==t._sodium_pad(s,h.address,e.length,r,h.length)&&g(_,"internal error"),h.length=t.getValue(s,"i32"),a=h.to_Uint8Array(),v(_),a},e.unpad=function(e,r){if(!(e instanceof Uint8Array))throw new TypeError("buffer must be a Uint8Array");if((r|=0)<=0)throw new Error("block size must be > 0");var a=[],_=u(e),s=d(4);return a.push(_),a.push(s),0!==t._sodium_unpad(s,_,e.length,r)&&g(a,"unsupported/invalid padding"),e=(e=new Uint8Array(e)).subarray(0,t.getValue(s,"i32")),v(a),e},e.ready=a,e.symbols=function(){return Object.keys(e).sort()},e.to_base64=h,e.to_hex=n,e.to_string=s,e}var t="object"==typeof e.sodium&&"function"==typeof e.sodium.onload?e.sodium.onload:null;"function"==typeof define&&define.amd?define(["exports","libsodium"],r):"object"==typeof exports&&"string"!=typeof exports.nodeName?r(exports,require("libsodium")):e.sodium=r(e.commonJsStrict={},e.libsodium),t&&e.sodium.ready.then((function(){t(e.sodium)}))}(this); + +},{"libsodium":210}],210:[function(require,module,exports){ +(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__dirname){(function (){ +!function(A){function I(A){"use strict";var I;void 0===(I=A)&&(I={});var g=I;"object"!=typeof g.sodium&&("object"==typeof global?g=global:"object"==typeof window&&(g=window)),"object"==typeof g.sodium&&"number"==typeof g.sodium.totalMemory&&(I.TOTAL_MEMORY=g.sodium.totalMemory);var B=I;return I.ready=new Promise((function(A,I){(Q=B).onAbort=I,Q.print=function(A){},Q.printErr=function(A){},Q.onRuntimeInitialized=function(){try{Q._crypto_secretbox_keybytes(),A()}catch(A){I(A)}},Q.useBackupModule=function(){return new Promise((function(A,I){(Q={}).onAbort=I,Q.onRuntimeInitialized=function(){Object.keys(B).forEach((function(A){"getRandomValue"!==A&&delete B[A]})),Object.keys(Q).forEach((function(A){B[A]=Q[A]})),A()};var g,Q=void 0!==Q?Q:{},C={};for(g in Q)Q.hasOwnProperty(g)&&(C[g]=Q[g]);var E=[],i=!1,n=!1,a=!1,r=!1;i="object"==typeof window,n="function"==typeof importScripts,a="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,r=!i&&!a&&!n;var o,e,t,f,c,y="";function s(A){return Q.locateFile?Q.locateFile(A,y):y+A}a?(y=n?require("path").dirname(y)+"/":__dirname+"/",o=function(A,I){var g=bA(A);return g?I?g:g.toString():(f||(f=require("fs")),c||(c=require("path")),A=c.normalize(A),f.readFileSync(A,I?null:"utf8"))},t=function(A){var I=o(A,!0);return I.buffer||(I=new Uint8Array(I)),G(I.buffer),I},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),E=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Q),Q.inspect=function(){return"[Emscripten Module object]"}):r?("undefined"!=typeof read&&(o=function(A){var I=bA(A);return I?_A(I):read(A)}),t=function(A){var I;return(I=bA(A))?I:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(G("object"==typeof(I=read(A,"binary"))),I)},"undefined"!=typeof scriptArgs?E=scriptArgs:void 0!==arguments&&(E=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(i||n)&&(n?y=self.location.href:"undefined"!=typeof document&&document.currentScript&&(y=document.currentScript.src),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",o=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText}catch(I){var g=bA(A);if(g)return _A(g);throw I}},n&&(t=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}catch(I){var g=bA(A);if(g)return g;throw I}}),e=function(A,I,g){var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=function(){if(200==B.status||0==B.status&&B.response)I(B.response);else{var Q=bA(A);Q?I(Q.buffer):g()}},B.onerror=g,B.send(null)}),Q.print;var w,h=Q.printErr||void 0;for(g in C)C.hasOwnProperty(g)&&(Q[g]=C[g]);C=null,Q.arguments&&(E=Q.arguments),Q.thisProgram&&Q.thisProgram,Q.quit&&Q.quit,Q.wasmBinary&&(w=Q.wasmBinary),Q.noExitRuntime&&Q.noExitRuntime;var D,u={Memory:function(A){this.buffer=new ArrayBuffer(65536*A.initial)},Module:function(A){},Instance:function(A,I){this.exports=function(A){for(var I,g=new Uint8Array(123),B=25;B>=0;--B)g[48+B]=52+B,g[65+B]=B,g[97+B]=26+B;function Q(A,I,B){for(var Q,C,E=0,i=I,n=B.length,a=I+(3*n>>2)-("="==B[n-2])-("="==B[n-1]);E>4,i>2),i>2]=n[0|K]|n[K+1|0]<<8|n[K+2|0]<<16|n[K+3|0]<<24,i[V+4>>2]=QA,16!=(0|(Z=Z+1|0)););for(g=X(W,A,64),K=i[(I=g)>>2],Z=i[I+4>>2],a=K,K=(QA=i[I+32>>2])+(W=i[I+128>>2])|0,I=($=i[I+36>>2])+i[I+132>>2]|0,I=K>>>0>>0?I+1|0:I,W=K,I=I+Z|0,W=I=(K=a+K|0)>>>0>>0?I+1|0:I,x=ug((Z=K)^(n[0|(K=A- -64|0)]|n[K+1|0]<<8|n[K+2|0]<<16|n[K+3|0]<<24)^-1377402159,I^(n[K+4|0]|n[K+5|0]<<8|n[K+6|0]<<16|n[K+7|0]<<24)^1359893119,32),K=I=p,I=I+1779033703|0,a=QA^(V=x-205731576|0),QA=I=V>>>0<4089235720?I+1|0:I,b=ug(a,$^I,24),m=I=p,j=K,a=x,I=I+W|0,I=(I=(x=b+Z|0)>>>0>>0?I+1|0:I)+(t=B=i[g+140>>2])|0,a=ug(a^(o=Z=(K=i[g+136>>2])+x|0),(G=x>>>0>o>>>0?I+1|0:I)^j,16),I=QA+(d=p)|0,t=ug((l=Z=V+a|0)^b,(W=V>>>0>l>>>0?I+1|0:I)^m,63),f=p,V=i[g+12>>2],Z=(b=i[g+144>>2])+($=QA=i[g+40>>2])|0,I=(T=i[g+148>>2])+(j=i[g+44>>2])|0,I=Z>>>0<$>>>0?I+1|0:I,$=Z,I=I+V|0,I=(Z=Z+i[g+8>>2]|0)>>>0<$>>>0?I+1|0:I,x=ug(Z^(n[A+72|0]|n[A+73|0]<<8|n[A+74|0]<<16|n[A+75|0]<<24)^725511199,(n[A+76|0]|n[A+77|0]<<8|n[A+78|0]<<16|n[A+79|0]<<24)^I^-1694144372,32),j=ug(r=(V=x-2067093701|0)^QA,j^(m=(QA=p)-((x>>>0<2067093701)+1150833018|0)|0),24),c=i[g+156>>2],r=j,I=I+($=p)|0,I=(I=(j=j+Z|0)>>>0>>0?I+1|0:I)+c|0,eA=ug((u=Z=j+i[g+152>>2]|0)^x,(k=j>>>0>u>>>0?I+1|0:I)^QA,16),I=m+(H=p)|0,cA=Z=V+eA|0,x=ug(r^Z,(V=V>>>0>Z>>>0?I+1|0:I)^$,63),m=p,QA=i[g+20>>2],Z=(U=i[g+160>>2])+(j=i[g+48>>2])|0,I=(iA=i[g+164>>2])+(y=i[g+52>>2])|0,$=Z,I=(I=Z>>>0>>0?I+1|0:I)+QA|0,rA=Z=Z+i[g+16>>2]|0,Z=Z>>>0<$>>>0?I+1|0:I,s=ug(rA^(n[A+80|0]|n[A+81|0]<<8|n[A+82|0]<<16|n[A+83|0]<<24)^-79577749,Z^(n[A+84|0]|n[A+85|0]<<8|n[A+86|0]<<16|n[A+87|0]<<24)^528734635,32),QA=I=p,I=I+1013904242|0,r=j^($=s-23791573|0),j=I=$>>>0<4271175723?I+1|0:I,I=ug(r,y^I,24),c=QA,Q=i[g+172>>2],r=I,e=s,s=I,rA=I+rA|0,I=(y=p)+Z|0,I=(I=s>>>0>rA>>>0?I+1|0:I)+(J=Q)|0,AA=ug(e^(F=Z=(QA=i[g+168>>2])+(s=rA)|0),(J=s>>>0>F>>>0?I+1|0:I)^c,16),I=j+(M=p)|0,y=ug(r^(_=Z=$+AA|0),(j=_>>>0<$>>>0?I+1|0:I)^y,63),c=p,s=i[g+28>>2],$=(Z=i[g+176>>2])+(D=rA=i[g+56>>2])|0,I=(yA=i[g+180>>2])+(w=i[g+60>>2])|0,I=(I=D>>>0>$>>>0?I+1|0:I)+s|0,I=(D=$)>>>0>(v=$=D+i[g+24>>2]|0)>>>0?I+1|0:I,S=ug(v^(n[A+88|0]|n[A+89|0]<<8|n[A+90|0]<<16|n[A+91|0]<<24)^327033209,I^(n[A+92|0]|n[A+93|0]<<8|n[A+94|0]<<16|n[A+95|0]<<24)^1541459225,32),s=ug(e=(r=(s=S)+1595750129|0)^rA,w^(rA=($=p)-((s>>>0<2699217167)+1521486533|0)|0),24),w=rA,Y=$,rA=i[g+188>>2],e=s,P=r,I=(D=p)+I|0,I=(I=(v=s+v|0)>>>0>>0?I+1|0:I)+(N=rA)|0,O=s=($=i[g+184>>2])+v|0,r=ug(s^S,(r=Y)^(Y=s>>>0>>0?I+1|0:I),16),I=(I=w)+(w=p)|0,v=s=P+r|0,S=D,D=I=s>>>0>>0?I+1|0:I,e=ug(e^s,S^I,63),s=p,S=m,P=x,L=_,I=m+G|0,m=o=o+x|0,I=(I=o>>>0>>0?I+1|0:I)+(N=q=i[g+196>>2])|0,_=ug((o=x=(IA=i[g+192>>2])+o|0)^r,(x=m>>>0>o>>>0?I+1|0:I)^w,32),I=(I=j)+(j=p)|0,G=I=(m=L+(G=_)|0)>>>0>>0?I+1|0:I,I=ug(P^m,I^S,24),fA=i[g+204>>2],P=I,r=_,w=o,o=I,_=w+I|0,I=(w=p)+x|0,I=(I=o>>>0>_>>>0?I+1|0:I)+(N=fA)|0,CA=x=(S=i[g+200>>2])+(o=_)|0,tA=ug(r^x,(o=o>>>0>x>>>0?I+1|0:I)^j,16),I=G+(_=p)|0,N=ug(P^(r=j=m+tA|0),(G=w)^(w=m>>>0>r>>>0?I+1|0:I),63),G=p,j=c,L=y,I=c+k|0,I=(I=(m=y+u|0)>>>0>>0?I+1|0:I)+(P=oA=i[g+212>>2])|0,u=ug((R=a)^(a=m=(x=i[g+208>>2])+(y=m)|0),(y=y>>>0>a>>>0?I+1|0:I)^d,32),I=D+(m=p)|0,j=ug(L^(c=v+u|0),(I=c>>>0>>0?I+1|0:I)^j,24),d=I,k=m,z=i[g+220>>2],L=j,R=c,I=(c=p)+y|0,I=(I=(D=a+j|0)>>>0>>0?I+1|0:I)+(P=z)|0,k=ug((D=j=(m=i[g+216>>2])+(y=D)|0)^u,(v=y>>>0>D>>>0?I+1|0:I)^k,16),I=(a=p)+d|0,aA=j=R+(y=k)|0,P=ug(L^j,(y=y>>>0>j>>>0?I+1|0:I)^c,63),c=p,d=s,L=e,I=s+J|0,I=(I=(e=e+F|0)>>>0>>0?I+1|0:I)+(u=E=i[g+228>>2])|0,e=ug((J=s=(j=i[g+224>>2])+e|0)^eA,(s=s>>>0>>0?I+1|0:I)^H,32),I=(H=p)+W|0,l=F=l+e|0,W=ug(L^F,(I=F>>>0>>0?I+1|0:I)^d,24),F=I,L=i[g+236>>2],u=W,I=(d=p)+s|0,I=(I=(J=J+W|0)>>>0>>0?I+1|0:I)+L|0,nA=ug((J=W=(BA=i[g+232>>2])+(s=J)|0)^e,(W=H)^(H=s>>>0>J>>>0?I+1|0:I),16),I=(I=F)+(F=p)|0,s=ug(u^(e=W=(s=nA)+l|0),(l=s>>>0>e>>>0?I+1|0:I)^d,63),d=p,u=f,gA=t,EA=cA,I=f+Y|0,I=(I=(cA=t+O|0)>>>0>>0?I+1|0:I)+(R=eA=i[g+244>>2])|0,f=I=(t=(W=i[g+240>>2])+(f=cA)|0)>>>0>>0?I+1|0:I,AA=ug(t^AA,I^M,32),I=(I=V)+(V=p)|0,O=M=EA+(Y=AA)|0,u=ug(gA^M,(I=Y>>>0>M>>>0?I+1|0:I)^u,24),gA=EA=p,M=I,Y=V,sA=u,I=f+EA|0,I=(I=(u=t+u|0)>>>0>>0?I+1|0:I)+(cA=i[g+252>>2])|0,u=t=(V=i[g+248>>2])+(f=u)|0,R=ug(t^AA,(R=Y)^(Y=t>>>0>>0?I+1|0:I),16),I=(I=M)+(M=p)|0,AA=ug(sA^(EA=t=(f=R)+O|0),(t=t>>>0>>0?I+1|0:I)^gA,63),gA=I=p,f=I,sA=k,I=o+eA|0,I=(I=(k=W)>>>0>(O=k+CA|0)>>>0?I+1|0:I)+f|0,O=ug(sA^(f=k=(o=O)+AA|0),(k=o>>>0>f>>>0?I+1|0:I)^a,32),I=l+(o=p)|0,e=I=(a=e+O|0)>>>0>>0?I+1|0:I,CA=AA=ug(AA^a,gA^I,24),gA=I=p,l=I,wA=AA,I=k+oA|0,I=(I=(AA=f+x|0)>>>0>>0?I+1|0:I)+l|0,CA=f=CA+(k=AA)|0,sA=ug(f^O,(l=o)^(o=f>>>0>>0?I+1|0:I),16),I=e+(l=p)|0,e=I=(f=a+sA|0)>>>0>>0?I+1|0:I,AA=ug(wA^(a=f),I^gA,63),k=p,O=N,I=iA+(f=G)|0,I=(I=(N=U+N|0)>>>0>>0?I+1|0:I)+v|0,U=I=(G=D+N|0)>>>0>>0?I+1|0:I,v=ug(G^nA,I^F,32),I=(I=t)+(t=p)|0,I=(F=(D=v)+EA|0)>>>0>>0?I+1|0:I,D=f,f=I,N=ug(O^F,D^I,24),iA=I=p,D=I,O=v,I=U+q|0,I=(I=(v=G+IA|0)>>>0>>0?I+1|0:I)+D|0,I=(G=(U=v)+N|0)>>>0>>0?I+1|0:I,U=G,D=I,nA=ug(O^G,I^t,16),I=f+(v=p)|0,EA=t=F+nA|0,N=ug(t^N,(f=t>>>0>>0?I+1|0:I)^iA,63),t=p,G=c,I=c+fA|0,I=(I=(F=S+P|0)>>>0>>0?I+1|0:I)+H|0,M=ug((S=c=F+J|0)^R,(c=c>>>0>>0?I+1|0:I)^M,32),I=w+(H=p)|0,I=r>>>0>(F=r+M|0)>>>0?I+1|0:I,r=G,G=I,r=w=ug(F^P,r^I,24),P=I=p,J=I,O=M,I=c+cA|0,I=(I=(w=(M=V)+S|0)>>>0>>0?I+1|0:I)+J|0,R=c=r+w|0,gA=ug(O^c,(M=H)^(H=c>>>0>>0?I+1|0:I),16),I=G+(J=p)|0,P=ug((S=c=F+gA|0)^r,(c=c>>>0>>0?I+1|0:I)^P,63),G=p,r=s,I=(F=d)+L|0,I=(I=(M=s+BA|0)>>>0>>0?I+1|0:I)+Y|0,w=ug((M=s=u+M|0)^tA,(s=s>>>0>>0?I+1|0:I)^_,32),I=(I=y)+(y=p)|0,_=ug(r^(Y=d=w+aA|0),(I=d>>>0>>0?I+1|0:I)^F,24),u=d=p,F=I,O=Y,Y=w,w=(I=M)+(M=Z)|0,I=s+yA|0,I=(I=w>>>0>>0?I+1|0:I)+d|0,M=s=w+(r=_)|0,w=I=s>>>0>>0?I+1|0:I,Y=ug(Y^s,I^y,16),I=(d=p)+F|0,O=ug(_^(r=y=O+(s=Y)|0),(s=r>>>0>>0?I+1|0:I)^u,63),y=p,F=t,_=S,u=Y,I=o+B|0,I=(I=(Y=K)>>>0>(S=Y+CA|0)>>>0?I+1|0:I)+t|0,S=ug(u^(t=Y=S+N|0),(o=d)^(d=t>>>0>>0?I+1|0:I),32),I=(I=c)+(c=p)|0,I=(o=S)>>>0>(Y=_+o|0)>>>0?I+1|0:I,u=_=ug((o=Y)^N,I^F,24),N=F=p,Y=I,CA=S,I=d+E|0,I=(I=(S=t+j|0)>>>0>>0?I+1|0:I)+F|0,F=t=(d=S)+_|0,tA=ug(CA^t,(S=t>>>0>>0?I+1|0:I)^c,16),I=(I=Y)+(Y=p)|0,o=t=(c=tA)+o|0,iA=ug(t^u,(_=t>>>0>>0?I+1|0:I)^N,63),c=p,N=r,I=D+(t=G)|0,I=(I=(d=U+P|0)>>>0>>0?I+1|0:I)+(u=aA=i[g+132>>2])|0,d=I=(G=(r=i[g+128>>2])+d|0)>>>0>>0?I+1|0:I,D=ug(G^sA,I^l,32),I=(I=s)+(s=p)|0,l=U=N+D|0,N=u=ug(U^P,(I=U>>>0>>0?I+1|0:I)^t,24),P=t=p,U=I,CA=D,I=d+T|0,d=D=b+G|0,I=(I=D>>>0>>0?I+1|0:I)+t|0,t=ug(CA^(D=G=D+u|0),(t=s)^(s=D>>>0>>0?I+1|0:I),16),I=(I=U)+(U=p)|0,l=G=t+l|0,fA=ug(G^N,(u=G>>>0>>0?I+1|0:I)^P,63),G=p,d=y,I=H+z|0,I=(I=(P=m+R|0)>>>0>>0?I+1|0:I)+y|0,I=(H=(N=P)+O|0)>>>0>>0?I+1|0:I,N=H,y=I,P=ug(H^nA,I^v,32),I=e+(H=p)|0,I=a>>>0>(v=a+P|0)>>>0?I+1|0:I,O=e=ug((a=v)^O,I^d,24),CA=d=p,v=I,R=a,I=y+rA|0,I=(a=$)>>>0>(e=a+N|0)>>>0?I+1|0:I,a=e,I=I+d|0,e=H,H=I=a>>>0>(y=O+a|0)>>>0?I+1|0:I,nA=ug((a=y)^P,e^I,16),I=(y=p)+v|0,O=ug((v=d=R+(e=nA)|0)^O,(I=e>>>0>v>>>0?I+1|0:I)^CA,63),d=p,N=I,P=t,R=AA,I=Q+(e=k)|0,I=(I=(t=QA)>>>0>(AA=t+AA|0)>>>0?I+1|0:I)+w|0,k=t=M+AA|0,w=ug(t^gA,(w=J)^(J=t>>>0>>0?I+1|0:I),32),I=(t=p)+f|0,CA=M=w+EA|0,e=ug(R^M,(I=M>>>0>>0?I+1|0:I)^e,24),gA=EA=p,f=I,M=t,EA=e,R=w,I=J+gA|0,I=(I=(w=e+k|0)>>>0>>0?I+1|0:I)+(AA=i[g+156>>2])|0,J=k=(t=i[g+152>>2])+w|0,e=M,M=I=k>>>0>>0?I+1|0:I,R=ug(R^k,e^I,16),I=(I=f)+(f=p)|0,e=I=(w=R)>>>0>(k=w+CA|0)>>>0?I+1|0:I,CA=ug(EA^(w=k),I^gA,63),EA=I=p,k=I,gA=v,I=S+z|0,I=(I=(v=F+m|0)>>>0>>0?I+1|0:I)+k|0,k=F=v+CA|0,P=ug(F^P,(S=U)^(U=F>>>0>>0?I+1|0:I),32),I=(F=p)+N|0,S=I=(v=gA+(S=P)|0)>>>0>>0?I+1|0:I,EA=CA=ug(CA^v,EA^I,24),gA=I=p,N=I,sA=P,I=U+q|0,I=(I=(P=k+IA|0)>>>0>>0?I+1|0:I)+N|0,I=(k=(U=P)+CA|0)>>>0>>0?I+1|0:I,U=k,N=F,F=I,CA=ug(sA^k,N^I,16),I=S+(N=p)|0,I=(k=v+CA|0)>>>0>>0?I+1|0:I,v=k,S=I,IA=ug(k^EA,I^gA,63),k=p,P=c,gA=iA,I=c+E|0,I=s+(j>>>0>(iA=j+iA|0)>>>0?I+1|0:I)|0,q=c=D+iA|0,iA=ug(c^nA,(s=y)^(y=c>>>0>>0?I+1|0:I),32),I=e+(c=p)|0,D=I=(s=w+iA|0)>>>0>>0?I+1|0:I,P=e=ug(gA^s,I^P,24),nA=I=p,w=I,I=y+aA|0,I=(I=(e=r+q|0)>>>0>>0?I+1|0:I)+w|0,q=y=P+(r=e)|0,iA=ug(y^iA,(w=y>>>0>>0?I+1|0:I)^c,16),I=D+(r=p)|0,aA=y=s+iA|0,e=ug(y^P,(s=y>>>0>>0?I+1|0:I)^nA,63),y=p,I=Q+(c=G)|0,I=H+((D=QA)>>>0>(P=D+fA|0)>>>0?I+1|0:I)|0,D=f,f=I=a>>>0>(G=a+P|0)>>>0?I+1|0:I,P=ug((a=G)^R,D^I,32),I=_+(G=p)|0,I=o>>>0>(H=o+P|0)>>>0?I+1|0:I,o=c,c=I,o=ug(H^fA,o^I,24),fA=I=p,D=I,gA=o,I=f+T|0,I=(I=(o=b)>>>0>(_=o+a|0)>>>0?I+1|0:I)+D|0,nA=f=gA+(o=_)|0,R=ug(f^P,(D=f>>>0>>0?I+1|0:I)^G,16),I=c+(o=p)|0,P=f=H+R|0,_=ug(gA^f,(G=f>>>0>>0?I+1|0:I)^fA,63),f=p,I=cA+(c=d)|0,I=M+((a=(H=V)+O|0)>>>0>>0?I+1|0:I)|0,H=I=(d=J+a|0)>>>0>>0?I+1|0:I,a=ug(d^tA,I^Y,32),I=u+(J=p)|0,Y=c,c=I=l>>>0>(M=l+a|0)>>>0?I+1|0:I,l=ug(M^O,Y^I,24),O=I=p,Y=I,gA=a,I=H+L|0,I=(I=(a=d+BA|0)>>>0>>0?I+1|0:I)+Y|0,a=ug(gA^(Y=d=a+(u=l)|0),(u=J)^(J=a>>>0>Y>>>0?I+1|0:I),16),I=c+(H=p)|0,l=ug(l^(u=d=M+a|0),(d=u>>>0>>0?I+1|0:I)^O,63),c=p,M=y,O=e,gA=a,I=F+oA|0,F=a=U+x|0,I=(I=a>>>0>>0?I+1|0:I)+y|0,e=ug(gA^(a=U=a+e|0),(y=F>>>0>a>>>0?I+1|0:I)^H,32),I=(I=G)+(G=p)|0,U=I=(H=e+P|0)>>>0>>0?I+1|0:I,P=M=ug(O^H,I^M,24),O=I=p,F=I,I=y+eA|0,I=(I=(a=(M=W)+a|0)>>>0>>0?I+1|0:I)+F|0,fA=y=P+a|0,tA=ug(y^e,(F=y>>>0>>0?I+1|0:I)^G,16),I=U+(M=p)|0,P=ug((EA=y=H+tA|0)^P,(y=y>>>0>>0?I+1|0:I)^O,63),G=p,H=f,e=_,I=w+AA|0,I=(I=(_=t+q|0)>>>0>>0?I+1|0:I)+f|0,f=I=(w=_)>>>0>(U=e+w|0)>>>0?I+1|0:I,_=ug((w=U)^CA,I^N,32),I=(I=d)+(d=p)|0,I=(a=_)>>>0>(U=a+u|0)>>>0?I+1|0:I,u=e=ug(e^(a=U),I^H,24),U=I,N=a,a=_,_=(I=w)+(w=Z)|0,I=f+yA|0,I=(I=w>>>0>_>>>0?I+1|0:I)+(H=p)|0,I=(f=(w=_)+e|0)>>>0>>0?I+1|0:I,w=f,_=I,a=ug(a^f,I^d,16),I=(e=p)+U|0,d=ug((CA=f=N+a|0)^u,(f=f>>>0>>0?I+1|0:I)^H,63),H=p,U=c,N=l,I=D+rA|0,I=(I=(u=(l=$)+nA|0)>>>0>>0?I+1|0:I)+c|0,l=D=N+u|0,c=I=D>>>0>>0?I+1|0:I,u=ug(D^iA,I^r,32),I=S+(D=p)|0,S=r=v+u|0,N=r=ug(N^r,(I=r>>>0>>0?I+1|0:I)^U,24),q=U=p,v=I,O=S,I=c+B|0,I=(I=(r=(S=K)+l|0)>>>0>>0?I+1|0:I)+U|0,I=(c=N+r|0)>>>0>>0?I+1|0:I,S=c,r=D,D=I,nA=ug(c^u,r^I,16),I=(I=v)+(v=p)|0,N=ug((c=O+(U=nA)|0)^N,(I=c>>>0>>0?I+1|0:I)^q,63),U=p,l=c,u=I,I=J+(r=k)|0,k=c=Y+IA|0,I=(I=c>>>0>>0?I+1|0:I)+(q=i[g+204>>2])|0,k=I=(c=(O=i[g+200>>2])+c|0)>>>0>>0?I+1|0:I,Y=ug(c^R,I^o,32),I=(I=s)+(s=p)|0,I=(o=Y)>>>0>(J=o+aA|0)>>>0?I+1|0:I,r=ug((o=J)^IA,I^r,24),R=aA=p,J=I,gA=o,aA=Y,I=k+R|0,I=(I=(Y=c+r|0)>>>0>>0?I+1|0:I)+(IA=i[g+164>>2])|0,Y=c=(iA=i[g+160>>2])+(k=Y)|0,aA=ug(aA^c,(o=c>>>0>>0?I+1|0:I)^s,16),I=(I=J)+(J=p)|0,r=ug(r^(gA=c=gA+(s=aA)|0),(c=c>>>0>>0?I+1|0:I)^R,63),R=I=p,s=I,sA=a,I=F+rA|0,I=(I=(a=(k=$)+fA|0)>>>0>>0?I+1|0:I)+s|0,e=ug(sA^(s=k=a+r|0),(k=a>>>0>s>>>0?I+1|0:I)^e,32),I=(F=p)+u|0,l=a=l+e|0,u=ug(r^a,(I=a>>>0>>0?I+1|0:I)^R,24),R=r=p,a=I,fA=l,sA=e,I=k+q|0,I=(I=(e=s+O|0)>>>0>>0?I+1|0:I)+r|0,l=s=e+u|0,sA=ug(sA^s,(r=F)^(F=s>>>0>>0?I+1|0:I),16),I=(r=p)+a|0,fA=ug((wA=s=fA+(k=sA)|0)^u,(s=s>>>0>>0?I+1|0:I)^R,63),k=p,I=AA+(a=G)|0,I=(I=(e=t+P|0)>>>0>>0?I+1|0:I)+_|0,e=ug((_=t=e+w|0)^nA,(t=t>>>0>>0?I+1|0:I)^v,32),I=(I=c)+(c=p)|0,w=I=e>>>0>(G=e+gA|0)>>>0?I+1|0:I,u=a=ug(G^P,I^a,24),P=I=p,v=I,a=(I=_)+(_=K)|0,I=t+B|0,I=(I=a>>>0<_>>>0?I+1|0:I)+v|0,AA=t=u+a|0,nA=ug(t^e,(v=t>>>0>>0?I+1|0:I)^c,16),I=w+(_=p)|0,R=t=G+nA|0,a=ug(t^u,(c=t>>>0>>0?I+1|0:I)^P,63),t=p,e=d,I=(G=H)+L|0,I=(I=(w=d+BA|0)>>>0>>0?I+1|0:I)+D|0,H=I=(d=w+S|0)>>>0>>0?I+1|0:I,D=ug(d^aA,I^J,32),I=(I=y)+(y=p)|0,I=(w=D)>>>0>(J=w+EA|0)>>>0?I+1|0:I,S=ug(e^(w=J),I^G,24),u=G=p,J=I,P=w,L=D,I=H+E|0,H=D=d+j|0,I=(I=D>>>0>>0?I+1|0:I)+G|0,aA=ug(L^(D=d=D+(e=S)|0),(w=H>>>0>D>>>0?I+1|0:I)^y,16),I=(I=J)+(J=p)|0,u=ug(S^(e=y=P+(G=aA)|0),(G=e>>>0>>0?I+1|0:I)^u,63),y=p,d=U,I=U+z|0,I=(I=(S=m+N|0)>>>0>>0?I+1|0:I)+o|0,I=(H=Y+S|0)>>>0>>0?I+1|0:I,Y=H,H=I,S=ug(Y^tA,I^M,32),I=(I=f)+(f=p)|0,o=d,d=I=(U=(M=S)+CA|0)>>>0>>0?I+1|0:I,N=o=ug(U^N,o^I,24),P=I=p,M=I,L=S,S=(I=Y)+(Y=W)|0,I=H+eA|0,I=(I=Y>>>0>S>>>0?I+1|0:I)+M|0,M=H=(Y=S)+o|0,o=ug(L^H,(Y=H>>>0>>0?I+1|0:I)^f,16),I=d+(H=p)|0,I=(f=U+o|0)>>>0>>0?I+1|0:I,U=f,S=I,N=ug(f^N,I^P,63),f=p,d=t,P=a,L=o,I=F+T|0,I=(I=(a=(o=b)+l|0)>>>0>>0?I+1|0:I)+t|0,t=I=a>>>0>(F=P+a|0)>>>0?I+1|0:I,o=ug(L^F,I^H,32),I=(I=G)+(G=p)|0,I=(a=o)>>>0>(H=a+e|0)>>>0?I+1|0:I,l=e=ug(P^(a=H),I^d,24),H=I,P=o,o=(I=F)+(F=Z)|0,I=t+yA|0,I=(I=o>>>0>>0?I+1|0:I)+(d=p)|0,F=t=o+e|0,o=I=t>>>0>>0?I+1|0:I,t=(G=tA=ug(P^t,I^G,16))+a|0,I=(a=p)+H|0,e=t,L=ug(H=t^l,(l=t>>>0>>0?I+1|0:I)^d,63),d=p,I=v+Q|0,I=(I=(G=QA)>>>0>(H=G+AA|0)>>>0?I+1|0:I)+(t=y)|0,v=G=H+u|0,r=ug(G^sA,(y=G>>>0>>0?I+1|0:I)^r,32),I=S+(G=p)|0,I=(H=U+r|0)>>>0>>0?I+1|0:I,U=H,S=ug(H^u,I^t,24),P=t=p,H=I,AA=U,I=y+oA|0,I=(U=x)>>>0>(v=U+v|0)>>>0?I+1|0:I,U=v,I=I+t|0,v=y=v+(u=S)|0,y=ug(y^r,(S=y>>>0>>0?I+1|0:I)^G,16),I=(U=p)+H|0,EA=t=AA+y|0,BA=ug(t^u,(G=t>>>0>>0?I+1|0:I)^P,63),H=p,P=N,I=w+IA|0,I=(I=(r=D+iA|0)>>>0>>0?I+1|0:I)+(t=f)|0,u=ug((f=D=r+N|0)^nA,(D=r>>>0>f>>>0?I+1|0:I)^_,32),I=(I=s)+(s=p)|0,N=w=(_=u)+wA|0,r=ug(P^w,(I=w>>>0<_>>>0?I+1|0:I)^t,24),w=t=p,_=I,P=r,I=D+t|0,I=(I=(r=f+r|0)>>>0>>0?I+1|0:I)+(AA=i[g+132>>2])|0,D=f=(t=i[g+128>>2])+r|0,r=I=f>>>0>>0?I+1|0:I,nA=ug(f^u,I^s,16),I=(I=_)+(_=p)|0,CA=ug(P^(f=(s=nA)+N|0),(I=f>>>0>>0?I+1|0:I)^w,63),s=p,u=f,N=I,P=y,I=cA+(w=k)|0,I=(I=(f=(y=V)+fA|0)>>>0>>0?I+1|0:I)+Y|0,M=ug((f=y=f+M|0)^aA,(k=f>>>0>>0?I+1|0:I)^J,32),I=(y=p)+c|0,I=(Y=M)>>>0>(J=Y+R|0)>>>0?I+1|0:I,w=ug((Y=J)^fA,I^w,24),gA=R=p,c=I,J=y,aA=M,I=k+R|0,I=(I=(M=f+w|0)>>>0>>0?I+1|0:I)+(fA=i[g+196>>2])|0,M=f=(y=i[g+192>>2])+(k=M)|0,aA=ug(aA^f,(R=J)^(J=f>>>0>>0?I+1|0:I),16),I=(I=c)+(c=p)|0,w=ug(w^(R=f=(k=aA)+Y|0),(f=f>>>0>>0?I+1|0:I)^gA,63),gA=I=p,k=I,I=o+q|0,I=(I=(Y=F+O|0)>>>0>>0?I+1|0:I)+k|0,I=(F=Y+w|0)>>>0>>0?I+1|0:I,Y=F,k=I,o=ug(F^P,I^U,32),I=(U=p)+N|0,u=F=u+o|0,N=ug(w^F,(I=F>>>0>>0?I+1|0:I)^gA,24),q=F=p,w=I,P=o,I=k+AA|0,I=(I=(o=t+Y|0)>>>0>>0?I+1|0:I)+F|0,O=k=o+N|0,gA=ug(P^k,(F=k>>>0>>0?I+1|0:I)^U,16),I=(I=w)+(w=p)|0,Y=k=(U=gA)+u|0,q=ug(k^N,(o=k>>>0>>0?I+1|0:I)^q,63),U=p,I=Q+(k=d)|0,I=S+((u=QA)>>>0>(N=u+L|0)>>>0?I+1|0:I)|0,v=I=(d=v+N|0)>>>0>>0?I+1|0:I,u=ug(d^nA,I^_,32),I=(I=f)+(f=p)|0,I=(_=u)>>>0>(S=_+R|0)>>>0?I+1|0:I,_=k,k=I,N=ug(S^L,_^I,24),L=I=p,_=I,P=u,I=v+rA|0,I=(I=(u=d+$|0)>>>0>>0?I+1|0:I)+_|0,_=I=(d=(v=u)+N|0)>>>0>>0?I+1|0:I,nA=ug(P^(v=d),I^f,16),I=k+(u=p)|0,R=f=S+nA|0,N=ug(f^N,(d=f>>>0>>0?I+1|0:I)^L,63),f=p,k=H,I=H+T|0,I=r+(b>>>0>(P=b+BA|0)>>>0?I+1|0:I)|0,r=c,c=I=D>>>0>(H=D+P|0)>>>0?I+1|0:I,P=ug(H^aA,r^I,32),I=l+(D=p)|0,r=k,k=I=e>>>0>(S=e+P|0)>>>0?I+1|0:I,l=e=ug(S^BA,r^I,24),r=I=p,I=c+IA|0,I=(I=(e=H+iA|0)>>>0>>0?I+1|0:I)+r|0,IA=c=l+e|0,iA=ug(c^P,(H=c>>>0>>0?I+1|0:I)^D,16),I=k+(D=p)|0,BA=c=S+iA|0,e=ug(c^l,(k=c>>>0>>0?I+1|0:I)^r,63),c=p,S=s,I=s+oA|0,I=J+((r=x)>>>0>(l=r+CA|0)>>>0?I+1|0:I)|0,a=ug((r=s=M+l|0)^tA,(s=r>>>0>>0?I+1|0:I)^a,32),I=(I=G)+(G=p)|0,P=S=ug((l=J=a+EA|0)^CA,(I=a>>>0>l>>>0?I+1|0:I)^S,24),L=J=p,M=I,I=s+cA|0,I=(I=(r=(S=V)+r|0)>>>0>>0?I+1|0:I)+J|0,J=s=P+r|0,a=ug(s^a,(S=s>>>0>>0?I+1|0:I)^G,16),I=(I=M)+(M=p)|0,CA=s=a+l|0,P=ug(s^P,(G=s>>>0>>0?I+1|0:I)^L,63),s=p,L=N,aA=a,I=F+eA|0,I=(I=(a=W)>>>0>(l=a+O|0)>>>0?I+1|0:I)+(r=f)|0,f=I=(a=l)>>>0>(F=a+N|0)>>>0?I+1|0:I,l=ug(aA^(a=F),I^M,32),I=(I=k)+(k=p)|0,N=F=(M=l)+BA|0,L=r=ug(L^F,(I=F>>>0>>0?I+1|0:I)^r,24),BA=F=p,M=I,I=f+B|0,I=(I=(a=(r=K)+a|0)>>>0>>0?I+1|0:I)+F|0,tA=f=L+a|0,aA=ug(f^l,(r=k)^(k=f>>>0>>0?I+1|0:I),16),I=(F=p)+M|0,M=f=(r=aA)+N|0,L=ug(f^L,(r=f>>>0>>0?I+1|0:I)^BA,63),f=p,N=e,I=_+z|0,_=e=m+v|0,I=(I=e>>>0>>0?I+1|0:I)+(a=c)|0,l=ug((e=v=N+e|0)^gA,(c=e>>>0<_>>>0?I+1|0:I)^w,32),I=(I=G)+(G=p)|0,v=I=(w=(v=l)+CA|0)>>>0>>0?I+1|0:I,N=a=ug(N^w,I^a,24),BA=I=p,_=I,I=c+E|0,I=(I=(a=j)>>>0>(e=a+e|0)>>>0?I+1|0:I)+_|0,_=c=N+(a=e)|0,G=ug(c^l,(a=c>>>0>>0?I+1|0:I)^G,16),I=v+(e=p)|0,I=(c=w+G|0)>>>0>>0?I+1|0:I,w=c,v=I,BA=ug(c^N,I^BA,63),c=p,l=s,O=P,I=H+yA|0,I=(I=(N=Z)>>>0>(P=N+IA|0)>>>0?I+1|0:I)+s|0,I=(H=O+(N=P)|0)>>>0>>0?I+1|0:I,N=H,s=I,P=ug(H^nA,I^u,32),I=o+(H=p)|0,o=I=(u=Y+P|0)>>>0>>0?I+1|0:I,u=ug(O^(Y=u),I^l,24),O=I=p,l=I,I=s+fA|0,I=(I=(N=y+N|0)>>>0>>0?I+1|0:I)+l|0,l=s=(IA=u)+(u=N)|0,CA=ug(s^P,(N=H)^(H=s>>>0>>0?I+1|0:I),16),I=o+(u=p)|0,I=(s=Y+CA|0)>>>0>>0?I+1|0:I,Y=s,IA=ug(s^IA,I^O,63),s=p,N=I,gA=q,I=S+(o=U)|0,I=(I=(q=J+q|0)>>>0>>0?I+1|0:I)+(O=nA=i[g+156>>2])|0,J=I=(U=(P=i[g+152>>2])+(J=q)|0)>>>0>>0?I+1|0:I,S=ug(U^iA,I^D,32),I=(I=d)+(d=p)|0,q=D=S+R|0,O=o=ug(gA^D,(I=D>>>0>>0?I+1|0:I)^o,24),R=iA=p,D=I,gA=EA=i[g+236>>2],EA=q,q=S,I=J+R|0,I=(I=(o=o+U|0)>>>0>>0?I+1|0:I)+gA|0,I=(U=(S=i[g+232>>2])+o|0)>>>0>>0?I+1|0:I,o=d,d=I,iA=ug(q^U,o^I,16),I=(J=p)+D|0,O=ug((D=o=EA+(q=iA)|0)^O,(o=o>>>0>>0?I+1|0:I)^R,63),R=I=p,q=I,EA=G,I=k+T|0,I=(I=(G=b+tA|0)>>>0>>0?I+1|0:I)+q|0,e=ug(EA^(q=b=G+O|0),(b=b>>>0>>0?I+1|0:I)^e,32),I=(G=p)+N|0,N=k=Y+e|0,T=ug(O^k,R^(I=k>>>0>>0?I+1|0:I),24),tA=k=p,Y=I,O=N,R=e,I=b+E|0,I=(I=(e=j)>>>0>(N=e+q|0)>>>0?I+1|0:I)+k|0,R=ug(R^(k=b=(e=N)+T|0),(e=e>>>0>k>>>0?I+1|0:I)^G,16),I=(I=Y)+(Y=p)|0,N=b=O+(G=R)|0,O=ug(b^T,(q=b>>>0>>0?I+1|0:I)^tA,63),G=p,b=f,EA=L,I=f+yA|0,I=a+(Z>>>0>(L=Z+L|0)>>>0?I+1|0:I)|0,u=ug((T=f=_+L|0)^CA,(f=f>>>0<_>>>0?I+1|0:I)^u,32),I=o+(_=p)|0,I=(a=D+u|0)>>>0>>0?I+1|0:I,D=a,o=b,b=I,L=a=ug(EA^a,o^I,24),CA=I=p,o=I,EA=a,tA=u,I=f+oA|0,I=(I=(a=x)>>>0>(u=a+T|0)>>>0?I+1|0:I)+o|0,L=f=L+(a=u)|0,tA=ug(tA^f,(o=f>>>0>>0?I+1|0:I)^_,16),I=b+(_=p)|0,I=(f=D+tA|0)>>>0>>0?I+1|0:I,D=f,a=I,u=ug(EA^f,I^CA,63),f=p,b=c,I=c+AA|0,I=(I=(T=t+BA|0)>>>0>>0?I+1|0:I)+H|0,I=(t=l+T|0)>>>0>>0?I+1|0:I,l=t,t=I,T=ug(l^iA,I^J,32),I=r+(c=p)|0,r=b,b=I=(H=M+T|0)>>>0>>0?I+1|0:I,r=M=ug(H^BA,r^I,24),BA=I=p,J=I,I=t+z|0,I=(I=(M=m+l|0)>>>0>>0?I+1|0:I)+J|0,l=m=r+(t=M)|0,T=ug(m^T,(M=c)^(c=t>>>0>m>>>0?I+1|0:I),16),I=b+(J=p)|0,z=m=H+T|0,M=ug(m^r,(t=m>>>0>>0?I+1|0:I)^BA,63),b=p,m=s,I=s+fA|0,I=(I=(H=y+IA|0)>>>0>>0?I+1|0:I)+d|0,I=(y=H+U|0)>>>0>>0?I+1|0:I,U=y,y=I,F=ug(U^aA,I^F,32),I=v+(s=p)|0,r=m,m=I=w>>>0>(d=w+F|0)>>>0?I+1|0:I,v=w=ug(d^IA,r^I,24),r=I=p,I=y+nA|0,I=(I=(U=U+P|0)>>>0

>>0?I+1|0:I)+r|0,H=y=U+w|0,F=ug(y^F,(w=s)^(s=y>>>0>>0?I+1|0:I),16),I=m+(U=p)|0,r=ug((w=y=d+F|0)^v,(y=y>>>0>>0?I+1|0:I)^r,63),m=p,d=f,P=F,I=f+e|0,I=(F=k+u|0)>>>0>>0?I+1|0:I,k=F,I=I+(v=i[g+164>>2])|0,v=ug(P^(F=f=F+i[g+160>>2]|0),(f=f>>>0>>0?I+1|0:I)^U,32),I=(I=t)+(t=p)|0,e=d,d=I=(k=(U=v)+z|0)>>>0>>0?I+1|0:I,e=ug(k^u,e^I,24),P=I=p,U=I,I=f+gA|0,I=(I=(F=F+S|0)>>>0>>0?I+1|0:I)+U|0,BA=ug((z=f=F+e|0)^v,(f=f>>>0>>0?I+1|0:I)^t,16),I=d+(U=p)|0,d=t=k+BA|0,u=ug(t^e,(k=t>>>0>>0?I+1|0:I)^P,63),t=p,e=M,S=w,I=o+rA|0,I=(I=(w=(M=$)+L|0)>>>0>>0?I+1|0:I)+(F=b)|0,Y=ug((v=M=e+w|0)^R,(b=w>>>0>v>>>0?I+1|0:I)^Y,32),I=(I=y)+(y=p)|0,o=F,F=I=(w=Y)>>>0>(M=S+w|0)>>>0?I+1|0:I,o=S=ug(e^M,o^I,24),e=I=p,S=Y,I=b+Q|0,I=(I=(Y=QA)>>>0>(v=Y+v|0)>>>0?I+1|0:I)+e|0,v=ug(S^(w=b=v+o|0),(Y=w>>>0>>0?I+1|0:I)^y,16),I=F+(S=p)|0,P=ug((F=b=M+v|0)^o,(M=F>>>0>>0?I+1|0:I)^e,63),b=p,L=r,I=c+cA|0,I=(o=V)>>>0>(r=o+l|0)>>>0?I+1|0:I,o=r,I=I+(y=m)|0,e=ug((r=c=L+r|0)^tA,(m=r>>>0>>0?I+1|0:I)^_,32),I=q+(c=p)|0,_=y,y=I=(o=N+e|0)>>>0>>0?I+1|0:I,l=ug(L^o,_^I,24),q=I=p,_=I,N=e,e=(I=r)+(r=W)|0,I=m+eA|0,I=(I=r>>>0>e>>>0?I+1|0:I)+_|0,_=I=(r=e)>>>0>(m=r+l|0)>>>0?I+1|0:I,L=ug(N^m,I^c,16),I=y+(r=p)|0,N=ug((c=o+L|0)^l,(I=c>>>0>>0?I+1|0:I)^q,63),y=p,e=I,I=B+(o=G)|0,I=s+((l=K)>>>0>(q=l+O|0)>>>0?I+1|0:I)|0,l=G=H+q|0,q=ug(G^T,(s=G>>>0>>0?I+1|0:I)^J,32),I=a+(G=p)|0,J=I=D>>>0>(H=D+q|0)>>>0?I+1|0:I,T=I=ug(H^O,I^o,24),D=I,o=I+l|0,I=(a=p)+s|0,I=(I=o>>>0>>0?I+1|0:I)+(IA=i[g+204>>2])|0,I=(s=o+i[g+200>>2]|0)>>>0>>0?I+1|0:I,o=G,G=I,IA=ug(s^q,o^I,16),I=J+(D=p)|0,I=(o=H+IA|0)>>>0>>0?I+1|0:I,H=o,J=I,a=ug(T^o,I^a,63),o=I=p,l=c,T=v,I=f+E|0,I=(I=(c=j)>>>0>(v=c+z|0)>>>0?I+1|0:I)+o|0,T=ug(T^(q=f=(c=v)+a|0),(f=f>>>0>>0?I+1|0:I)^S,32),I=(c=p)+e|0,S=I=(v=l+(S=T)|0)>>>0>>0?I+1|0:I,a=ug(a^v,o^I,24),l=I=p,o=I,R=a,I=f+Q|0,I=(I=(a=QA)>>>0>(e=a+q|0)>>>0?I+1|0:I)+o|0,T=ug((o=f=R+(a=e)|0)^T,(a=o>>>0>>0?I+1|0:I)^c,16),I=S+(e=p)|0,I=(f=v+T|0)>>>0>>0?I+1|0:I,v=f,S=I,f=ug(R^f,I^l,63),c=p,l=t,R=u,I=t+B|0,I=Y+((u=K)>>>0>(q=R+u|0)>>>0?I+1|0:I)|0,r=ug((u=t=w+q|0)^L,(t=t>>>0>>0?I+1|0:I)^r,32),I=J+(w=p)|0,J=I=H>>>0>(Y=H+r|0)>>>0?I+1|0:I,q=l=ug(R^(H=Y),I^l,24),z=I=p,Y=I,R=l,L=r,I=t+cA|0,I=(I=(r=V)>>>0>(l=r+u|0)>>>0?I+1|0:I)+Y|0,q=t=q+(r=l)|0,L=ug(L^t,(Y=w)^(w=t>>>0>>0?I+1|0:I),16),I=J+(Y=p)|0,I=(t=H+L|0)>>>0>>0?I+1|0:I,H=t,J=I,u=ug(R^t,I^z,63),t=p,R=P,I=eA+(r=b)|0,I=_+((l=W)>>>0>(P=l+P|0)>>>0?I+1|0:I)|0,l=ug((_=b=m+P|0)^IA,(b=m>>>0>_>>>0?I+1|0:I)^D,32),I=k+(m=p)|0,I=(D=d+l|0)>>>0>>0?I+1|0:I,d=D,k=I,I=ug(R^D,I^r,24),z=i[g+236>>2],R=I,r=_,_=I,r=r+I|0,I=(D=p)+b|0,I=(I=r>>>0<_>>>0?I+1|0:I)+z|0,r=I=(b=r+i[g+232>>2]|0)>>>0>>0?I+1|0:I,z=ug((_=b)^l,I^m,16),I=k+(l=p)|0,P=b=d+z|0,D=ug(R^b,(m=b>>>0>>0?I+1|0:I)^D,63),b=p,d=y,R=N,I=y+G|0,I=(I=(k=s+N|0)>>>0>>0?I+1|0:I)+(IA=i[g+164>>2])|0,U=ug((N=y=(s=k)+i[g+160>>2]|0)^BA,(y=y>>>0>>0?I+1|0:I)^U,32),I=M+(s=p)|0,M=d,d=I=F>>>0>(G=F+U|0)>>>0?I+1|0:I,M=F=ug(R^G,M^I,24),BA=I=p,k=I,R=U,I=y+oA|0,I=(I=(F=(U=x)+N|0)>>>0>>0?I+1|0:I)+k|0,IA=y=M+F|0,F=ug(R^y,(k=s)^(s=y>>>0>>0?I+1|0:I),16),I=d+(k=p)|0,I=(y=G+F|0)>>>0>>0?I+1|0:I,G=y,d=I,N=ug(y^M,I^BA,63),y=p,U=t,R=F,I=t+a|0,I=(I=(F=o+u|0)>>>0>>0?I+1|0:I)+(M=i[g+132>>2])|0,o=ug(R^(M=t=F+i[g+128>>2]|0),(t=t>>>0>>0?I+1|0:I)^k,32),I=(I=m)+(m=p)|0,a=U,U=I=o>>>0>(k=o+P|0)>>>0?I+1|0:I,a=ug(k^u,a^I,24),P=I=p,F=I,u=o,o=(I=M)+(M=$)|0,I=t+rA|0,I=(I=o>>>0>>0?I+1|0:I)+F|0,BA=t=o+a|0,AA=ug(u^t,(F=t>>>0>>0?I+1|0:I)^m,16),I=U+(M=p)|0,U=I=(m=k+AA|0)>>>0>>0?I+1|0:I,u=ug((k=m)^a,I^P,63),m=p,P=D,I=w+yA|0,w=o=(D=Z)+q|0,I=(I=o>>>0>>0?I+1|0:I)+(t=b)|0,a=ug((o=D=P+o|0)^T,(b=w>>>0>o>>>0?I+1|0:I)^e,32),I=d+(D=p)|0,I=(w=G+a|0)>>>0>>0?I+1|0:I,G=w,e=t,t=I,I=ug(P^w,e^I,24),P=i[g+156>>2],e=I,w=I,o=I+o|0,I=(d=p)+b|0,I=(I=o>>>0>>0?I+1|0:I)+P|0,I=o>>>0>(b=o+i[g+152>>2]|0)>>>0?I+1|0:I,o=D,D=I,q=ug((w=b)^a,o^I,16),I=t+(o=p)|0,a=d,d=I=(b=G+q|0)>>>0>>0?I+1|0:I,P=ug(e^(G=b),a^I,63),t=p,b=y,I=y+r|0,I=(I=(a=_+N|0)>>>0<_>>>0?I+1|0:I)+(e=i[g+204>>2])|0,I=(y=a+i[g+200>>2]|0)>>>0>>0?I+1|0:I,a=Y,Y=I,a=ug(y^L,a^I,32),I=S+(_=p)|0,I=(r=v+a|0)>>>0>>0?I+1|0:I,v=r,e=b,b=I,r=ug(r^N,e^I,24),e=I=p,L=r,I=I+Y|0,I=(I=(r=y+r|0)>>>0>>0?I+1|0:I)+(N=i[g+148>>2])|0,I=(y=r+i[g+144>>2]|0)>>>0>>0?I+1|0:I,Y=y,r=_,_=I,T=ug(y^a,r^I,16),I=b+(r=p)|0,I=(y=v+T|0)>>>0>>0?I+1|0:I,v=y,S=I,N=ug(L^y,e^I,63),y=p,b=c,L=f,I=c+s|0,c=a=f+IA|0,I=(I=a>>>0>>0?I+1|0:I)+(e=i[g+196>>2])|0,e=ug((a=f=a+i[g+192>>2]|0)^z,(f=a>>>0>>0?I+1|0:I)^l,32),I=J+(c=p)|0,b=ug(L^(s=H+e|0),(I=s>>>0>>0?I+1|0:I)^b,24),H=I,z=i[g+220>>2],l=b,R=s,I=(s=p)+f|0,f=a=a+b|0,I=(I=a>>>0>>0?I+1|0:I)+(L=z)|0,L=ug(b=(a=b=(J=i[g+216>>2])+a|0)^e,(e=f>>>0>a>>>0?I+1|0:I)^c,16),I=(I=H)+(H=p)|0,I=(f=L)>>>0>(b=R+f|0)>>>0?I+1|0:I,f=s,s=I,I=ug(l^b,f^I,63),O=i[g+236>>2],R=I,c=I,l=I+BA|0,I=(f=p)+F|0,I=(I=c>>>0>l>>>0?I+1|0:I)+O|0,q=ug((l=c=(F=l)+i[g+232>>2]|0)^q,(c=c>>>0>>0?I+1|0:I)^o,32),I=S+(F=p)|0,I=(o=v+q|0)>>>0>>0?I+1|0:I,v=o,S=f,f=I,I=ug(R^o,S^I,24),R=q,o=I,l=I+l|0,I=(S=p)+c|0,I=z+(o>>>0>l>>>0?I+1|0:I)|0,q=c=l+J|0,z=ug(R^c,(l=F)^(F=c>>>0>>0?I+1|0:I),16),I=f+(J=p)|0,I=(c=v+z|0)>>>0>>0?I+1|0:I,v=c,f=S,S=I,f=ug(o^c,f^I,63),c=p,R=u,I=rA+(o=m)|0,I=D+((u=(l=$)+u|0)>>>0>>0?I+1|0:I)|0,r=ug((l=m=w+u|0)^T,(m=w>>>0>m>>>0?I+1|0:I)^r,32),I=s+(D=p)|0,I=(w=b+r|0)>>>0>>0?I+1|0:I,b=w,s=I,u=o=ug(R^w,I^o,24),T=I=p,w=I,R=r,I=m+eA|0,I=(I=(o=W)>>>0>(r=o+l|0)>>>0?I+1|0:I)+w|0,BA=m=u+(o=r)|0,IA=ug(R^m,(r=D)^(D=o>>>0>m>>>0?I+1|0:I),16),I=s+(w=p)|0,l=ug((s=m=b+IA|0)^u,(o=s>>>0>>0?I+1|0:I)^T,63),b=p,m=t,I=t+E|0,I=_+((r=j)>>>0>(u=r+P|0)>>>0?I+1|0:I)|0,r=ug((_=t=Y+u|0)^L,(t=t>>>0>>0?I+1|0:I)^H,32),I=U+(H=p)|0,I=k>>>0>(Y=k+r|0)>>>0?I+1|0:I,k=Y,Y=m,m=I,u=Y=ug(k^P,Y^I,24),P=I=p,U=I,I=t+B|0,I=(I=(Y=K)>>>0>(_=Y+_|0)>>>0?I+1|0:I)+U|0,U=t=u+_|0,T=ug(t^r,(Y=H)^(H=t>>>0<_>>>0?I+1|0:I),16),I=m+(Y=p)|0,I=(t=k+T|0)>>>0>>0?I+1|0:I,k=t,_=I,u=ug(t^u,I^P,63),m=p,I=e+(t=y)|0,I=(I=(r=a+N|0)>>>0>>0?I+1|0:I)+(P=i[g+156>>2])|0,a=M,M=I=(y=r+i[g+152>>2]|0)>>>0>>0?I+1|0:I,e=ug(y^AA,a^I,32),I=d+(r=p)|0,I=(a=G+e|0)>>>0>>0?I+1|0:I,G=a,d=t,t=I,a=ug(a^N,d^I,24),N=I=p,R=a,I=M+I|0,I=(I=(a=a+y|0)>>>0>>0?I+1|0:I)+(P=i[g+204>>2])|0,L=y=a+i[g+200>>2]|0,a=ug(y^e,(M=y>>>0>>0?I+1|0:I)^r,16),I=t+(y=p)|0,I=(r=G+a|0)>>>0>>0?I+1|0:I,G=r,d=I,N=ug(R^r,N^I,63),t=p,P=a,I=F+Q|0,I=(I=(a=QA)>>>0>(e=a+q|0)>>>0?I+1|0:I)+(r=b)|0,b=F=(a=e)+l|0,e=ug(P^F,(e=y)^(y=a>>>0>F>>>0?I+1|0:I),32),I=_+(F=p)|0,I=(a=k+e|0)>>>0>>0?I+1|0:I,k=a,_=I,a=ug(a^l,I^r,24),r=I=p,l=a,I=y+I|0,I=(I=(a=a+b|0)>>>0>>0?I+1|0:I)+(P=i[g+132>>2])|0,q=b=a+i[g+128>>2]|0,AA=ug(b^e,(y=F)^(F=a>>>0>b>>>0?I+1|0:I),16),I=_+(a=p)|0,_=I=(b=k+AA|0)>>>0>>0?I+1|0:I,P=ug(l^(k=b),I^r,63),b=p,I=D+cA|0,I=(I=(r=V)>>>0>(e=r+BA|0)>>>0?I+1|0:I)+(y=m)|0,m=I=(r=e)>>>0>(D=r+u|0)>>>0?I+1|0:I,e=ug((r=D)^z,I^J,32),I=d+(J=p)|0,I=G>>>0>(D=G+e|0)>>>0?I+1|0:I,G=D,l=y,y=I,I=ug(D^u,l^I,24),u=i[g+164>>2],l=I,D=I,r=I+r|0,I=(d=p)+m|0,I=(I=r>>>0>>0?I+1|0:I)+u|0,I=(m=r+i[g+160>>2]|0)>>>0>>0?I+1|0:I,r=J,J=I,r=ug((D=m)^e,r^I,16),I=y+(e=p)|0,y=d,d=I=(m=G+r|0)>>>0>>0?I+1|0:I,m=ug(l^(G=m),y^I,63),y=p,l=t,R=N,I=t+H|0,I=(I=(u=U+N|0)>>>0>>0?I+1|0:I)+(z=i[g+196>>2])|0,N=ug((u=t=(H=u)+i[g+192>>2]|0)^IA,(t=t>>>0>>0?I+1|0:I)^w,32),I=S+(H=p)|0,w=I=(U=v+N|0)>>>0>>0?I+1|0:I,S=ug(R^U,I^l,24),z=I=p,v=I,R=S,I=t+yA|0,I=(I=(l=(S=Z)+u|0)>>>0>>0?I+1|0:I)+v|0,BA=t=R+(S=l)|0,IA=ug(t^N,(l=H)^(H=t>>>0>>0?I+1|0:I),16),I=w+(v=p)|0,I=(t=U+IA|0)>>>0>>0?I+1|0:I,U=t,l=ug(R^t,I^z,63),t=p,w=c,S=I,R=f,I=c+M|0,I=(I=(u=f+L|0)>>>0>>0?I+1|0:I)+(N=i[g+148>>2])|0,Y=ug((u=f=(c=u)+i[g+144>>2]|0)^T,(f=f>>>0>>0?I+1|0:I)^Y,32),I=o+(c=p)|0,I=s>>>0>(M=s+Y|0)>>>0?I+1|0:I,s=M,M=I,N=o=ug(R^s,I^w,24),T=I=p,w=I,L=Y,I=f+oA|0,I=(I=(o=(Y=x)+u|0)>>>0>>0?I+1|0:I)+w|0,w=f=N+o|0,z=ug(L^f,(Y=f>>>0>>0?I+1|0:I)^c,16),I=M+(c=p)|0,I=(f=s+z|0)>>>0>>0?I+1|0:I,s=f,M=I,o=ug(f^N,I^T,63),u=I=p,f=I,N=U,T=r,I=F+yA|0,F=r=(U=Z)+q|0,I=(I=r>>>0>>0?I+1|0:I)+f|0,e=ug(T^(r=U=r+o|0),(f=F>>>0>r>>>0?I+1|0:I)^e,32),I=(U=p)+S|0,S=I=(F=N+e|0)>>>0>>0?I+1|0:I,u=ug(o^F,u^I,24),q=I=p,o=I,N=e,e=(I=r)+(r=V)|0,I=f+cA|0,I=(I=r>>>0>e>>>0?I+1|0:I)+o|0,T=f=(r=e)+u|0,L=ug(N^f,(o=U)^(U=f>>>0>>0?I+1|0:I),16),I=S+(o=p)|0,I=(f=F+L|0)>>>0>>0?I+1|0:I,F=f,S=I,N=ug(f^u,I^q,63),f=p,I=eA+(r=b)|0,I=J+((e=W)>>>0>(u=e+P|0)>>>0?I+1|0:I)|0,v=ug((e=b=D+u|0)^IA,(b=e>>>0>>0?I+1|0:I)^v,32),I=M+(J=p)|0,M=I=s>>>0>(D=s+v|0)>>>0?I+1|0:I,I=ug((s=D)^P,I^r,24),P=i[g+204>>2],u=I,q=v,v=I,r=I+e|0,I=(D=p)+b|0,I=(I=r>>>0>>0?I+1|0:I)+P|0,P=b=r+i[g+200>>2]|0,q=ug(q^b,(e=J)^(J=b>>>0>>0?I+1|0:I),16),I=M+(v=p)|0,M=b=s+q|0,e=ug(u^b,(r=D)^(D=s>>>0>b>>>0?I+1|0:I),63),b=p,s=y,R=m,I=y+H|0,I=(I=(r=m+BA|0)>>>0>>0?I+1|0:I)+(u=i[g+220>>2])|0,r=ug((H=m=r+i[g+216>>2]|0)^z,(m=r>>>0>H>>>0?I+1|0:I)^c,32),I=_+(y=p)|0,_=s,s=I=(c=k+r|0)>>>0>>0?I+1|0:I,I=ug(R^c,_^I,24),z=i[g+156>>2],u=I,_=H,H=I,_=_+I|0,I=(k=p)+m|0,I=(I=H>>>0>_>>>0?I+1|0:I)+z|0,z=m=(H=_)+i[g+152>>2]|0,BA=ug(m^r,(H=m>>>0>>0?I+1|0:I)^y,16),I=s+(_=p)|0,y=ug(u^(s=m=c+BA|0),(r=k)^(k=c>>>0>s>>>0?I+1|0:I),63),c=p,m=t,I=t+Y|0,I=(I=(r=w+l|0)>>>0>>0?I+1|0:I)+(u=i[g+132>>2])|0,w=I=(t=r+i[g+128>>2]|0)>>>0>>0?I+1|0:I,a=ug(t^AA,I^a,32),I=d+(Y=p)|0,I=(r=G+a|0)>>>0>>0?I+1|0:I,G=r,u=m,m=I,r=ug(r^l,u^I,24),l=I=p,R=r,I=w+I|0,I=(I=(r=t+r|0)>>>0>>0?I+1|0:I)+(u=i[g+196>>2])|0,I=(t=r+i[g+192>>2]|0)>>>0>>0?I+1|0:I,w=t,r=Y,Y=I,a=ug(t^a,r^I,16),I=m+(t=p)|0,I=(r=G+a|0)>>>0>>0?I+1|0:I,G=r,d=I,u=ug(R^r,l^I,63),m=p,R=e,l=a,I=U+E|0,I=(I=(a=j)>>>0>(e=a+T|0)>>>0?I+1|0:I)+(r=b)|0,b=U=R+(a=e)|0,e=ug(l^U,(e=t)^(t=a>>>0>U>>>0?I+1|0:I),32),I=k+(U=p)|0,l=a=s+e|0,a=ug(R^a,(I=a>>>0>>0?I+1|0:I)^r,24),k=I,IA=i[g+148>>2],T=a,I=t+(s=p)|0,I=(I=(a=a+b|0)>>>0>>0?I+1|0:I)+(AA=IA)|0,O=ug((AA=b=(r=i[g+144>>2])+a|0)^e,(b=a>>>0>b>>>0?I+1|0:I)^U,16),I=(I=k)+(k=p)|0,I=(t=(U=O)+l|0)>>>0>>0?I+1|0:I,U=t,a=I,t=ug(T^t,I^s,63),s=p,R=y,I=(e=c)+J|0,I=(I=(l=y+P|0)>>>0>>0?I+1|0:I)+(T=i[g+236>>2])|0,o=ug((l=y=(c=l)+i[g+232>>2]|0)^L,(y=c>>>0>y>>>0?I+1|0:I)^o,32),I=d+(c=p)|0,d=I=G>>>0>(J=G+o|0)>>>0?I+1|0:I,P=e=ug(R^(G=J),I^e,24),T=I=p,J=I,R=o,I=y+rA|0,I=(I=(o=$)>>>0>(e=o+l|0)>>>0?I+1|0:I)+J|0,L=y=P+(o=e)|0,o=ug(R^y,(J=y>>>0>>0?I+1|0:I)^c,16),I=d+(e=p)|0,d=y=G+o|0,P=ug(y^P,(l=y>>>0>>0?I+1|0:I)^T,63),y=p,T=u,I=H+B|0,I=(I=(G=K)>>>0>(u=G+z|0)>>>0?I+1|0:I)+(c=m)|0,u=ug((m=G=T+(H=u)|0)^q,(G=G>>>0>>0?I+1|0:I)^v,32),I=S+(H=p)|0,S=ug(T^(v=F+u|0),(I=F>>>0>v>>>0?I+1|0:I)^c,24),F=I,z=i[g+164>>2],q=S,R=v,I=G+(c=p)|0,G=S=m+S|0,I=(I=S>>>0>>0?I+1|0:I)+(T=z)|0,S=H,H=I=(m=(v=i[g+160>>2])+G|0)>>>0>>0?I+1|0:I,iA=ug(m^u,S^I,16),I=(I=F)+(F=p)|0,S=I=(G=R+(S=iA)|0)>>>0>>0?I+1|0:I,q=ug(q^G,I^c,63),c=p,u=f,R=N,I=f+oA|0,I=Y+((N=x)>>>0>(T=R+N|0)>>>0?I+1|0:I)|0,_=ug((N=f=w+T|0)^BA,(f=f>>>0>>0?I+1|0:I)^_,32),I=D+(w=p)|0,D=I=(Y=M+_|0)>>>0>>0?I+1|0:I,T=u=ug(R^(M=Y),I^u,24),BA=I=p,Y=I,R=_,I=f+Q|0,I=(I=(u=(_=QA)+N|0)>>>0<_>>>0?I+1|0:I)+Y|0,Y=f=T+u|0,N=ug(R^f,(_=w)^(w=f>>>0>>0?I+1|0:I),16),I=D+(_=p)|0,I=(f=M+N|0)>>>0>>0?I+1|0:I,M=f,D=I,u=ug(f^T,I^BA,63),T=I=p,f=I,R=o,I=b+oA|0,b=o=x+AA|0,I=(I=o>>>0>>0?I+1|0:I)+f|0,e=ug(R^(o=x=o+u|0),(b=b>>>0>o>>>0?I+1|0:I)^e,32),I=S+(f=p)|0,oA=x=G+e|0,S=I=G>>>0>x>>>0?I+1|0:I,R=x=ug(u^x,T^I,24),I=(G=p)+b|0,I=(I=(o=o+x|0)>>>0>>0?I+1|0:I)+IA|0,T=ug((u=x=o+r|0)^e,(o=r>>>0>u>>>0?I+1|0:I)^f,16),I=(I=S)+(S=p)|0,oA=x=(b=T)+oA|0,f=ug(R^x,(b=b>>>0>x>>>0?I+1|0:I)^G,63),G=p,x=s,R=t,I=s+J|0,s=r=t+L|0,I=(I=r>>>0>>0?I+1|0:I)+(e=i[g+196>>2])|0,e=ug((r=t=r+i[g+192>>2]|0)^iA,(t=r>>>0>>0?I+1|0:I)^F,32),I=D+(s=p)|0,D=x,x=I=(F=M+e|0)>>>0>>0?I+1|0:I,R=I=ug(R^F,D^I,24),M=I,D=I+r|0,I=(J=p)+t|0,I=z+(D>>>0>>0?I+1|0:I)|0,z=t=D+v|0,L=ug(t^e,(r=s)^(s=t>>>0>>0?I+1|0:I),16),I=x+(M=p)|0,I=(t=F+L|0)>>>0>>0?I+1|0:I,F=t,r=J,J=I,r=ug(R^t,r^I,63),x=p,I=rA+(t=y)|0,I=H+((D=$)>>>0>(v=D+P|0)>>>0?I+1|0:I)|0,D=y=m+v|0,v=ug(y^N,(m=y>>>0>>0?I+1|0:I)^_,32),I=a+(y=p)|0,a=t,t=I=(H=U+v|0)>>>0>>0?I+1|0:I,a=_=ug(H^P,a^I,24),e=I=p,_=v,v=(I=D)+(D=Z)|0,I=m+yA|0,I=(I=D>>>0>v>>>0?I+1|0:I)+e|0,U=m=(D=v)+a|0,N=ug(_^m,(D=m>>>0>>0?I+1|0:I)^y,16),I=t+(v=p)|0,t=ug((P=m=H+N|0)^a,(m=m>>>0>>0?I+1|0:I)^e,63),y=p,H=c,I=c+B|0,I=w+((a=(_=K)+q|0)>>>0<_>>>0?I+1|0:I)|0,I=(c=Y+a|0)>>>0>>0?I+1|0:I,Y=c,c=I,_=ug(Y^O,I^k,32),I=l+(k=p)|0,I=(w=d+_|0)>>>0>>0?I+1|0:I,d=w,a=H,H=I,a=ug(w^q,a^I,24),l=I=p,w=I,e=_,_=(I=Y)+(Y=QA)|0,I=c+Q|0,I=(I=Y>>>0>_>>>0?I+1|0:I)+w|0,q=c=_+a|0,_=ug(e^c,(Y=k)^(k=c>>>0<_>>>0?I+1|0:I),16),I=H+(w=p)|0,I=(c=d+_|0)>>>0>>0?I+1|0:I,d=c,H=I,e=ug(c^a,I^l,63),c=p,a=r,l=_,I=o+cA|0,I=(I=(r=(_=V)+u|0)>>>0<_>>>0?I+1|0:I)+(Y=x)|0,_=o=a+r|0,x=I=o>>>0>>0?I+1|0:I,r=ug(l^o,I^w,32),I=(I=m)+(m=p)|0,o=Y,Y=I=r>>>0>(w=r+P|0)>>>0?I+1|0:I,I=ug(a^w,o^I,24),l=i[g+220>>2],a=I,P=r,o=_,_=I,r=o+I|0,I=(o=p)+x|0,I=(I=r>>>0<_>>>0?I+1|0:I)+l|0,P=ug(P^(u=x=r+i[g+216>>2]|0),(_=r>>>0>u>>>0?I+1|0:I)^m,16),I=Y+(r=p)|0,Y=I=w>>>0>(x=w+P|0)>>>0?I+1|0:I,x=ug(a^(w=x),I^o,63),m=p,R=t,I=(o=y)+s|0,y=a=t+z|0,I=(I=a>>>0>>0?I+1|0:I)+(l=i[g+204>>2])|0,S=ug((a=t=a+i[g+200>>2]|0)^T,(t=a>>>0>>0?I+1|0:I)^S,32),I=H+(y=p)|0,d=I=(s=d+S|0)>>>0>>0?I+1|0:I,l=o=ug(R^s,I^o,24),T=I=p,H=I,R=S,I=t+eA|0,I=(I=(o=(S=W)+a|0)>>>0>>0?I+1|0:I)+H|0,z=t=l+o|0,BA=ug(R^t,(H=t>>>0>>0?I+1|0:I)^y,16),I=d+(S=p)|0,I=(t=s+BA|0)>>>0>>0?I+1|0:I,s=t,d=I,t=ug(t^l,I^T,63),y=p,R=e,I=(o=c)+D|0,I=(e=e+U|0)>>>0>>0?I+1|0:I,U=e,I=I+(l=T=i[g+156>>2])|0,l=ug((e=c=(a=i[g+152>>2])+e|0)^L,(c=e>>>0>>0?I+1|0:I)^M,32),I=(I=b)+(b=p)|0,M=I=(U=l+oA|0)>>>0>>0?I+1|0:I,oA=o=ug(R^U,I^o,24),L=I=p,D=I,R=o,I=c+E|0,I=(I=(o=j)>>>0>(e=o+e|0)>>>0?I+1|0:I)+D|0,oA=c=oA+(o=e)|0,IA=ug(c^l,(D=c>>>0>>0?I+1|0:I)^b,16),I=M+(c=p)|0,I=(b=U+IA|0)>>>0>>0?I+1|0:I,U=b,M=I,l=ug(R^b,I^L,63),b=p,R=f,I=(o=G)+k|0,G=e=f+q|0,I=(I=e>>>0>>0?I+1|0:I)+(L=i[g+236>>2])|0,v=ug((e=f=e+i[g+232>>2]|0)^N,(G=e>>>0>>0?I+1|0:I)^v,32),I=J+(k=p)|0,N=f=F+v|0,f=ug(R^f,(I=f>>>0>>0?I+1|0:I)^o,24),J=I,L=i[g+132>>2],q=f,R=N,N=v,I=(F=p)+G|0,I=(I=(o=f+e|0)>>>0>>0?I+1|0:I)+L|0,I=(f=(v=i[g+128>>2])+o|0)>>>0>>0?I+1|0:I,G=f,o=k,k=I,N=ug(N^f,o^I,16),I=(I=J)+(J=p)|0,I=(f=R+(o=N)|0)>>>0>>0?I+1|0:I,o=f,f=F,F=I,q=I=ug(q^o,f^I,63),e=I,u=I+u|0,I=(f=p)+_|0,I=L+(e>>>0>u>>>0?I+1|0:I)|0,u=ug((e=_=u+v|0)^BA,(v=v>>>0>e>>>0?I+1|0:I)^S,32),I=M+(S=p)|0,I=U>>>0>(_=U+u|0)>>>0?I+1|0:I,U=_,_=f,f=I,q=_=ug(q^U,_^I,24),L=I=p,M=I,R=_,I=v+B|0,I=(I=(e=(_=K)+e|0)>>>0<_>>>0?I+1|0:I)+M|0,q=v=q+e|0,BA=ug(v^u,(M=v>>>0>>0?I+1|0:I)^S,16),I=f+(v=p)|0,I=U>>>0>(S=U+BA|0)>>>0?I+1|0:I,U=S,S=I,u=ug(R^U,I^L,63),f=p,_=m,R=x,I=m+H|0,m=e=x+z|0,I=(I=e>>>0>>0?I+1|0:I)+(L=i[g+148>>2])|0,z=ug((e=x=e+i[g+144>>2]|0)^IA,(x=m>>>0>e>>>0?I+1|0:I)^c,32),I=F+(m=p)|0,H=I=(c=o+z|0)>>>0>>0?I+1|0:I,L=I=ug(R^c,I^_,24),o=I,_=I+e|0,I=(F=p)+x|0,I=T+(o>>>0>_>>>0?I+1|0:I)|0,T=x=a+_|0,z=ug(x^z,(o=a>>>0>x>>>0?I+1|0:I)^m,16),I=H+(_=p)|0,m=ug(L^(H=x=c+z|0),(a=F)^(F=c>>>0>H>>>0?I+1|0:I),63),c=p,x=y,L=t,I=y+D|0,y=a=t+oA|0,I=(I=a>>>0>>0?I+1|0:I)+(e=i[g+164>>2])|0,e=ug((a=t=a+i[g+160>>2]|0)^N,(t=a>>>0>>0?I+1|0:I)^J,32),I=Y+(y=p)|0,Y=x,x=I=w>>>0>(J=w+e|0)>>>0?I+1|0:I,w=ug(L^J,Y^I,24),N=I=p,D=I,R=w,I=t+Q|0,I=(I=(w=QA)>>>0>(Y=w+a|0)>>>0?I+1|0:I)+D|0,oA=t=R+(w=Y)|0,L=ug(t^e,(D=t>>>0>>0?I+1|0:I)^y,16),I=x+(w=p)|0,I=(t=J+L|0)>>>0>>0?I+1|0:I,J=t,Y=I,t=ug(R^t,I^N,63),y=p,x=b,I=b+yA|0,I=k+((a=Z)>>>0>(e=a+l|0)>>>0?I+1|0:I)|0,r=ug((a=b=G+e|0)^P,(b=a>>>0>>0?I+1|0:I)^r,32),I=d+(G=p)|0,e=x,x=I=s>>>0>(k=s+r|0)>>>0?I+1|0:I,e=k=ug((s=k)^l,e^I,24),l=I=p,N=r,I=b+rA|0,I=(I=(r=(k=$)+a|0)>>>0>>0?I+1|0:I)+l|0,d=b=e+r|0,r=ug(N^b,(a=G)^(G=b>>>0>>0?I+1|0:I),16),I=x+(k=p)|0,l=ug((a=b=s+r|0)^e,(b=s>>>0>a>>>0?I+1|0:I)^l,63),x=p,s=c,N=m,P=r,I=c+M|0,I=(I=(r=m+q|0)>>>0>>0?I+1|0:I)+(e=i[g+196>>2])|0,r=ug(P^(M=m=r+i[g+192>>2]|0),(m=r>>>0>m>>>0?I+1|0:I)^k,32),I=Y+(c=p)|0,e=s,s=I=(k=J+r|0)>>>0>>0?I+1|0:I,I=ug(N^k,e^I,24),N=i[g+204>>2],e=I,Y=M,M=I,Y=Y+I|0,I=(J=p)+m|0,I=(I=Y>>>0>>0?I+1|0:I)+N|0,P=m=Y+i[g+200>>2]|0,q=ug(m^r,(M=m>>>0>>0?I+1|0:I)^c,16),I=s+(Y=p)|0,m=ug(e^(s=m=k+q|0),(k=s>>>0>>0?I+1|0:I)^J,63),c=p,J=y,N=t,R=a,I=y+o|0,I=(I=(a=t+T|0)>>>0>>0?I+1|0:I)+(e=IA=i[g+212>>2])|0,a=ug((o=t=(r=i[g+208>>2])+a|0)^BA,(t=t>>>0>>0?I+1|0:I)^v,32),I=(I=b)+(b=p)|0,e=J,J=I=(y=R+a|0)>>>0>>0?I+1|0:I,I=ug(N^y,e^I,24),N=i[g+220>>2],R=I,e=a,a=o,o=I,a=a+I|0,I=(v=p)+t|0,I=(I=a>>>0>>0?I+1|0:I)+N|0,T=t=a+i[g+216>>2]|0,a=ug(e^t,(o=t>>>0>>0?I+1|0:I)^b,16),I=J+(e=p)|0,J=b=y+a|0,b=ug(R^b,(t=v)^(v=y>>>0>b>>>0?I+1|0:I),63),t=p,R=l,I=D+E|0,I=(I=(l=j)>>>0>(N=l+oA|0)>>>0?I+1|0:I)+(y=x)|0,N=ug((x=D=R+(l=N)|0)^z,(D=D>>>0>>0?I+1|0:I)^_,32),I=S+(_=p)|0,I=U>>>0>(l=U+N|0)>>>0?I+1|0:I,U=l,l=y,y=I,l=ug(R^U,l^I,24),S=I=p,R=l,I=D+I|0,I=(I=(l=l+x|0)>>>0>>0?I+1|0:I)+(z=i[g+236>>2])|0,oA=x=(D=l)+i[g+232>>2]|0,z=ug(x^N,(D=D>>>0>x>>>0?I+1|0:I)^_,16),I=y+(_=p)|0,N=ug(R^(y=x=U+z|0),(U=U>>>0>y>>>0?I+1|0:I)^S,63),x=p,S=f,R=u,I=f+eA|0,I=G+((u=(l=W)+u|0)>>>0>>0?I+1|0:I)|0,w=ug((l=f=d+u|0)^L,(f=f>>>0>>0?I+1|0:I)^w,32),I=F+(G=p)|0,H=I=H>>>0>(d=H+w|0)>>>0?I+1|0:I,u=S=ug(R^d,I^S,24),L=I=p,F=I,R=w,I=f+cA|0,I=(I=(w=V)>>>0>(S=w+l|0)>>>0?I+1|0:I)+F|0,F=f=u+(w=S)|0,l=ug(R^f,(l=G)^(G=f>>>0>>0?I+1|0:I),16),I=H+(w=p)|0,I=(f=d+l|0)>>>0>>0?I+1|0:I,d=f,H=I,S=ug(f^u,I^L,63),u=I=p,f=I,L=a,I=M+eA|0,M=a=P+W|0,I=(I=a>>>0>>0?I+1|0:I)+f|0,e=ug(L^(a=W=a+S|0),(W=M>>>0>a>>>0?I+1|0:I)^e,32),I=U+(f=p)|0,U=I=y>>>0>(M=y+e|0)>>>0?I+1|0:I,P=I=ug(S^(y=M),u^I,24),S=I,a=I+a|0,I=(M=p)+W|0,I=IA+(a>>>0>>0?I+1|0:I)|0,u=ug((u=e)^(e=W=a+r|0),(S=r>>>0>e>>>0?I+1|0:I)^f,16),I=U+(r=p)|0,y=ug(P^(U=W=y+u|0),(a=M)^(M=y>>>0>U>>>0?I+1|0:I),63),f=p,W=c,L=m,I=c+o|0,c=a=m+T|0,I=(I=a>>>0>>0?I+1|0:I)+(P=i[g+164>>2])|0,_=ug((a=m=a+i[g+160>>2]|0)^z,(m=c>>>0>a>>>0?I+1|0:I)^_,32),I=H+(c=p)|0,I=(o=d+_|0)>>>0>>0?I+1|0:I,d=o,H=W,W=I,I=ug(L^o,H^I,24),T=i[g+196>>2],L=I,P=_,o=I,_=I+a|0,I=(H=p)+m|0,I=(I=o>>>0>_>>>0?I+1|0:I)+T|0,P=ug(P^(a=m=(o=_)+i[g+192>>2]|0),(_=c)^(c=o>>>0>a>>>0?I+1|0:I),16),I=W+(T=p)|0,I=(m=d+P|0)>>>0>>0?I+1|0:I,d=m,o=H,H=I,o=ug(L^m,o^I,63),W=p,m=t,L=b,I=t+D|0,I=(I=(_=b+oA|0)>>>0>>0?I+1|0:I)+(eA=i[g+204>>2])|0,w=ug((_=b=(t=_)+i[g+200>>2]|0)^l,(b=t>>>0>b>>>0?I+1|0:I)^w,32),I=k+(t=p)|0,I=s>>>0>(D=s+w|0)>>>0?I+1|0:I,s=D,D=m,m=I,l=D=ug(L^s,D^I,24),eA=I=p,k=I,L=D,I=b+cA|0,I=(I=(D=_+V|0)>>>0>>0?I+1|0:I)+k|0,l=ug((_=V=l+D|0)^w,(l=t)^(t=D>>>0>_>>>0?I+1|0:I),16),I=m+(k=p)|0,D=I=s>>>0>(V=s+l|0)>>>0?I+1|0:I,V=ug(L^(s=V),I^eA,63),b=p,I=G+(m=x)|0,G=w=F+N|0,I=(I=w>>>0>>0?I+1|0:I)+(eA=i[g+236>>2])|0,Y=ug((w=x=w+i[g+232>>2]|0)^q,(x=G>>>0>w>>>0?I+1|0:I)^Y,32),I=v+(G=p)|0,v=m,m=I=(F=J+Y|0)>>>0>>0?I+1|0:I,v=ug(F^N,v^I,24),q=I=p,J=I,I=x+yA|0,I=(I=(w=w+Z|0)>>>0>>0?I+1|0:I)+J|0,N=ug((J=Z=w+v|0)^Y,(N=G)^(G=w>>>0>J>>>0?I+1|0:I),16),I=m+(yA=p)|0,w=I=F>>>0>(Z=F+N|0)>>>0?I+1|0:I,x=ug(v^(F=Z),I^q,63),m=p,I=S+B|0,I=(I=(v=e+K|0)>>>0>>0?I+1|0:I)+(Y=W)|0,I=v>>>0>(K=v+o|0)>>>0?I+1|0:I,v=K,K=I,I=E+I|0,j=I=(Y=j+v|0)>>>0>>0?I+1|0:I,e=Y,Y=ug(v^N,K^yA,32),I=D+(v=p)|0,S=ug((D=K=s+Y|0)^o,(K=s>>>0>D>>>0?I+1|0:I)^W,24),I=(o=p)+j|0,I=(s=S)>>>0>(W=e+s|0)>>>0?I+1|0:I,s=W,i[g>>2]=s,i[g+4>>2]=I,Z=I,I=ug(s^Y,I^v,16),Y=W=p,i[g+120>>2]=I,i[g+124>>2]=Y,j=I,D=I+D|0,I=Y+K|0,i[g+80>>2]=D,I=D>>>0>>0?I+1|0:I,i[g+84>>2]=I,hA=g,DA=ug(S^D,I^o,63),i[hA+40>>2]=DA,i[g+44>>2]=p,K=b,o=V,I=c+b|0,I=(I=(j=a+V|0)>>>0>>0?I+1|0:I)+(D=i[g+132>>2])|0,j=I=(V=j+i[g+128>>2]|0)>>>0>>0?I+1|0:I,c=ug(V^u,I^r,32),I=w+(D=p)|0,a=K,K=I=F>>>0>(b=F+c|0)>>>0?I+1|0:I,w=ug(o^(F=b),a^I,24),I=j+(Y=p)|0,I=(b=w+V|0)>>>0>>0?I+1|0:I,V=(j=i[g+144>>2])+b|0,I=i[g+148>>2]+I|0,I=V>>>0>>0?I+1|0:I,i[g+8>>2]=V,i[g+12>>2]=I,I=ug(c^V,I^D,16),b=W=p,i[g+96>>2]=I,i[g+100>>2]=b,V=I,j=I+F|0,I=b+K|0,K=j,i[g+88>>2]=K,I=V>>>0>K>>>0?I+1|0:I,i[g+92>>2]=I,hA=g,DA=ug(w^K,I^Y,63),i[hA+48>>2]=DA,i[g+52>>2]=p,a=$,I=t+m|0,I=(I=(V=_+x|0)>>>0>>0?I+1|0:I)+(j=i[g+220>>2])|0,I=(W=V+i[g+216>>2]|0)>>>0>>0?I+1|0:I,$=W,j=W,V=a+W|0,W=I,I=I+rA|0,I=V>>>0>>0?I+1|0:I,j=V,V=I,a=j,o=x,j=ug(P^$,W^T,32),I=M+(x=p)|0,m=ug(o^(b=W=U+j|0),(W=U>>>0>b>>>0?I+1|0:I)^m,24),I=(c=p)+V|0,V=$=a+(t=m)|0,i[g+16>>2]=V,I=t>>>0>V>>>0?I+1|0:I,i[g+20>>2]=I,I=ug(V^j,I^x,16),K=p,i[g+104>>2]=I,i[g+108>>2]=K,V=I,$=I+b|0,I=W+K|0,W=$,i[g+64>>2]=W,I=V>>>0>W>>>0?I+1|0:I,i[g+68>>2]=I,hA=g,DA=ug(t^W,I^c,63),i[hA+56>>2]=DA,i[g+60>>2]=p,I=f+Q|0,I=(I=(V=y+QA|0)>>>0>>0?I+1|0:I)+G|0,QA=I=J>>>0>(V=J+V|0)>>>0?I+1|0:I,x=ug(V^l,I^k,32),I=H+(b=p)|0,K=I=d>>>0>($=d+x|0)>>>0?I+1|0:I,m=ug($^y,f^I,24),I=QA+(t=p)|0,I=V>>>0>(j=m+V|0)>>>0?I+1|0:I,V=(QA=i[g+152>>2])+j|0,I=i[g+156>>2]+I|0,I=V>>>0>>0?I+1|0:I,i[g+24>>2]=V,i[g+28>>2]=I,I=ug(x^V,I^b,16),i[g+112>>2]=I,QA=p,i[g+116>>2]=QA,V=I+$|0,I=K+QA|0,K=V,i[g+72>>2]=K,I=K>>>0<$>>>0?I+1|0:I,i[g+76>>2]=I,hA=g,DA=ug(m^K,I^t,63),i[hA+32>>2]=DA,i[g+36>>2]=p,I=i[g+68>>2]^(n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24)^Z,K=i[g+64>>2]^(n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24)^s,C[0|A]=K,C[A+1|0]=K>>>8,C[A+2|0]=K>>>16,C[A+3|0]=K>>>24,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24,Z=1;I=(K=Z<<3)+A|0,W=K=g+K|0,V=i[K>>2]^(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24),QA=i[(K=K- -64|0)>>2],K=i[K+4>>2]^i[W+4>>2]^(n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24),W=V^QA,C[0|I]=W,C[I+1|0]=W>>>8,C[I+2|0]=W>>>16,C[I+3|0]=W>>>24,C[I+4|0]=K,C[I+5|0]=K>>>8,C[I+6|0]=K>>>16,C[I+7|0]=K>>>24,8!=(0|(Z=Z+1|0)););h=g+256|0}function F(A,I,g,B){var Q=0,C=0,E=0,n=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0;for(function(A,I){for(var g=0,B=0,Q=0,C=0,E=0;C=Q=(B=g<<3)+A|0,E=dA(I+B|0),i[C>>2]=E,i[Q+4>>2]=p,16!=(0|(g=g+1|0)););}(g,I),I=X(B,A,64),o=i[g>>2],f=i[g+4>>2],B=0;;){if(Q=ug(l=i[(E=I)+32>>2],t=i[E+36>>2],14),s=p,Q=ug(l,t,18)^Q,D=p^s,C=o,o=ug(l,t,41)^Q,Q=(p^D)+f|0,Q=o>>>0>(s=C+o|0)>>>0?Q+1|0:Q,o=s,y=i[E+48>>2],o=(D=i[(f=34784+(L=B<<3)|0)>>2])+o|0,Q=i[f+4>>2]+Q|0,Q=o>>>0>>0?Q+1|0:Q,o=(f=y^((k=i[E+40>>2])^y)&l)+o|0,Q=(((C=i[E+52>>2])^(u=i[E+44>>2]))&t^C)+Q|0,Q=o>>>0>>0?Q+1|0:Q,s=(a=o)+(o=i[E+56>>2])|0,Q=i[E+60>>2]+Q|0,Q=o>>>0>s>>>0?Q+1|0:Q,f=s+(D=i[E+24>>2])|0,o=Q,Q=Q+i[E+28>>2]|0,Q=f>>>0>>0?Q+1|0:Q,D=f,c=Q,i[E+24>>2]=f,i[E+28>>2]=Q,Q=ug(F=i[E>>2],f=i[E+4>>2],28),h=p,Q=ug(F,f,34)^Q,n=p^h,h=s+(ug(F,f,39)^Q)|0,Q=o+(p^n)|0,Q=s>>>0>h>>>0?Q+1|0:Q,s=(a=F&((n=i[E+16>>2])|(r=i[E+8>>2]))|n&r)+h|0,Q=(f&((h=i[E+20>>2])|(o=i[E+12>>2]))|o&h)+Q|0,s=Q=a>>>0>(e=s)>>>0?Q+1|0:Q,i[E+56>>2]=e,i[E+60>>2]=Q,Q=ug(D,c,14),a=p,d=ug(D,c,18)^Q,a^=p,w=n,Q=((t^u)&c^u)+C|0,Q=(n=(l^k)&D^k)>>>0>(y=n+y|0)>>>0?Q+1|0:Q,C=ug(D,c,41)^d,Q=(p^a)+Q|0,Q=C>>>0>(y=C+y|0)>>>0?Q+1|0:Q,y=(a=i[(n=d=(C=(1|B)<<3)+g|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=a>>>0>y>>>0?Q+1|0:Q,y=(n=i[(C=C+34784|0)>>2])+y|0,Q=i[C+4>>2]+Q|0,n=Q=n>>>0>y>>>0?Q+1|0:Q,Q=Q+h|0,h=y=w+(C=a=y)|0,C=Q=C>>>0>y>>>0?Q+1|0:Q,i[E+16>>2]=y,i[E+20>>2]=Q,y=E,Q=ug(e,s,28),E=p,G=ug(e,s,34)^Q,H=p^E,E=(Q=a)+(a=(r|F)&e|r&F)|0,Q=((o|f)&s|o&f)+n|0,Q=E>>>0>>0?Q+1|0:Q,n=ug(e,s,39)^G,Q=(p^H)+Q|0,G=E=n+E|0,E=Q=E>>>0>>0?Q+1|0:Q,i[y+48>>2]=G,i[y+52>>2]=Q,a=y,Q=ug(h,C,14),y=p,n=ug(h,C,18)^Q,H=p^y,w=r,Q=((t^c)&C^t)+u|0,Q=(r=(D^l)&h^l)>>>0>(y=r+k|0)>>>0?Q+1|0:Q,n=ug(h,C,41)^n,Q=(p^H)+Q|0,Q=n>>>0>(y=n+y|0)>>>0?Q+1|0:Q,y=(k=i[(r=U=(n=(2|B)<<3)+g|0)>>2])+y|0,Q=i[r+4>>2]+Q|0,Q=y>>>0>>0?Q+1|0:Q,y=(r=i[(n=n+34784|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=r>>>0>y>>>0?Q+1|0:Q,y=w+(n=r=y)|0,w=o,o=Q,Q=w+Q|0,n=Q=n>>>0>y>>>0?Q+1|0:Q,i[a+8>>2]=y,i[a+12>>2]=Q,Q=ug(G,E,28),k=p,u=ug(G,E,34)^Q,k^=p,Q=((f|s)&E|f&s)+o|0,Q=(r=(H=(e|F)&G|e&F)+r|0)>>>0>>0?Q+1|0:Q,o=r,r=ug(G,E,39)^u,Q=(p^k)+Q|0,k=o=o+r|0,o=Q=o>>>0>>0?Q+1|0:Q,i[a+40>>2]=k,i[a+44>>2]=Q,r=a,Q=ug(y,n,14),a=p,u=ug(y,n,18)^Q,H=p^a,w=F,Q=(c^(C^c)&n)+t|0,Q=(a=(F=D^(h^D)&y)+l|0)>>>0>>0?Q+1|0:Q,t=a,a=ug(y,n,41)^u,Q=(p^H)+Q|0,Q=a>>>0>(t=t+a|0)>>>0?Q+1|0:Q,t=(u=i[(l=F=(a=(3|B)<<3)+g|0)>>2])+t|0,Q=i[l+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=(l=i[(a=a+34784|0)>>2])+t|0,Q=i[a+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,l=t,t=w+(a=t)|0,w=f,f=Q,Q=w+Q|0,a=Q=a>>>0>t>>>0?Q+1|0:Q,i[r>>2]=t,i[r+4>>2]=Q,Q=ug(k,o,28),u=p,H=ug(k,o,34)^Q,u^=p,Q=((E|s)&o|E&s)+f|0,Q=(l=(v=(e|G)&k|e&G)+l|0)>>>0>>0?Q+1|0:Q,f=l,l=ug(k,o,39)^H,Q=(p^u)+Q|0,Q=(f=f+l|0)>>>0>>0?Q+1|0:Q,l=f,f=Q,i[r+32>>2]=l,i[r+36>>2]=Q,Q=ug(t,a,14),u=p,H=ug(t,a,18)^Q,u^=p,w=e,Q=c+(C^(C^n)&a)|0,Q=(e=D+(h^(y^h)&t)|0)>>>0>>0?Q+1|0:Q,c=ug(t,a,41)^H,Q=(p^u)+Q|0,Q=c>>>0>(D=c+e|0)>>>0?Q+1|0:Q,D=(u=i[(e=S=(c=(4|B)<<3)+g|0)>>2])+D|0,Q=i[e+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,D=(e=i[(c=c+34784|0)>>2])+D|0,Q=i[c+4>>2]+Q|0,c=s,s=Q=e>>>0>D>>>0?Q+1|0:Q,Q=c+Q|0,c=Q=(e=D)>>>0>(D=w+e|0)>>>0?Q+1|0:Q,i[r+56>>2]=D,i[r+60>>2]=Q,Q=ug(l,f,28),u=p,H=ug(l,f,34)^Q,u^=p,Q=((E|o)&f|E&o)+s|0,Q=(e=(v=(k|G)&l|k&G)+e|0)>>>0>>0?Q+1|0:Q,s=e,e=ug(l,f,39)^H,Q=(p^u)+Q|0,u=s=s+e|0,s=Q=e>>>0>s>>>0?Q+1|0:Q,i[r+24>>2]=u,i[r+28>>2]=Q,Q=ug(D,c,14),e=p,H=ug(D,c,18)^Q,v=p^e,w=G,Q=C+(n^(n^a)&c)|0,Q=(e=h+(y^(t^y)&D)|0)>>>0>>0?Q+1|0:Q,C=ug(D,c,41)^H,Q=(p^v)+Q|0,Q=C>>>0>(h=C+e|0)>>>0?Q+1|0:Q,h=(H=i[(e=G=(C=(5|B)<<3)+g|0)>>2])+h|0,Q=i[e+4>>2]+Q|0,Q=h>>>0>>0?Q+1|0:Q,h=(e=i[(C=C+34784|0)>>2])+h|0,Q=i[C+4>>2]+Q|0,Q=e>>>0>h>>>0?Q+1|0:Q,h=w+(C=e=h)|0,w=E,E=Q,Q=w+Q|0,C=Q=C>>>0>h>>>0?Q+1|0:Q,i[r+48>>2]=h,i[r+52>>2]=Q,Q=ug(u,s,28),H=p,v=ug(u,s,34)^Q,H^=p,Q=((o|f)&s|o&f)+E|0,Q=(e=(_=(l|k)&u|l&k)+e|0)>>>0<_>>>0?Q+1|0:Q,E=e,e=ug(u,s,39)^v,Q=(p^H)+Q|0,v=E=E+e|0,E=Q=E>>>0>>0?Q+1|0:Q,i[r+16>>2]=v,i[r+20>>2]=Q,Q=ug(h,C,14),e=p,H=ug(h,C,18)^Q,_=p^e,w=k,Q=n+(a^(a^c)&C)|0,Q=(e=y+(t^(t^D)&h)|0)>>>0>>0?Q+1|0:Q,n=ug(h,C,41)^H,Q=(p^_)+Q|0,Q=n>>>0>(y=n+e|0)>>>0?Q+1|0:Q,y=(k=i[(e=R=(n=(6|B)<<3)+g|0)>>2])+y|0,Q=i[e+4>>2]+Q|0,Q=y>>>0>>0?Q+1|0:Q,y=(e=i[(n=n+34784|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=e>>>0>y>>>0?Q+1|0:Q,y=w+(n=e=y)|0,w=o,o=Q,Q=w+Q|0,n=Q=n>>>0>y>>>0?Q+1|0:Q,i[r+40>>2]=y,i[r+44>>2]=Q,Q=ug(v,E,28),k=p,H=ug(v,E,34)^Q,k^=p,Q=((f|s)&E|f&s)+o|0,Q=(e=(_=(u|l)&v|u&l)+e|0)>>>0<_>>>0?Q+1|0:Q,o=e,e=ug(v,E,39)^H,Q=(p^k)+Q|0,_=o=o+e|0,o=Q=o>>>0>>0?Q+1|0:Q,i[r+8>>2]=_,i[r+12>>2]=Q,Q=ug(y,n,14),e=p,k=ug(y,n,18)^Q,H=p^e,w=l,Q=a+(c^(C^c)&n)|0,Q=(e=t+(D^(h^D)&y)|0)>>>0>>0?Q+1|0:Q,a=ug(y,n,41)^k,Q=(p^H)+Q|0,Q=a>>>0>(t=a+e|0)>>>0?Q+1|0:Q,t=(l=i[(e=k=(a=(7|B)<<3)+g|0)>>2])+t|0,Q=i[e+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=(e=i[(a=a+34784|0)>>2])+t|0,Q=i[a+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=w+(a=e=t)|0,w=f,f=Q,Q=w+Q|0,a=Q=a>>>0>t>>>0?Q+1|0:Q,i[r+32>>2]=t,i[r+36>>2]=Q,Q=ug(_,o,28),l=p,H=ug(_,o,34)^Q,l^=p,Q=((E|s)&o|E&s)+f|0,Q=(e=(w=(u|v)&_|u&v)+e|0)>>>0>>0?Q+1|0:Q,f=e,e=ug(_,o,39)^H,Q=(p^l)+Q|0,w=f=f+e|0,f=Q=e>>>0>f>>>0?Q+1|0:Q,i[r>>2]=w,i[r+4>>2]=Q,e=r,Q=ug(t,a,14),r=p,l=ug(t,a,18)^Q,H=p^r,Q=c+(C^(C^n)&a)|0,Q=(r=D+(h^(y^h)&t)|0)>>>0>>0?Q+1|0:Q,c=ug(t,a,41)^l,Q=(p^H)+Q|0,Q=c>>>0>(D=c+r|0)>>>0?Q+1|0:Q,D=(l=i[(r=H=(c=(8|B)<<3)+g|0)>>2])+D|0,Q=i[r+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,D=(r=i[(c=c+34784|0)>>2])+D|0,Q=i[c+4>>2]+Q|0,Q=r>>>0>D>>>0?Q+1|0:Q,l=D,r=s,s=Q,Q=r+Q|0,r=Q=(c=D)>>>0>(D=c+u|0)>>>0?Q+1|0:Q,i[e+24>>2]=D,i[e+28>>2]=Q,c=e,Q=ug(w,f,28),e=p,u=ug(w,f,34)^Q,Y=p^e,e=(Q=l)+(l=(_|v)&w|_&v)|0,Q=((E|o)&f|E&o)+s|0,Q=e>>>0>>0?Q+1|0:Q,s=e,e=ug(w,f,39)^u,Q=(p^Y)+Q|0,Y=s=s+e|0,s=Q=e>>>0>s>>>0?Q+1|0:Q,i[c+56>>2]=Y,i[c+60>>2]=Q,Q=ug(D,r,14),e=p,l=ug(D,r,18)^Q,u=p^e,Q=C+(n^(n^a)&r)|0,Q=(e=h+(y^(t^y)&D)|0)>>>0>>0?Q+1|0:Q,C=ug(D,r,41)^l,Q=(p^u)+Q|0,Q=C>>>0>(h=C+e|0)>>>0?Q+1|0:Q,h=(u=i[(e=l=(C=(9|B)<<3)+g|0)>>2])+h|0,Q=i[e+4>>2]+Q|0,Q=h>>>0>>0?Q+1|0:Q,h=(e=i[(C=C+34784|0)>>2])+h|0,Q=i[C+4>>2]+Q|0,Q=e>>>0>h>>>0?Q+1|0:Q,e=E,E=Q,Q=e+Q|0,e=Q=(C=h)>>>0>(h=C+v|0)>>>0?Q+1|0:Q,i[c+16>>2]=h,i[c+20>>2]=Q,Q=ug(Y,s,28),u=p,v=ug(Y,s,34)^Q,u^=p,Q=((o|f)&s|o&f)+E|0,Q=(C=(b=(w|_)&Y|w&_)+C|0)>>>0>>0?Q+1|0:Q,E=C,C=ug(Y,s,39)^v,Q=(p^u)+Q|0,b=E=E+C|0,E=Q=E>>>0>>0?Q+1|0:Q,i[c+48>>2]=b,i[c+52>>2]=Q,Q=ug(h,e,14),C=p,u=ug(h,e,18)^Q,v=p^C,Q=n+(a^(r^a)&e)|0,Q=(C=y+(t^(t^D)&h)|0)>>>0>>0?Q+1|0:Q,n=C,C=ug(h,e,41)^u,Q=(p^v)+Q|0,Q=C>>>0>(y=n+C|0)>>>0?Q+1|0:Q,y=(u=i[(n=v=(C=(10|B)<<3)+g|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=y>>>0>>0?Q+1|0:Q,y=(n=i[(C=C+34784|0)>>2])+y|0,Q=i[C+4>>2]+Q|0,Q=n>>>0>y>>>0?Q+1|0:Q,u=y,n=o,o=Q,Q=n+Q|0,n=Q=(C=y)>>>0>(y=C+_|0)>>>0?Q+1|0:Q,i[c+8>>2]=y,i[c+12>>2]=Q,C=c,Q=ug(b,E,28),c=p,_=ug(b,E,34)^Q,N=p^c,c=(Q=u)+(u=(w|Y)&b|w&Y)|0,Q=((f|s)&E|f&s)+o|0,Q=c>>>0>>0?Q+1|0:Q,o=c,c=ug(b,E,39)^_,Q=(p^N)+Q|0,c=Q=(o=o+c|0)>>>0>>0?Q+1|0:Q,i[C+40>>2]=o,i[C+44>>2]=Q,Q=ug(y,n,14),u=p,_=ug(y,n,18)^Q,N=p^u,m=w,Q=a+(r^(r^e)&n)|0,Q=(u=t+(D^(h^D)&y)|0)>>>0>>0?Q+1|0:Q,a=ug(y,n,41)^_,Q=(p^N)+Q|0,Q=a>>>0>(t=a+u|0)>>>0?Q+1|0:Q,t=(w=i[(u=(a=(11|B)<<3)+g|0)>>2])+t|0,Q=i[u+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=(_=i[(a=a+34784|0)>>2])+t|0,Q=i[a+4>>2]+Q|0,Q=t>>>0<_>>>0?Q+1|0:Q,w=t,_=f,f=Q,Q=_+Q|0,a=Q=(a=t)>>>0>(t=m+a|0)>>>0?Q+1|0:Q,i[C>>2]=t,i[C+4>>2]=Q,_=C,Q=ug(o,c,28),C=p,N=ug(o,c,34)^Q,M=p^C,C=(Q=w)+(w=(Y|b)&o|Y&b)|0,Q=((E|s)&c|E&s)+f|0,Q=C>>>0>>0?Q+1|0:Q,f=C,C=ug(o,c,39)^N,Q=(p^M)+Q|0,C=Q=C>>>0>(f=f+C|0)>>>0?Q+1|0:Q,i[_+32>>2]=f,i[_+36>>2]=Q,w=_,Q=ug(t,a,14),_=p,N=ug(t,a,18)^Q,M=p^_,m=Y,Q=r+(e^(n^e)&a)|0,Q=(_=D+(h^(y^h)&t)|0)>>>0>>0?Q+1|0:Q,r=ug(t,a,41)^N,Q=(p^M)+Q|0,Q=r>>>0>(D=r+_|0)>>>0?Q+1|0:Q,D=(N=i[(Y=_=(r=(12|B)<<3)+g|0)>>2])+D|0,Q=i[Y+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,D=(Y=i[(r=r+34784|0)>>2])+D|0,Q=i[r+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,Y=D,D=m+(r=D)|0,m=s,s=Q,Q=m+Q|0,N=D,D=Q=r>>>0>D>>>0?Q+1|0:Q,i[w+56>>2]=N,i[w+60>>2]=Q,r=w,Q=ug(f,C,28),w=p,M=ug(f,C,34)^Q,m=p^w,w=(Q=Y)+(Y=(o|b)&f|o&b)|0,Q=((E|c)&C|E&c)+s|0,Q=w>>>0>>0?Q+1|0:Q,s=w,w=ug(f,C,39)^M,Q=(p^m)+Q|0,Y=s=s+w|0,s=Q=s>>>0>>0?Q+1|0:Q,i[r+24>>2]=Y,i[r+28>>2]=Q,w=r,Q=ug(N,D,14),r=p,M=ug(N,D,18)^Q,m=p^r,P=b,Q=e+(n^(n^a)&D)|0,Q=(r=h+(y^(t^y)&N)|0)>>>0>>0?Q+1|0:Q,e=r,r=ug(N,D,41)^M,Q=(p^m)+Q|0,Q=r>>>0>(h=e+r|0)>>>0?Q+1|0:Q,r=(r=h)+(M=i[(h=(e=(13|B)<<3)+g|0)>>2])|0,Q=i[h+4>>2]+Q|0,Q=r>>>0>>0?Q+1|0:Q,r=(b=i[(e=e+34784|0)>>2])+r|0,Q=i[e+4>>2]+Q|0,Q=r>>>0>>0?Q+1|0:Q,b=r,e=r,m=E,E=Q,Q=m+Q|0,M=r=P+r|0,r=Q=r>>>0>>0?Q+1|0:Q,i[w+48>>2]=M,i[w+52>>2]=Q,e=w,Q=ug(Y,s,28),w=p,m=ug(Y,s,34)^Q,P=p^w,w=(Q=b)+(b=(o|f)&Y|o&f)|0,Q=((C|c)&s|C&c)+E|0,Q=w>>>0>>0?Q+1|0:Q,E=w,w=ug(Y,s,39)^m,Q=(p^P)+Q|0,b=E=E+w|0,E=Q=E>>>0>>0?Q+1|0:Q,i[e+16>>2]=b,i[e+20>>2]=Q,Q=ug(M,r,14),w=p,m=ug(M,r,18)^Q,P=p^w,Q=n+(a^(a^D)&r)|0,Q=(w=y+(t^(t^N)&M)|0)>>>0>>0?Q+1|0:Q,n=ug(M,r,41)^m,Q=(p^P)+Q|0,Q=n>>>0>(y=n+w|0)>>>0?Q+1|0:Q,n=(n=y)+(P=i[(y=(w=(14|B)<<3)+g|0)>>2])|0,Q=i[y+4>>2]+Q|0,Q=n>>>0

>>0?Q+1|0:Q,n=(m=i[(w=w+34784|0)>>2])+n|0,Q=i[w+4>>2]+Q|0,P=n,w=Q=n>>>0>>0?Q+1|0:Q,Q=c+Q|0,m=n=o+n|0,o=Q=n>>>0>>0?Q+1|0:Q,i[e+40>>2]=n,i[e+44>>2]=Q,n=e,Q=ug(b,E,28),c=p,e=ug(b,E,34)^Q,J=p^c,c=(Q=P)+(P=(f|Y)&b|f&Y)|0,Q=((C|s)&E|C&s)+w|0,Q=c>>>0

>>0?Q+1|0:Q,e=ug(b,E,39)^e,Q=(p^J)+Q|0,Q=e>>>0>(c=e+c|0)>>>0?Q+1|0:Q,e=c,c=Q,i[n+8>>2]=e,i[n+12>>2]=Q,Q=ug(m,o,14),n=p,P=ug(m,o,18)^Q,J=p^n,Q=a+(D^(r^D)&o)|0,Q=(w=t+(N^(N^M)&m)|0)>>>0>>0?Q+1|0:Q,D=ug(m,o,41)^P,Q=(p^J)+Q|0,Q=(o=D+w|0)>>>0>>0?Q+1|0:Q,o=(r=i[(a=D=(t=(15|B)<<3)+g|0)>>2])+o|0,Q=i[a+4>>2]+Q|0,Q=o>>>0>>0?Q+1|0:Q,o=(a=i[(t=t+34784|0)>>2])+o|0,Q=i[t+4>>2]+Q|0,Q=o>>>0>>0?Q+1|0:Q,t=f+(a=o)|0,o=Q,Q=C+Q|0,i[(n=I)+32>>2]=t,i[n+36>>2]=t>>>0>>0?Q+1|0:Q,Q=ug(e,c,28),f=p,C=ug(e,c,34)^Q,n=p^f,Q=((E|s)&c|E&s)+o|0,s=(t=(E=a)+(a=(Y|b)&e|Y&b)|0)+(E=ug(e,c,39)^C)|0,Q=(p^n)+(a>>>0>t>>>0?Q+1|0:Q)|0,i[(f=I)>>2]=s,i[f+4>>2]=E>>>0>s>>>0?Q+1|0:Q,64==(0|B)){for(;s=g=(B=x<<3)+A|0,B=(E=i[(Q=I+B|0)>>2])+i[s>>2]|0,Q=i[s+4>>2]+i[Q+4>>2]|0,i[s>>2]=B,i[s+4>>2]=B>>>0>>0?Q+1|0:Q,8!=(0|(x=x+1|0)););break}c=((B=B+16|0)<<3)+g|0,Y=s=i[y+4>>2],Q=s>>>6|0,s=((63&s)<<26|(b=i[y>>2])>>>6)^ug(b,s,19),Q^=p,s=(C=ug(b,Y,61)^s)+(E=w=i[l>>2])|0,Q=(f=i[l+4>>2])+(p^Q)|0,Q=E>>>0>s>>>0?Q+1|0:Q,s=(o=i[(E=g+L|0)>>2])+s|0,Q=i[E+4>>2]+Q|0,s=o>>>0>(C=s)>>>0?Q+1|0:Q,o=E=i[d+4>>2],Q=E>>>7|0,E=((127&E)<<25|(t=i[d>>2])>>>7)^ug(t,E,1),Q^=p,a=C,C=ug(t,o,8)^E,Q=(p^Q)+s|0,n=E=a+C|0,E=Q=E>>>0>>0?Q+1|0:Q,i[c>>2]=n,i[c+4>>2]=Q,Q=i[(c=d)+76>>2]+o|0,C=t,o=(t=i[c+72>>2])>>>0>(C=s=C+t|0)>>>0?Q+1|0:Q,s=t=i[D+4>>2],Q=t>>>6|0,t=((63&t)<<26|(e=i[D>>2])>>>6)^ug(e,t,19),Q^=p,a=C,C=ug(e,s,61)^t,Q=(p^Q)+o|0,o=C>>>0>(a=t=a+C|0)>>>0?Q+1|0:Q,t=C=i[c+12>>2],Q=C>>>7|0,C=((127&C)<<25|(r=i[c+8>>2])>>>7)^ug(r,C,1),Q^=p,d=a,a=ug(r,t,8)^C,Q=(p^Q)+o|0,Q=(C=d+a|0)>>>0>>0?Q+1|0:Q,a=C,o=Q,i[c+128>>2]=C,i[c+132>>2]=Q,c=U,C=t,Q=ug(n,E,19),U=p,t=Q,Q=E>>>6|0,E=(E=ug(n,E,61)^t^((63&E)<<26|n>>>6))+(n=d=i[u>>2])|0,Q=(t=i[u+4>>2])+(p^Q^U)|0,Q=E>>>0>>0?Q+1|0:Q,n=E,Q=Q+C|0,r=E=E+r|0,E=E>>>0>>0?Q+1|0:Q,n=C=i[F+4>>2],Q=C>>>7|0,C=((127&C)<<25|(U=i[F>>2])>>>7)^ug(U,C,1),Q^=p,m=r,r=ug(U,n,8)^C,Q=(p^Q)+E|0,Q=(C=m+r|0)>>>0>>0?Q+1|0:Q,r=C,E=Q,i[c+128>>2]=C,i[c+132>>2]=Q,c=(Q=U)+(U=i[(C=F)+72>>2])|0,Q=i[C+76>>2]+n|0,n=Q=c>>>0>>0?Q+1|0:Q,Q=ug(a,o,19),U=p,F=c,c=Q,Q=o>>>6|0,c=ug(a,o,61)^c^((63&o)<<26|a>>>6),Q=(p^Q^U)+n|0,U=o=F+c|0,o=o>>>0>>0?Q+1|0:Q,c=n=i[C+12>>2],Q=n>>>7|0,n=((127&n)<<25|(a=i[C+8>>2])>>>7)^ug(a,n,1),Q^=p,F=ug(a,c,8)^n,Q=(p^Q)+o|0,Q=(n=F+U|0)>>>0>>0?Q+1|0:Q,F=n,o=Q,i[C+128>>2]=n,i[C+132>>2]=Q,C=S,n=c,Q=ug(r,E,19),S=p,m=a,a=Q,Q=E>>>6|0,E=(E=ug(r,E,61)^a^((63&E)<<26|r>>>6))+(a=U=i[h>>2])|0,Q=(c=i[h+4>>2])+(p^Q^S)|0,Q=E>>>0>>0?Q+1|0:Q,a=E,Q=Q+n|0,S=E=m+E|0,E=E>>>0>>0?Q+1|0:Q,a=n=i[G+4>>2],Q=n>>>7|0,n=((127&n)<<25|(r=i[G>>2])>>>7)^ug(r,n,1),Q^=p,m=S,S=ug(r,a,8)^n,Q=(p^Q)+E|0,Q=(n=m+S|0)>>>0>>0?Q+1|0:Q,S=n,E=Q,i[C+128>>2]=n,i[C+132>>2]=Q,C=(Q=r)+(r=i[(n=G)+72>>2])|0,Q=i[n+76>>2]+a|0,a=Q=C>>>0>>0?Q+1|0:Q,Q=ug(F,o,19),r=p,G=C,m=Q,Q=(C=o)>>>6|0,C=m^((63&C)<<26|F>>>6)^ug(F,C,61),Q=(p^Q^r)+a|0,o=C>>>0>(r=o=G+C|0)>>>0?Q+1|0:Q,Q=(C=a=i[n+12>>2])>>>7|0,a=((127&C)<<25|(G=i[n+8>>2])>>>7)^ug(G,C,1),Q^=p,F=r,r=ug(G,C,8)^a,Q=(p^Q)+o|0,F=a=F+r|0,o=Q=r>>>0>a>>>0?Q+1|0:Q,i[n+128>>2]=a,i[n+132>>2]=Q,n=R,a=C,Q=ug(S,E,19),R=p,C=Q,Q=E>>>6|0,C=ug(S,E,61)^C^((63&E)<<26|S>>>6),Q=(p^Q^R)+s|0,Q=(E=C+e|0)>>>0>>0?Q+1|0:Q,C=E,Q=Q+a|0,G=E=E+G|0,E=E>>>0>>0?Q+1|0:Q,Q=(C=r=i[k+4>>2])>>>7|0,r=((127&C)<<25|(a=i[k>>2])>>>7)^ug(a,C,1),Q^=p,S=G,G=ug(a,C,8)^r,Q=(p^Q)+E|0,E=Q=(r=S+G|0)>>>0>>0?Q+1|0:Q,i[n+128>>2]=r,i[n+132>>2]=Q,Q=i[(n=k)+76>>2]+C|0,a=(C=a=(G=i[n+72>>2])+a|0)>>>0>>0?Q+1|0:Q,Q=ug(F,o,19),G=p,S=C,k=Q,Q=(C=o)>>>6|0,C=k^((63&C)<<26|F>>>6)^ug(F,C,61),Q=(p^Q^G)+a|0,F=o=S+C|0,o=C>>>0>o>>>0?Q+1|0:Q,Q=(C=a=i[n+12>>2])>>>7|0,a=((127&C)<<25|(G=i[n+8>>2])>>>7)^ug(G,C,1),Q^=p,S=F,F=ug(G,C,8)^a,Q=(p^Q)+o|0,Q=(a=S+F|0)>>>0>>0?Q+1|0:Q,F=a,o=Q,i[n+128>>2]=a,i[n+132>>2]=Q,a=C,Q=ug(r,E,19),k=p,C=Q,Q=E>>>6|0,E=(E=ug(r,E,61)^C^((63&E)<<26|r>>>6))+(C=i[(n=H)+72>>2])|0,Q=i[n+76>>2]+(p^Q^k)|0,Q=E>>>0>>0?Q+1|0:Q,C=E,Q=Q+a|0,C=Q=(E=E+G|0)>>>0>>0?Q+1|0:Q,Q=ug(w,f,1),a=p,G=E,r=Q,Q=(E=f)>>>7|0,r=r^((127&E)<<25|w>>>7)^ug(w,E,8),Q=(p^Q^a)+C|0,a=E=G+r|0,E=Q=E>>>0>>0?Q+1|0:Q,i[n+128>>2]=a,i[n+132>>2]=Q,Q=i[(C=l)+76>>2]+f|0,f=n=(r=i[C+72>>2])+w|0,n=n>>>0>>0?Q+1|0:Q,Q=ug(F,o,19),r=p,w=f,f=Q,Q=o>>>6|0,f=ug(F,o,61)^f^((63&o)<<26|F>>>6),Q=(p^Q^r)+n|0,o=(r=o=w+f|0)>>>0>>0?Q+1|0:Q,f=n=i[C+12>>2],Q=n>>>7|0,n=((127&n)<<25|(F=i[C+8>>2])>>>7)^ug(F,n,1),Q^=p,w=r,r=ug(F,f,8)^n,Q=(p^Q)+o|0,Q=(n=w+r|0)>>>0>>0?Q+1|0:Q,r=n,o=Q,i[C+128>>2]=n,i[C+132>>2]=Q,n=f,Q=ug(a,E,19),G=p,C=Q,Q=E>>>6|0,E=(E=ug(a,E,61)^C^((63&E)<<26|a>>>6))+(f=i[(C=v)+72>>2])|0,Q=i[C+76>>2]+(p^Q^G)|0,Q=E>>>0>>0?Q+1|0:Q,f=E,Q=Q+n|0,f=Q=(E=E+F|0)>>>0>>0?Q+1|0:Q,Q=ug(d,t,1),n=p,w=E,a=Q,Q=(E=t)>>>7|0,a=a^((127&E)<<25|d>>>7)^ug(d,E,8),Q=(p^Q^n)+f|0,n=E=w+a|0,E=Q=E>>>0>>0?Q+1|0:Q,i[C+128>>2]=n,i[C+132>>2]=Q,f=(a=i[(C=u)+72>>2])+d|0,Q=i[C+76>>2]+t|0,t=Q=a>>>0>f>>>0?Q+1|0:Q,Q=ug(r,o,19),a=p,w=f,f=Q,Q=o>>>6|0,f=ug(r,o,61)^f^((63&o)<<26|r>>>6),Q=(p^Q^a)+t|0,o=(a=o=w+f|0)>>>0>>0?Q+1|0:Q,f=t=i[C+12>>2],Q=t>>>7|0,t=((127&t)<<25|(r=i[C+8>>2])>>>7)^ug(r,t,1),Q^=p,w=a,a=ug(r,f,8)^t,Q=(p^Q)+o|0,Q=a>>>0>(t=w+a|0)>>>0?Q+1|0:Q,a=t,o=Q,i[C+128>>2]=a,i[C+132>>2]=Q,C=f,Q=ug(n,E,19),d=p,f=Q,Q=E>>>6|0,E=(E=ug(n,E,61)^f^((63&E)<<26|n>>>6))+(f=i[(t=_)+72>>2])|0,Q=i[t+76>>2]+(p^Q^d)|0,Q=E>>>0>>0?Q+1|0:Q,f=E,Q=Q+C|0,f=Q=(E=E+r|0)>>>0>>0?Q+1|0:Q,Q=ug(U,c,1),C=p,r=E,n=Q,Q=(E=c)>>>7|0,n=n^((127&E)<<25|U>>>7)^ug(U,E,8),Q=(p^Q^C)+f|0,C=E=r+n|0,E=Q=E>>>0>>0?Q+1|0:Q,i[t+128>>2]=C,i[t+132>>2]=Q,t=(n=i[(f=h)+72>>2])+U|0,Q=i[f+76>>2]+c|0,c=Q=n>>>0>t>>>0?Q+1|0:Q,Q=ug(a,o,19),n=p,r=t,t=Q,Q=o>>>6|0,t=ug(a,o,61)^t^((63&o)<<26|a>>>6),Q=(p^Q^n)+c|0,o=(n=o=r+t|0)>>>0>>0?Q+1|0:Q,c=t=i[f+12>>2],Q=t>>>7|0,t=((127&t)<<25|(h=i[f+8>>2])>>>7)^ug(h,t,1),Q^=p,t=ug(h,c,8)^t,Q=(p^Q)+o|0,Q=t>>>0>(h=t+n|0)>>>0?Q+1|0:Q,t=h,o=Q,i[f+128>>2]=t,i[f+132>>2]=Q,h=(c=i[(f=y)+72>>2])+b|0,Q=i[f+76>>2]+Y|0,y=Q=c>>>0>h>>>0?Q+1|0:Q,Q=ug(C,E,19),c=p,a=h,n=Q,Q=E>>>6|0,h=ug(C,E,61)^n^((63&E)<<26|C>>>6),Q=(p^Q^c)+y|0,h=Q=(E=a+h|0)>>>0>>0?Q+1|0:Q,Q=ug(e,s,1),y=p,C=E,a=Q,Q=(E=s)>>>7|0,E=C+(c=a^((127&E)<<25|e>>>7)^ug(e,E,8))|0,Q=(p^Q^y)+h|0,i[f+128>>2]=E,i[f+132>>2]=E>>>0>>0?Q+1|0:Q,Q=i[(E=D)+76>>2]+s|0,s=f=(h=i[E+72>>2])+e|0,f=f>>>0>>0?Q+1|0:Q,Q=ug(t,o,19),h=p,C=Q,Q=o>>>6|0,o=ug(t,o,61)^C^((63&o)<<26|t>>>6),Q=(p^Q^h)+f|0,s=o>>>0>(y=s=o+s|0)>>>0?Q+1|0:Q,D=((127&(f=h=i[E+12>>2]))<<25|(o=i[E+8>>2])>>>7)^ug(o,f,1),Q=p^f>>>7,D=(h=ug(o,f,8)^D)+y|0,Q=(p^Q)+s|0,i[E+128>>2]=D,i[E+132>>2]=h>>>0>D>>>0?Q+1|0:Q}}function G(A){var I,g,B,Q,E,i,a,r,o,e,t,f,c,y,s,w,h,D,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0,EA=0;y=HI(A),s=n[A+2|0]|n[A+3|0]<<8|n[A+4|0]<<16|n[A+5|0]<<24,w=HI(A+5|0),h=p,IA=n[A+7|0]|n[A+8|0]<<8|n[A+9|0]<<16|n[A+10|0]<<24,gA=n[A+10|0]|n[A+11|0]<<8|n[A+12|0]<<16|n[A+13|0]<<24,D=HI(A+13|0),BA=p,M=n[A+15|0]|n[A+16|0]<<8|n[A+17|0]<<16|n[A+18|0]<<24,Z=HI(A+18|0),d=p,m=HI(A+21|0),_=n[A+23|0]|n[A+24|0]<<8|n[A+25|0]<<16|n[A+26|0]<<24,k=HI(A+26|0),l=p,AA=n[A+28|0]|n[A+29|0]<<8|n[A+30|0]<<16|n[A+31|0]<<24,q=n[A+31|0]|n[A+32|0]<<8|n[A+33|0]<<16|n[A+34|0]<<24,T=HI(A+34|0),W=p,P=n[A+36|0]|n[A+37|0]<<8|n[A+38|0]<<16|n[A+39|0]<<24,O=HI(A+39|0),J=p,Y=HI(A+42|0),G=n[A+44|0]|n[A+45|0]<<8|n[A+46|0]<<16|n[A+47|0]<<24,F=HI(A+47|0),u=2097151&((3&l)<<30|k>>>2),k=eg(I=2097151&((3&(H=p))<<30|F>>>2),0,136657,0)+u|0,l=p,l=u>>>0>k>>>0?l+1|0:l,F=eg(g=(n[A+49|0]|n[A+50|0]<<8|n[A+51|0]<<16|n[A+52|0]<<24)>>>7&2097151,0,-997805,-1),u=p+l|0,u=F>>>0>(k=F+k|0)>>>0?u+1|0:u,l=eg(B=(n[A+52|0]|n[A+53|0]<<8|n[A+54|0]<<16|n[A+55|0]<<24)>>>4&2097151,0,654183,0),F=p+u|0,F=l>>>0>(k=l+k|0)>>>0?F+1|0:F,u=k,l=HI(A+55|0),k=u+(l=eg(Q=2097151&((1&(k=p))<<31|l>>>1),0,470296,0))|0,u=p+F|0,u=l>>>0>k>>>0?u+1|0:u,F=eg(E=(n[A+57|0]|n[A+58|0]<<8|n[A+59|0]<<16|n[A+60|0]<<24)>>>6&2097151,0,666643,0),l=p+u|0,U=l=F>>>0>(k=F+k|0)>>>0?l+1|0:l,F=l,b=G>>>5&2097151,l=2097151&Y,G=eg(i=(n[A+60|0]|n[A+61|0]<<8|n[A+62|0]<<16|n[A+63|0]<<24)>>>3|0,0,-683901,-1)+l|0,u=p,Y=G,S=u=l>>>0>G>>>0?u+1|0:u,N=(u=G)- -1048576|0,L=G=S-((u>>>0<4293918720)-1|0)|0,u=G>>21,r=b=(G=(2097151&G)<<11|N>>>21)+b|0,V=l=G>>>0>b>>>0?u+1|0:u,u=eg(b,l,-683901,-1),l=p+F|0,j=H=u+k|0,v=u>>>0>H>>>0?l+1|0:l,F=_>>>5&2097151,H=eg(I,0,-997805,-1)+F|0,u=p,u=F>>>0>H>>>0?u+1|0:u,l=eg(g,0,654183,0),F=p+u|0,F=l>>>0>(H=l+H|0)>>>0?F+1|0:F,u=eg(B,0,470296,0),l=p+F|0,l=u>>>0>(H=u+H|0)>>>0?l+1|0:l,F=eg(Q,0,666643,0),u=p+l|0,F=F>>>0>(_=H=F+H|0)>>>0?u+1|0:u,u=2097151&m,H=eg(I,0,654183,0)+u|0,l=p,l=u>>>0>H>>>0?l+1|0:l,G=(u=H)+(H=eg(g,0,470296,0))|0,u=p+l|0,u=G>>>0>>0?u+1|0:u,H=eg(B,0,666643,0),l=p+u|0,b=G=H+G|0,G=l=G>>>0>>0?l+1|0:l,z=(u=b)- -1048576|0,R=H=l-((u>>>0<4293918720)-1|0)|0,F=(u=H>>>21|0)+F|0,m=F=(l=(2097151&H)<<11|z>>>21)>>>0>(_=H=l+_|0)>>>0?F+1|0:F,K=(u=_)- -1048576|0,f=k- -1048576|0,U=U-((k>>>0<4293918720)-1|0)|0,l=(u=(F=x=F-((u>>>0<4293918720)-1|0)|0)>>21)+v|0,U=(l=(k=(2097151&F)<<11|K>>>21)>>>0>(x=k+j|0)>>>0?l+1|0:l)-(((u=-2097152&f)>>>0>(k=x)>>>0)+(H=U)|0)|0,QA=(u=k-u|0)-(l=-2097152&(c=u- -1048576|0))|0,CA=U-((u>>>0>>0)+(k=U-((u>>>0<4293918720)-1|0)|0)|0)|0,l=eg(r,V,136657,0)+_|0,u=m+p|0,u=l>>>0<_>>>0?u+1|0:u,$=(_=l)-(l=-2097152&K)|0,j=u-((l>>>0>_>>>0)+F|0)|0,U=Y-(u=-2097152&N)|0,v=S-((u>>>0>Y>>>0)+L|0)|0,u=2097151&((7&J)<<29|O>>>3),F=eg(i,0,136657,0)+u|0,l=p,l=u>>>0>F>>>0?l+1|0:l,_=(u=F)+(F=eg(E,0,-683901,-1))|0,u=p+l|0,Y=_,_=F>>>0>_>>>0?u+1|0:u,u=eg(Q,0,-683901,-1),l=p,F=u,l=(u=P>>>6&2097151)>>>0>(F=F+u|0)>>>0?l+1|0:l,m=(u=eg(i,0,-997805,-1))+F|0,F=p+l|0,F=u>>>0>m>>>0?F+1|0:F,l=eg(E,0,136657,0),u=p+F|0,K=l=(N=u=l>>>0>(m=l+m|0)>>>0?u+1|0:u)-(((u=m)>>>0<4293918720)-1|0)|0,u=(2097151&l)<<11|(O=u- -1048576|0)>>>21,l=(l>>21)+_|0,S=l=u>>>0>(Y=u+Y|0)>>>0?l+1|0:l,x=(u=Y)- -1048576|0,L=l=l-((u>>>0<4293918720)-1|0)|0,u=(F=l>>21)+v|0,o=_=(l=(2097151&l)<<11|x>>>21)+U|0,X=u=l>>>0>_>>>0?u+1|0:u,l=eg(_,u,-683901,-1),u=p+j|0,EA=F=l+$|0,P=l>>>0>F>>>0?u+1|0:u,v=b,u=2097151&((7&d)<<29|Z>>>3),F=eg(I,0,470296,0)+u|0,l=p,l=u>>>0>F>>>0?l+1|0:l,u=eg(g,0,666643,0),l=p+l|0,U=F=u+F|0,F=u>>>0>F>>>0?l+1|0:l,_=M>>>6&2097151,b=eg(I,0,666643,0)+_|0,u=p,d=_=(M=u=_>>>0>b>>>0?u+1|0:u)-(((u=b)>>>0<4293918720)-1|0)|0,l=(l=_>>>21|0)+F|0,J=l=(u=(2097151&_)<<11|($=u- -1048576|0)>>>21)>>>0>(_=u+U|0)>>>0?l+1|0:l,Z=l-(((u=_)>>>0<4293918720)-1|0)|0,j=u- -1048576|0,a=Y-(u=-2097152&x)|0,e=F=S-((u>>>0>Y>>>0)+L|0)|0,u=((U=Z)>>>21|0)+G|0,u=(Y=(2097151&U)<<11|j>>>21)>>>0>(v=Y+v|0)>>>0?u+1|0:u,v=(G=eg(r,V,-997805,-1))+((Y=v)-(l=-2097152&z)|0)|0,l=p+(u-((8191&R)+(l>>>0>Y>>>0)|0)|0)|0,l=G>>>0>v>>>0?l+1|0:l,u=eg(o,X,136657,0),l=p+l|0,l=u>>>0>(G=u+v|0)>>>0?l+1|0:l,F=eg(a,F,-683901,-1),u=p+l|0,S=u=F>>>0>(G=F+G|0)>>>0?u+1|0:u,x=(u=G)- -1048576|0,L=F=S-((u>>>0<4293918720)-1|0)|0,l=(u=F>>21)+P|0,v=l=(F=(2097151&F)<<11|x>>>21)>>>0>(Y=F+EA|0)>>>0?l+1|0:l,R=(u=F=Y)- -1048576|0,u=(u=(Y=P=l-((u>>>0<4293918720)-1|0)|0)>>21)+CA|0,QA=P=(l=(2097151&Y)<<11|R>>>21)+QA|0,P=l>>>0>P>>>0?u+1|0:u,CA=F-(u=-2097152&R)|0,EA=v-((u>>>0>F>>>0)+Y|0)|0,Z=G-(u=-2097152&x)|0,z=S-((u>>>0>G>>>0)+L|0)|0,u=eg(r,V,654183,0),F=p+(J-((8191&U)+((l=-2097152&j)>>>0>_>>>0)|0)|0)|0,F=u>>>0>(G=u+(_-l|0)|0)>>>0?F+1|0:F,l=eg(o,X,-997805,-1),u=p+F|0,u=l>>>0>(G=l+G|0)>>>0?u+1|0:u,F=eg(a,e,136657,0),l=p+u|0,x=G=F+G|0,Y=F>>>0>G>>>0?l+1|0:l,R=m-(u=-2097152&O)|0,J=N-((u>>>0>m>>>0)+K|0)|0,l=2097151&((1&W)<<31|T>>>1),G=eg(B,0,-683901,-1)+l|0,u=p,u=l>>>0>G>>>0?u+1|0:u,l=eg(Q,0,136657,0),u=p+u|0,u=l>>>0>(F=l+G|0)>>>0?u+1|0:u,G=(l=F)+(F=eg(i,0,654183,0))|0,l=p+u|0,l=F>>>0>G>>>0?l+1|0:l,u=eg(E,0,-997805,-1),l=p+l|0,m=F=u+G|0,G=u>>>0>F>>>0?l+1|0:l,u=eg(g,0,-683901,-1),F=p,l=u,F=(u=q>>>4&2097151)>>>0>(l=l+u|0)>>>0?F+1|0:F,_=(u=l)+(l=eg(B,0,136657,0))|0,u=p+F|0,u=l>>>0>_>>>0?u+1|0:u,F=eg(Q,0,-997805,-1),l=p+u|0,l=F>>>0>(_=F+_|0)>>>0?l+1|0:l,F=eg(i,0,470296,0),u=p+l|0,u=F>>>0>(_=F+_|0)>>>0?u+1|0:u,F=eg(E,0,654183,0),l=p+u|0,S=l=F>>>0>(_=F+_|0)>>>0?l+1|0:l,K=(u=_)- -1048576|0,L=F=l-((u>>>0<4293918720)-1|0)|0,u=(u=F>>21)+G|0,G=F=(l=(2097151&F)<<11|K>>>21)+m|0,v=u=l>>>0>F>>>0?u+1|0:u,U=(u=F)- -1048576|0,m=F=v-((u>>>0<4293918720)-1|0)|0,l=(u=F>>21)+J|0,t=N=(F=(2097151&F)<<11|U>>>21)+R|0,q=l=F>>>0>N>>>0?l+1|0:l,u=eg(N,l,-683901,-1),F=p+Y|0,J=l=u+x|0,Y=u>>>0>l>>>0?F+1|0:F,T=G-(u=-2097152&U)|0,W=m=v-((u>>>0>G>>>0)+m|0)|0,F=(u=eg(r,V,470296,0))+(b-(l=-2097152&$)|0)|0,l=p+(M-((2047&d)+(l>>>0>b>>>0)|0)|0)|0,l=u>>>0>F>>>0?l+1|0:l,u=eg(o,X,654183,0),l=p+l|0,l=u>>>0>(F=u+F|0)>>>0?l+1|0:l,G=(u=eg(a,e,-997805,-1))+F|0,F=p+l|0,F=u>>>0>G>>>0?F+1|0:F,l=eg(N,q,136657,0),u=p+F|0,u=l>>>0>(G=l+G|0)>>>0?u+1|0:u,F=eg(T,m,-683901,-1),l=p+u|0,v=l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,d=(u=G)- -1048576|0,m=F=l-((u>>>0<4293918720)-1|0)|0,u=(u=F>>21)+Y|0,Y=u=(l=(2097151&F)<<11|d>>>21)>>>0>(F=l+J|0)>>>0?u+1|0:u,U=(u=F)- -1048576|0,l=(u=(b=J=Y-((u>>>0<4293918720)-1|0)|0)>>21)+z|0,Z=M=(J=(2097151&b)<<11|U>>>21)+Z|0,J=M>>>0>>0?l+1|0:l,z=F-(u=-2097152&U)|0,O=Y-((u>>>0>F>>>0)+b|0)|0,x=G-(u=-2097152&d)|0,N=v-((u>>>0>G>>>0)+m|0)|0,l=2097151&((1&BA)<<31|D>>>1),G=eg(r,V,666643,0)+l|0,u=p,u=l>>>0>G>>>0?u+1|0:u,F=eg(o,X,470296,0),l=p+u|0,l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,F=eg(a,e,654183,0),u=p+l|0,u=F>>>0>(G=F+G|0)>>>0?u+1|0:u,l=eg(t,q,-997805,-1),F=p+u|0,F=l>>>0>(G=l+G|0)>>>0?F+1|0:F,u=eg(T,W,136657,0),l=p+F|0,m=G=u+G|0,b=u>>>0>G>>>0?l+1|0:l,Y=_-(u=-2097152&K)|0,_=S-((u>>>0>_>>>0)+L|0)|0,u=eg(I,0,-683901,-1),l=p,F=u,l=(u=AA>>>7&2097151)>>>0>(F=F+u|0)>>>0?l+1|0:l,G=(u=eg(g,0,136657,0))+F|0,F=p+l|0,F=u>>>0>G>>>0?F+1|0:F,l=eg(B,0,-997805,-1),u=p+F|0,u=l>>>0>(G=l+G|0)>>>0?u+1|0:u,F=eg(Q,0,654183,0),l=p+u|0,l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,F=eg(i,0,666643,0),u=p+l|0,u=F>>>0>(G=F+G|0)>>>0?u+1|0:u,F=eg(E,0,470296,0),l=p+u|0,u=l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,l=H>>21,G=(H=(2097151&H)<<11|f>>>21)+(F=G)|0,F=u+l|0,L=F=G>>>0>>0?F+1|0:F,S=(u=G)- -1048576|0,v=F=F-((u>>>0<4293918720)-1|0)|0,u=(l=F>>21)+_|0,V=H=(F=(2097151&F)<<11|S>>>21)+Y|0,R=u=F>>>0>H>>>0?u+1|0:u,u=eg(H,u,-683901,-1),l=p+b|0,b=F=u+m|0,H=u>>>0>F>>>0?l+1|0:l,u=eg(o,X,666643,0),F=p,l=u,F=(u=gA>>>4&2097151)>>>0>(l=l+u|0)>>>0?F+1|0:F,_=(u=l)+(l=eg(a,e,470296,0))|0,u=p+F|0,u=l>>>0>_>>>0?u+1|0:u,F=eg(t,q,654183,0),l=p+u|0,l=F>>>0>(_=F+_|0)>>>0?l+1|0:l,u=eg(T,W,-997805,-1),l=p+l|0,l=u>>>0>(F=u+_|0)>>>0?l+1|0:l,_=(u=F)+(F=eg(V,R,136657,0))|0,u=p+l|0,m=u=F>>>0>_>>>0?u+1|0:u,M=(u=_)- -1048576|0,Y=F=m-((u>>>0<4293918720)-1|0)|0,u=(l=F>>21)+H|0,F=u=(F=(2097151&F)<<11|M>>>21)>>>0>(H=b=F+b|0)>>>0?u+1|0:u,d=(u=H)- -1048576|0,u=(l=(b=U=F-((u>>>0<4293918720)-1|0)|0)>>21)+N|0,$=K=(U=(2097151&b)<<11|d>>>21)+x|0,U=U>>>0>K>>>0?u+1|0:u,u=G-(l=-2097152&S)|0,G=L-((l>>>0>G>>>0)+v|0)|0,v=u,u=(u=k>>21)+G|0,S=u=(l=(2097151&k)<<11|c>>>21)>>>0>(G=k=v+l|0)>>>0?u+1|0:u,K=(u=G)- -1048576|0,L=k=S-((u>>>0<4293918720)-1|0)|0,N=u=k>>21,u=eg(X=(2097151&k)<<11|K>>>21,u,-683901,-1),l=p+F|0,l=u>>>0>(k=u+H|0)>>>0?l+1|0:l,j=(F=k)-(u=-2097152&d)|0,x=l-((u>>>0>F>>>0)+b|0)|0,l=eg(X,N,136657,0)+_|0,u=m+p|0,u=l>>>0<_>>>0?u+1|0:u,AA=(F=l)-(l=-2097152&M)|0,M=u-((l>>>0>F>>>0)+Y|0)|0,u=eg(a,e,666643,0),l=p,F=u,l=(u=IA>>>7&2097151)>>>0>(F=F+u|0)>>>0?l+1|0:l,k=(u=eg(t,q,470296,0))+F|0,F=p+l|0,F=u>>>0>k>>>0?F+1|0:F,l=eg(T,W,654183,0),u=p+F|0,u=l>>>0>(k=l+k|0)>>>0?u+1|0:u,l=eg(V,R,-997805,-1),u=p+u|0,Y=F=l+k|0,F=l>>>0>F>>>0?u+1|0:u,u=2097151&((3&h)<<30|w>>>2),k=eg(t,q,666643,0)+u|0,l=p,l=u>>>0>k>>>0?l+1|0:l,u=eg(T,W,470296,0),l=p+l|0,l=u>>>0>(k=u+k|0)>>>0?l+1|0:l,H=(u=k)+(k=eg(V,R,654183,0))|0,u=p+l|0,b=u=k>>>0>H>>>0?u+1|0:u,d=(u=k=H)- -1048576|0,u=(l=(_=H=b-((u>>>0<4293918720)-1|0)|0)>>21)+F|0,m=Y=(H=(2097151&_)<<11|d>>>21)+Y|0,F=u=H>>>0>Y>>>0?u+1|0:u,Y=(u=Y)- -1048576|0,u=(l=(H=v=F-((u>>>0<4293918720)-1|0)|0)>>21)+M|0,IA=q=(v=(2097151&H)<<11|Y>>>21)+AA|0,v=v>>>0>q>>>0?u+1|0:u,u=eg(X,N,-997805,-1),F=p+F|0,F=u>>>0>(l=u+m|0)>>>0?F+1|0:F,gA=l-(u=-2097152&Y)|0,BA=F-((u>>>0>l>>>0)+H|0)|0,u=eg(X,N,654183,0)+k|0,l=b+p|0,l=u>>>0>>0?l+1|0:l,AA=(F=u)-(u=-2097152&d)|0,q=l-((u>>>0>F>>>0)+_|0)|0,u=eg(T,W,666643,0),F=p,l=u,F=(u=s>>>5&2097151)>>>0>(l=l+u|0)>>>0?F+1|0:F,k=(u=l)+(l=eg(V,R,470296,0))|0,u=p+F|0,_=k,F=l>>>0>k>>>0?u+1|0:u,l=2097151&y,k=eg(V,R,666643,0)+l|0,u=p,H=k,Y=k=(m=u=l>>>0>k>>>0?u+1|0:u)-(((u=k)>>>0<4293918720)-1|0)|0,F=(l=k>>21)+F|0,b=F=(u=(2097151&k)<<11|(M=u- -1048576|0)>>>21)>>>0>(k=u+_|0)>>>0?F+1|0:F,d=(u=k)- -1048576|0,_=F=F-((u>>>0<4293918720)-1|0)|0,u=(l=F>>21)+q|0,F=u=(F=(2097151&F)<<11|d>>>21)>>>0>(R=F+AA|0)>>>0?u+1|0:u,u=eg(X,N,470296,0)+k|0,l=b+p|0,_=(l=u>>>0>>0?l+1|0:l)-(((k=-2097152&d)>>>0>(b=u)>>>0)+_|0)|0,b=u=u-k|0,k=(l=eg(X,N,666643,0))+(H-(u=-2097152&M)|0)|0,u=p+(m-((u>>>0>H>>>0)+Y|0)|0)|0,H=k,l=(l=(u=l>>>0>k>>>0?u+1|0:u)>>21)+_|0,W=k=b+(u=(2097151&u)<<11|k>>>21)|0,F=(u=(l=u>>>0>k>>>0?l+1|0:l)>>21)+F|0,_=k=(l=(2097151&l)<<11|k>>>21)+R|0,l=(F=l>>>0>(u=k)>>>0?F+1|0:F)>>21,F=(2097151&F)<<11|u>>>21,u=l+BA|0,Y=k=F+gA|0,F=(u=F>>>0>(l=k)>>>0?u+1|0:u)>>21,u=(2097151&u)<<11|l>>>21,l=F+v|0,v=k=u+IA|0,u=(u=(l=u>>>0>(F=k)>>>0?l+1|0:l)>>21)+x|0,R=F=(l=(2097151&l)<<11|F>>>21)+j|0,l=(l=(u=l>>>0>F>>>0?u+1|0:u)>>21)+U|0,N=F=(u=(2097151&u)<<11|F>>>21)+$|0,u=(l=u>>>0>F>>>0?l+1|0:l)>>21,l=(2097151&l)<<11|F>>>21,F=u+O|0,M=k=l+z|0,l=(F=l>>>0>(u=k)>>>0?F+1|0:F)>>21,F=(2097151&F)<<11|u>>>21,u=l+J|0,d=k=F+Z|0,F=(u=F>>>0>(l=k)>>>0?u+1|0:u)>>21,u=(2097151&u)<<11|l>>>21,l=F+EA|0,J=k=u+CA|0,u=(u=(l=u>>>0>(F=k)>>>0?l+1|0:l)>>21)+P|0,U=F=(l=(2097151&l)<<11|F>>>21)+QA|0,l=(u=l>>>0>F>>>0?u+1|0:u)>>21,k=(2097151&u)<<11|F>>>21,u=G-(F=-2097152&K)|0,F=(S-((F>>>0>G>>>0)+L|0)|0)+l|0,L=k=k+u|0,P=(2097151&(F=u>>>0>(l=k)>>>0?F+1|0:F))<<11|l>>>21,m=u=F>>21,l=2097151&H,F=eg(P,u,666643,0)+l|0,u=p,b=F,k=u=l>>>0>F>>>0?u+1|0:u,C[0|A]=F,C[A+1|0]=(255&u)<<24|F>>>8,u=2097151&W,F=eg(P,m,470296,0)+u|0,l=p,l=u>>>0>F>>>0?l+1|0:l,H=F,G=(2097151&(F=k))<<11|b>>>21,F=(u=F>>21)+l|0,F=G>>>0>(S=H+G|0)>>>0?F+1|0:F,G=S,C[A+4|0]=(2047&F)<<21|G>>>11,u=l=F,F=G,C[A+3|0]=(7&u)<<29|F>>>3,F=2097151&_,_=eg(P,m,654183,0)+F|0,u=p,u=F>>>0>_>>>0?u+1|0:u,F=_,_=(2097151&l)<<11|G>>>21,l=(l>>21)+u|0,l=_>>>0>(S=F+_|0)>>>0?l+1|0:l,_=S,u=l,C[A+6|0]=(63&u)<<26|_>>>6,H=0,F=31&((65535&k)<<16|b>>>16),l=b=2097151&G,C[A+2|0]=F|l<<5,F=2097151&Y,G=eg(P,m,-997805,-1)+F|0,l=p,F=l=F>>>0>G>>>0?l+1|0:l,F=(l=u>>21)+F|0,Y=G=(u=(2097151&u)<<11|_>>>21)+G|0,F=u>>>0>G>>>0?F+1|0:F,C[A+9|0]=(511&F)<<23|G>>>9,u=l=F,F=G,C[A+8|0]=(1&u)<<31|F>>>1,G=0,F=_&=2097151,C[A+5|0]=(524287&H)<<13|b>>>19|F<<2,F=2097151&v,H=eg(P,m,136657,0)+F|0,u=p,u=(u=F>>>0>H>>>0?u+1|0:u)+(F=l>>21)|0,b=H=(l=(2097151&l)<<11|Y>>>21)+H|0,u=l>>>0>H>>>0?u+1|0:u,l=H,C[A+12|0]=(4095&u)<<20|l>>>12,F=u,C[A+11|0]=(15&u)<<28|l>>>4,H=0,l=v=2097151&Y,C[A+7|0]=(16383&G)<<18|_>>>14|l<<7,u=2097151&R,G=eg(P,m,-683901,-1)+u|0,l=p,l=u>>>0>G>>>0?l+1|0:l,l=(u=F>>21)+l|0,_=G=(F=(2097151&F)<<11|b>>>21)+G|0,u=l=F>>>0>G>>>0?l+1|0:l,C[A+14|0]=(127&u)<<25|G>>>7,G=0,F=Y=2097151&b,C[A+10|0]=(131071&H)<<15|v>>>17|F<<4,l=u>>21,F=(u=(2097151&u)<<11|_>>>21)>>>0>(b=u+(2097151&N)|0)>>>0?l+1|0:l,C[A+17|0]=(1023&F)<<22|b>>>10,u=F,F=b,C[A+16|0]=(3&u)<<30|F>>>2,F=m=2097151&_,C[A+13|0]=(1048575&G)<<12|Y>>>20|F<<1,F=(2097151&u)<<11|b>>>21,u>>=21,u=F>>>0>(_=F+(2097151&M)|0)>>>0?u+1|0:u,l=_,C[A+20|0]=(8191&u)<<19|l>>>13,C[A+19|0]=(31&u)<<27|l>>>5,l=Y=2097151&b,C[A+15|0]=(32767&H)<<17|m>>>15|l<<6,k=(2097151&u)<<11|_>>>21,u=l=u>>21,k=u=k>>>0>(m=k+(2097151&d)|0)>>>0?u+1|0:u,C[A+21|0]=m,u=_,C[A+18|0]=(262143&G)<<14|Y>>>18|u<<3,u=k,C[A+22|0]=(255&u)<<24|m>>>8,F=u,u>>=21,F=(_=(H=(2097151&F)<<11|m>>>21)+(2097151&J)|0)>>>0>>0?u+1|0:u,C[(l=A)+25|0]=(2047&F)<<21|_>>>11,u=F,F=_,C[l+24|0]=(7&u)<<29|F>>>3,F=l,H=(2097151&u)<<11|_>>>21,u>>=21,l=u=H>>>0>(G=b=H+(2097151&U)|0)>>>0?u+1|0:u,C[F+27|0]=(63&u)<<26|G>>>6,H=0,u=b=2097151&_,C[F+23|0]=31&((65535&k)<<16|m>>>16)|u<<5,l=(u=l)>>21,l=(u=(2097151&u)<<11|G>>>21)>>>0>(k=u+(2097151&L)|0)>>>0?l+1|0:l,F=k,C[A+31|0]=(131071&l)<<15|F>>>17,u=l,C[A+30|0]=(511&u)<<23|F>>>9,C[A+29|0]=(1&u)<<31|F>>>1,l=0,G&=2097151,C[A+26|0]=(524287&H)<<13|b>>>19|G<<2,C[A+28|0]=(16383&l)<<18|G>>>14|F<<7}function k(A){var I,g=0,B=0,Q=0,C=0,E=0,r=0,o=0,t=0,f=0,c=0,y=0,s=0,w=0;h=I=h-16|0;A:{I:{g:{B:{Q:{C:{E:{i:{n:{a:{r:{o:{if((A|=0)>>>0<=244){if(3&(g=(E=i[8961])>>>(B=(t=A>>>0<11?16:A+11&-8)>>>3|0)|0)){A=(C=i[35892+(g=(Q=B+(1&(-1^g))|0)<<3)>>2])+8|0,(0|(B=i[C+8>>2]))!=(0|(g=g+35884|0))?(i[B+12>>2]=g,i[g+8>>2]=B):(s=35844,w=vI(-2,Q)&E,i[s>>2]=w),g=Q<<3,i[C+4>>2]=3|g,i[4+(g=g+C|0)>>2]=1|i[g+4>>2];break A}if((c=i[8963])>>>0>=t>>>0)break o;if(g){B=A=(g=(0-(A=(0-(A=2<>>12&16,B|=A=(g=g>>>A|0)>>>5&8,B|=A=(g=g>>>A|0)>>>2&4,r=i[35892+(A=(B=((B|=A=(g=g>>>A|0)>>>1&2)|(A=(g=g>>>A|0)>>>1&1))+(g>>>A|0)|0)<<3)>>2],(0|(g=i[r+8>>2]))!=(0|(A=A+35884|0))?(i[g+12>>2]=A,i[A+8>>2]=g):(E=vI(-2,B)&E,i[8961]=E),A=r+8|0,i[r+4>>2]=3|t,C=(g=B<<3)-t|0,i[4+(Q=r+t|0)>>2]=1|C,i[g+r>>2]=C,c&&(B=35884+((g=c>>>3|0)<<3)|0,r=i[8966],(g=1<>2]:(i[8961]=g|E,g=B),i[B+8>>2]=r,i[g+12>>2]=r,i[r+12>>2]=B,i[r+8>>2]=g),i[8966]=Q,i[8963]=C;break A}if(!(o=i[8962]))break o;for(B=A=(g=(o&0-o)-1|0)>>>12&16,B|=A=(g=g>>>A|0)>>>5&8,B|=A=(g=g>>>A|0)>>>2&4,g=i[36148+(((B|=A=(g=g>>>A|0)>>>1&2)|(A=(g=g>>>A|0)>>>1&1))+(g>>>A|0)<<2)>>2],C=(-8&i[g+4>>2])-t|0,B=g;(A=i[B+16>>2])||(A=i[B+20>>2]);)C=(Q=(B=(-8&i[A+4>>2])-t|0)>>>0>>0)?B:C,g=Q?A:g,B=A;if((f=g+t|0)>>>0<=g>>>0)break r;if(y=i[g+24>>2],(0|(Q=i[g+12>>2]))!=(0|g)){A=i[g+8>>2],i[A+12>>2]=Q,i[Q+8>>2]=A;break I}if(!(A=i[(B=g+20|0)>>2])){if(!(A=i[g+16>>2]))break a;B=g+16|0}for(;r=B,Q=A,(A=i[(B=A+20|0)>>2])||(B=Q+16|0,A=i[Q+16>>2]););i[r>>2]=0;break I}if(t=-1,!(A>>>0>4294967231)&&(t=-8&(A=A+11|0),f=i[8962])){E=31,C=0-t|0,t>>>0<=16777215&&(A=A>>>8|0,A<<=r=A+1048320>>>16&8,E=28+((A=((A<<=B=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|B|r)|0)<<1|t>>>A+21&1)|0);e:{t:{if(B=i[36148+(E<<2)>>2])for(A=0,g=t<<(31==(0|E)?0:25-(E>>>1|0)|0);;){if(!((r=(-8&i[B+4>>2])-t|0)>>>0>=C>>>0||(Q=B,C=r))){C=0,A=B;break t}if(r=i[B+20>>2],B=i[16+((g>>>29&4)+B|0)>>2],A=r?(0|r)==(0|B)?A:r:A,g<<=1,!B)break}else A=0;if(!(A|Q)){if(!(A=(0-(A=2<>>12&16,B|=A=(g=g>>>A|0)>>>5&8,B|=A=(g=g>>>A|0)>>>2&4,A=i[36148+(((B|=A=(g=g>>>A|0)>>>1&2)|(A=(g=g>>>A|0)>>>1&1))+(g>>>A|0)<<2)>>2]}if(!A)break e}for(;C=(B=(g=(-8&i[A+4>>2])-t|0)>>>0>>0)?g:C,Q=B?A:Q,A=(g=i[A+16>>2])||i[A+20>>2];);}if(!(!Q|i[8963]-t>>>0<=C>>>0)){if((o=Q+t|0)>>>0<=Q>>>0)break r;if(E=i[Q+24>>2],(0|Q)!=(0|(g=i[Q+12>>2]))){A=i[Q+8>>2],i[A+12>>2]=g,i[g+8>>2]=A;break g}if(!(A=i[(B=Q+20|0)>>2])){if(!(A=i[Q+16>>2]))break n;B=Q+16|0}for(;r=B,g=A,(A=i[(B=A+20|0)>>2])||(B=g+16|0,A=i[g+16>>2]););i[r>>2]=0;break g}}}if((B=i[8963])>>>0>=t>>>0){Q=i[8966],(g=B-t|0)>>>0>=16?(i[8963]=g,A=Q+t|0,i[8966]=A,i[A+4>>2]=1|g,i[B+Q>>2]=g,i[Q+4>>2]=3|t):(i[8966]=0,i[8963]=0,i[Q+4>>2]=3|B,i[4+(A=B+Q|0)>>2]=1|i[A+4>>2]),A=Q+8|0;break A}if((o=i[8964])>>>0>t>>>0){g=o-t|0,i[8964]=g,A=(B=i[8967])+t|0,i[8967]=A,i[A+4>>2]=1|g,i[B+4>>2]=3|t,A=B+8|0;break A}if(A=0,g=f=t+47|0,i[9079]?B=i[9081]:(i[9082]=-1,i[9083]=-1,i[9080]=4096,i[9081]=4096,i[9079]=I+12&-16^1431655768,i[9084]=0,i[9072]=0,B=4096),(B=(r=g+B|0)&(C=0-B|0))>>>0<=t>>>0)break A;if((Q=i[9071])&&Q>>>0<(E=(g=i[9069])+B|0)>>>0|g>>>0>=E>>>0)break A;if(4&n[36288])break C;o:{e:{if(Q=i[8967])for(A=36292;;){if(Q>>>0<(g=i[A>>2])+i[A+4>>2]>>>0&&g>>>0<=Q>>>0)break e;if(!(A=i[A+8>>2]))break}if(-1==(0|(g=II(0))))break E;if(E=B,(A=(Q=i[9080])-1|0)&g&&(E=(B-g|0)+(A+g&0-Q)|0),E>>>0<=t>>>0|E>>>0>2147483646)break E;if((Q=i[9071])&&Q>>>0<(C=(A=i[9069])+E|0)>>>0|A>>>0>=C>>>0)break E;if((0|g)!=(0|(A=II(E))))break o;break Q}if((E=C&r-o)>>>0>2147483646)break E;if((0|(g=II(E)))==(i[A>>2]+i[A+4>>2]|0))break i;A=g}if(!(-1==(0|A)|t+48>>>0<=E>>>0)){if((g=(g=i[9081])+(f-E|0)&0-g)>>>0>2147483646){g=A;break Q}if(-1!=(0|II(g))){E=g+E|0,g=A;break Q}II(0-E|0);break E}if(g=A,-1!=(0|A))break Q;break E}e()}Q=0;break I}g=0;break g}if(-1!=(0|g))break Q}i[9072]=4|i[9072]}if(B>>>0>2147483646)break B;if((g=II(B))>>>0>=(A=II(0))>>>0|-1==(0|g)|-1==(0|A))break B;if((E=A-g|0)>>>0<=t+40>>>0)break B}A=i[9069]+E|0,i[9069]=A,A>>>0>a[9070]&&(i[9070]=A);Q:{C:{E:{if(r=i[8967]){for(A=36292;;){if(((Q=i[A>>2])+(B=i[A+4>>2])|0)==(0|g))break E;if(!(A=i[A+8>>2]))break}break C}for((A=i[8965])>>>0<=g>>>0&&A||(i[8965]=g),A=0,i[9074]=E,i[9073]=g,i[8969]=-1,i[8970]=i[9079],i[9076]=0;B=35884+(Q=A<<3)|0,i[Q+35892>>2]=B,i[Q+35896>>2]=B,32!=(0|(A=A+1|0)););B=(Q=E-40|0)-(A=g+8&7?-8-g&7:0)|0,i[8964]=B,A=A+g|0,i[8967]=A,i[A+4>>2]=1|B,i[4+(g+Q|0)>>2]=40,i[8968]=i[9083];break Q}if(!(8&n[A+12|0]|g>>>0<=r>>>0|Q>>>0>r>>>0)){i[A+4>>2]=B+E,B=(A=r+8&7?-8-r&7:0)+r|0,i[8967]=B,A=(g=i[8964]+E|0)-A|0,i[8964]=A,i[B+4>>2]=1|A,i[4+(g+r|0)>>2]=40,i[8968]=i[9083];break Q}}(Q=i[8965])>>>0>g>>>0&&(i[8965]=g,Q=0),B=g+E|0,A=36292;C:{E:{i:{n:{a:{r:{for(;;){if((0|B)!=i[A>>2]){if(A=i[A+8>>2])continue;break r}break}if(!(8&n[A+12|0]))break a}for(A=36292;;){if((B=i[A>>2])>>>0<=r>>>0&&(C=B+i[A+4>>2]|0)>>>0>r>>>0)break n;A=i[A+8>>2]}}if(i[A>>2]=g,i[A+4>>2]=i[A+4>>2]+E,i[4+(f=(g+8&7?-8-g&7:0)+g|0)>>2]=3|t,B=((E=B+(B+8&7?-8-B&7:0)|0)-f|0)-t|0,o=t+f|0,(0|E)==(0|r)){i[8967]=o,A=i[8964]+B|0,i[8964]=A,i[o+4>>2]=1|A;break E}if(i[8966]==(0|E)){i[8966]=o,A=i[8963]+B|0,i[8963]=A,i[o+4>>2]=1|A,i[A+o>>2]=A;break E}if(1==(3&(A=i[E+4>>2]))){r=-8&A;a:if(A>>>0<=255){if(Q=i[E+8>>2],A=A>>>3|0,(0|(g=i[E+12>>2]))==(0|Q)){s=35844,w=i[8961]&vI(-2,A),i[s>>2]=w;break a}i[Q+12>>2]=g,i[g+8>>2]=Q}else{if(t=i[E+24>>2],(0|E)==(0|(g=i[E+12>>2])))if((C=i[(A=E+20|0)>>2])||(C=i[(A=E+16|0)>>2])){for(;Q=A,(C=i[(A=(g=C)+20|0)>>2])||(A=g+16|0,C=i[g+16>>2]););i[Q>>2]=0}else g=0;else A=i[E+8>>2],i[A+12>>2]=g,i[g+8>>2]=A;if(t){Q=i[E+28>>2];r:{if(i[(A=36148+(Q<<2)|0)>>2]==(0|E)){if(i[A>>2]=g,g)break r;s=35848,w=i[8962]&vI(-2,Q),i[s>>2]=w;break a}if(i[t+(i[t+16>>2]==(0|E)?16:20)>>2]=g,!g)break a}i[g+24>>2]=t,(A=i[E+16>>2])&&(i[g+16>>2]=A,i[A+24>>2]=g),(A=i[E+20>>2])&&(i[g+20>>2]=A,i[A+24>>2]=g)}}E=E+r|0,B=B+r|0}if(i[E+4>>2]=-2&i[E+4>>2],i[o+4>>2]=1|B,i[B+o>>2]=B,B>>>0<=255){g=35884+((A=B>>>3|0)<<3)|0,(B=i[8961])&(A=1<>2]:(i[8961]=A|B,A=g),i[g+8>>2]=o,i[A+12>>2]=o,i[o+12>>2]=g,i[o+8>>2]=A;break E}if(A=31,B>>>0<=16777215&&(A=B>>>8|0,A<<=C=A+1048320>>>16&8,A=28+((A=((A<<=Q=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|Q|C)|0)<<1|B>>>A+21&1)|0),i[o+28>>2]=A,i[o+16>>2]=0,i[o+20>>2]=0,C=36148+(A<<2)|0,(Q=i[8962])&(g=1<>>1|0)|0),g=i[C>>2];;){if(Q=g,(-8&i[g+4>>2])==(0|B))break i;if(g=A>>>29|0,A<<=1,!(g=i[16+(C=Q+(4&g)|0)>>2]))break}i[C+16>>2]=o,i[o+24>>2]=Q}else i[8962]=g|Q,i[C>>2]=o,i[o+24>>2]=C;i[o+12>>2]=o,i[o+8>>2]=o;break E}for(B=(Q=E-40|0)-(A=g+8&7?-8-g&7:0)|0,i[8964]=B,A=A+g|0,i[8967]=A,i[A+4>>2]=1|B,i[4+(g+Q|0)>>2]=40,i[8968]=i[9083],i[(B=(A=(C+(C-39&7?39-C&7:0)|0)-47|0)>>>0>>0?r:A)+4>>2]=27,A=i[9076],i[B+16>>2]=i[9075],i[B+20>>2]=A,A=i[9074],i[B+8>>2]=i[9073],i[B+12>>2]=A,i[9075]=B+8,i[9074]=E,i[9073]=g,i[9076]=0,A=B+24|0;i[A+4>>2]=7,g=A+8|0,A=A+4|0,g>>>0>>0;);if((0|B)==(0|r))break Q;if(i[B+4>>2]=-2&i[B+4>>2],C=B-r|0,i[r+4>>2]=1|C,i[B>>2]=C,C>>>0<=255){g=35884+((A=C>>>3|0)<<3)|0,(B=i[8961])&(A=1<>2]:(i[8961]=A|B,A=g),i[g+8>>2]=r,i[A+12>>2]=r,i[r+12>>2]=g,i[r+8>>2]=A;break Q}if(A=31,i[r+16>>2]=0,i[r+20>>2]=0,C>>>0<=16777215&&(A=C>>>8|0,A<<=Q=A+1048320>>>16&8,A=28+((A=((A<<=B=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|B|Q)|0)<<1|C>>>A+21&1)|0),i[r+28>>2]=A,Q=36148+(A<<2)|0,(B=i[8962])&(g=1<>>1|0)|0),g=i[Q>>2];;){if(B=g,(0|C)==(-8&i[g+4>>2]))break C;if(g=A>>>29|0,A<<=1,!(g=i[16+(Q=B+(4&g)|0)>>2]))break}i[Q+16>>2]=r,i[r+24>>2]=B}else i[8962]=g|B,i[Q>>2]=r,i[r+24>>2]=Q;i[r+12>>2]=r,i[r+8>>2]=r;break Q}A=i[Q+8>>2],i[A+12>>2]=o,i[Q+8>>2]=o,i[o+24>>2]=0,i[o+12>>2]=Q,i[o+8>>2]=A}A=f+8|0;break A}A=i[B+8>>2],i[A+12>>2]=r,i[B+8>>2]=r,i[r+24>>2]=0,i[r+12>>2]=B,i[r+8>>2]=A}if(!((A=i[8964])>>>0<=t>>>0)){g=A-t|0,i[8964]=g,A=(B=i[8967])+t|0,i[8967]=A,i[A+4>>2]=1|g,i[B+4>>2]=3|t,A=B+8|0;break A}}i[8960]=48,A=0;break A}g:if(E){B=i[Q+28>>2];B:{if(i[(A=36148+(B<<2)|0)>>2]==(0|Q)){if(i[A>>2]=g,g)break B;f=vI(-2,B)&f,i[8962]=f;break g}if(i[E+(i[E+16>>2]==(0|Q)?16:20)>>2]=g,!g)break g}i[g+24>>2]=E,(A=i[Q+16>>2])&&(i[g+16>>2]=A,i[A+24>>2]=g),(A=i[Q+20>>2])&&(i[g+20>>2]=A,i[A+24>>2]=g)}g:if(C>>>0<=15)A=C+t|0,i[Q+4>>2]=3|A,i[4+(A=A+Q|0)>>2]=1|i[A+4>>2];else if(i[Q+4>>2]=3|t,i[o+4>>2]=1|C,i[C+o>>2]=C,C>>>0<=255)g=35884+((A=C>>>3|0)<<3)|0,(B=i[8961])&(A=1<>2]:(i[8961]=A|B,A=g),i[g+8>>2]=o,i[A+12>>2]=o,i[o+12>>2]=g,i[o+8>>2]=A;else{A=31,C>>>0<=16777215&&(A=C>>>8|0,A<<=r=A+1048320>>>16&8,A=28+((A=((A<<=B=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|B|r)|0)<<1|C>>>A+21&1)|0),i[o+28>>2]=A,i[o+16>>2]=0,i[o+20>>2]=0,B=36148+(A<<2)|0;B:{if((g=1<>>1|0)|0),t=i[B>>2];;){if((-8&i[(g=t)+4>>2])==(0|C))break B;if(B=A>>>29|0,A<<=1,!(t=i[16+(B=g+(4&B)|0)>>2]))break}i[B+16>>2]=o,i[o+24>>2]=g}else i[8962]=g|f,i[B>>2]=o,i[o+24>>2]=B;i[o+12>>2]=o,i[o+8>>2]=o;break g}A=i[g+8>>2],i[A+12>>2]=o,i[g+8>>2]=o,i[o+24>>2]=0,i[o+12>>2]=g,i[o+8>>2]=A}A=Q+8|0;break A}I:if(y){B=i[g+28>>2];g:{if(i[(A=36148+(B<<2)|0)>>2]==(0|g)){if(i[A>>2]=Q,Q)break g;s=35848,w=vI(-2,B)&o,i[s>>2]=w;break I}if(i[(i[y+16>>2]==(0|g)?16:20)+y>>2]=Q,!Q)break I}i[Q+24>>2]=y,(A=i[g+16>>2])&&(i[Q+16>>2]=A,i[A+24>>2]=Q),(A=i[g+20>>2])&&(i[Q+20>>2]=A,i[A+24>>2]=Q)}C>>>0<=15?(A=C+t|0,i[g+4>>2]=3|A,i[4+(A=A+g|0)>>2]=1|i[A+4>>2]):(i[g+4>>2]=3|t,i[f+4>>2]=1|C,i[C+f>>2]=C,c&&(B=35884+((A=c>>>3|0)<<3)|0,Q=i[8966],(A=1<>2]:(i[8961]=A|E,A=B),i[B+8>>2]=Q,i[A+12>>2]=Q,i[Q+12>>2]=B,i[Q+8>>2]=A),i[8966]=f,i[8963]=C),A=g+8|0}return h=I+16|0,0|A}function _(A,I,g){var B,Q,C,E,n,a,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L,K,q,X,V,W,T,j,Z,O,z,$,AA,IA,gA,BA,QA,CA,EA=0,iA=0,nA=0,aA=0,rA=0,oA=0,eA=0,tA=0,fA=0,cA=0,yA=0,sA=0,wA=0,hA=0,DA=0,uA=0,pA=0,lA=0,FA=0,GA=0,kA=0,_A=0,HA=0,YA=0,bA=0;eA=A,B=EA=HA=i[g+4>>2],t=EA>>31,x=EA=(DA=i[I+20>>2])<<1,EA=eg(B,t,EA,H=EA>>31),nA=p,iA=EA,Q=EA=i[g>>2],C=EA>>31,f=EA=i[I+24>>2],rA=eg(Q,C,EA,E=EA>>31),EA=p+nA|0,EA=(iA=iA+rA|0)>>>0>>0?EA+1|0:EA,nA=iA,L=iA=oA=i[g+8>>2],u=iA>>31,c=iA=i[I+16>>2],iA=nA+(rA=eg(oA,u,iA,n=iA>>31))|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,K=EA=pA=i[g+12>>2],l=EA>>31,q=EA=(sA=i[I+12>>2])<<1,EA=(rA=eg(pA,l,EA,Y=EA>>31))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=EA,O=EA=uA=i[g+16>>2],k=EA>>31,y=EA=i[I+8>>2],rA=eg(uA,k,EA,a=EA>>31),EA=p+iA|0,EA=(nA=nA+rA|0)>>>0>>0?EA+1|0:EA,aA=nA,z=iA=cA=i[g+20>>2],b=iA>>31,X=iA=(fA=i[I+4>>2])<<1,nA=eg(cA,b,iA,m=iA>>31),EA=p+EA|0,EA=(iA=aA+nA|0)>>>0>>0?EA+1|0:EA,nA=iA,$=iA=yA=i[g+24>>2],V=iA>>31,s=iA=i[I>>2],rA=eg(yA,V,iA,o=iA>>31),iA=p+EA|0,iA=(nA=nA+rA|0)>>>0>>0?iA+1|0:iA,lA=i[g+28>>2],F=EA=r(lA,19),G=EA>>31,W=EA=(wA=i[I+36>>2])<<1,EA=(rA=eg(F,G,EA,v=EA>>31))+nA|0,nA=p+iA|0,nA=EA>>>0>>0?nA+1|0:nA,iA=EA,hA=i[g+32>>2],FA=EA=r(hA,19),GA=EA>>31,w=EA=i[I+32>>2],rA=eg(FA,GA,EA,e=EA>>31),EA=p+nA|0,EA=(iA=iA+rA|0)>>>0>>0?EA+1|0:EA,nA=iA,AA=i[g+36>>2],h=g=r(AA,19),D=g>>31,T=g=(I=i[I+28>>2])<<1,iA=eg(h,D,g,U=g>>31),EA=p+EA|0,tA=g=nA+iA|0,g=g>>>0>>0?EA+1|0:EA,EA=eg(c,n,B,t),iA=p,DA=eg(Q,C,rA=DA,S=rA>>31),nA=p+iA|0,nA=(EA=DA+EA|0)>>>0>>0?nA+1|0:nA,DA=sA,sA=eg(oA,u,sA,N=sA>>31),iA=p+nA|0,iA=(EA=sA+EA|0)>>>0>>0?iA+1|0:iA,nA=(sA=eg(y,a,pA,l))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,sA=fA,nA=eg(uA,k,fA,M=fA>>31),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(s,o,cA,b),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=iA,d=iA=r(yA,19),iA=nA+(wA=eg(iA,_=iA>>31,fA=wA,P=fA>>31))|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,EA=(wA=eg(w,e,F,G))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,wA=I,I=(nA=eg(FA,GA,I,R=I>>31))+EA|0,EA=p+iA|0,EA=I>>>0>>0?EA+1|0:EA,iA=eg(h,D,f,E),EA=p+EA|0,_A=I=iA+I|0,I=I>>>0>>0?EA+1|0:EA,EA=eg(B,t,q,Y),nA=p,iA=(yA=eg(Q,C,c,n))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,yA=eg(y,a,oA,u),nA=p+EA|0,nA=(iA=yA+iA|0)>>>0>>0?nA+1|0:nA,EA=(yA=eg(pA,l,X,m))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(yA=eg(s,o,uA,k))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,aA=nA,j=iA=r(cA,19),nA=eg(iA,J=iA>>31,W,v),EA=p+EA|0,EA=(iA=aA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(w,e,d,_),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,cA=eg(F,G,T,U),nA=p+EA|0,nA=(iA=cA+iA|0)>>>0>>0?nA+1|0:nA,EA=(cA=eg(FA,GA,f,E))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(cA=eg(h,D,x,H))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,cA=nA,gA=EA,yA=iA=nA+33554432|0,BA=EA=iA>>>0<33554432?EA+1|0:EA,nA=_A,_A=(67108863&EA)<<6|iA>>>26,EA=(EA>>26)+I|0,EA=(nA=nA+_A|0)>>>0<_A>>>0?EA+1|0:EA,QA=I=(_A=nA)+16777216|0,EA=g+(iA=(nA=I>>>0<16777216?EA+1|0:EA)>>25)|0,EA=(I=(nA=(33554431&nA)<<7|I>>>25)+tA|0)>>>0>>0?EA+1|0:EA,YA=I=(g=I)+33554432|0,I=EA=I>>>0<33554432?EA+1|0:EA,EA=-67108864&YA,i[eA+24>>2]=g-EA,tA=eA,g=eg(B,t,X,m),EA=p,iA=eg(Q,C,y,a),nA=p+EA|0,nA=(g=iA+g|0)>>>0>>0?nA+1|0:nA,iA=eg(s,o,oA,u),EA=p+nA|0,EA=(g=iA+g|0)>>>0>>0?EA+1|0:EA,nA=g,eA=g=r(pA,19),iA=eg(g,pA=g>>31,W,v),EA=p+EA|0,EA=(g=nA+iA|0)>>>0>>0?EA+1|0:EA,iA=g,IA=g=r(uA,19),g=iA+(nA=eg(w,e,g,Z=g>>31))|0,iA=p+EA|0,iA=g>>>0>>0?iA+1|0:iA,nA=eg(T,U,j,J),EA=p+iA|0,EA=(g=nA+g|0)>>>0>>0?EA+1|0:EA,iA=eg(f,E,d,_),nA=p+EA|0,nA=(g=iA+g|0)>>>0>>0?nA+1|0:nA,iA=eg(F,G,x,H),EA=p+nA|0,EA=(g=iA+g|0)>>>0>>0?EA+1|0:EA,iA=eg(FA,GA,c,n),EA=p+EA|0,EA=(g=iA+g|0)>>>0>>0?EA+1|0:EA,nA=eg(h,D,q,Y),iA=p+EA|0,aA=g=nA+g|0,g=g>>>0>>0?iA+1|0:iA,EA=eg(s,o,B,t),nA=p,iA=(uA=eg(Q,C,sA,M))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=iA,uA=iA=r(oA,19),iA=nA+(oA=eg(iA,kA=iA>>31,fA,P))|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,oA=eg(w,e,eA,pA),EA=p+nA|0,EA=(iA=oA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(IA,Z,wA,R),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=(oA=eg(f,E,j,J))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,oA=eg(d,_,rA,S),EA=p+iA|0,EA=(nA=oA+nA|0)>>>0>>0?EA+1|0:EA,iA=(oA=eg(c,n,F,G))+nA|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,oA=eg(FA,GA,DA,N),EA=p+nA|0,EA=(iA=oA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(h,D,y,a),EA=p+EA|0,bA=iA=nA+iA|0,oA=iA>>>0>>0?EA+1|0:EA,EA=eg(EA=r(B,19),EA>>31,W,v),iA=p,nA=eg(Q,C,s,o),iA=p+iA|0,iA=(EA=nA+EA|0)>>>0>>0?iA+1|0:iA,nA=(HA=eg(w,e,uA,kA))+EA|0,EA=p+iA|0,iA=(eA=eg(eA,pA,T,U))+nA|0,nA=p+(nA>>>0>>0?EA+1|0:EA)|0,nA=iA>>>0>>0?nA+1|0:nA,eA=eg(f,E,IA,Z),EA=p+nA|0,EA=(iA=eA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(x,H,j,J),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=(eA=eg(c,n,d,_))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,eA=eg(F,G,q,Y),EA=p+iA|0,EA=(nA=eA+nA|0)>>>0>>0?EA+1|0:EA,iA=(eA=eg(FA,GA,y,a))+nA|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,eA=eg(h,D,X,m),EA=p+nA|0,EA=(iA=eA+iA|0)>>>0>>0?EA+1|0:EA,eA=iA,HA=EA,pA=iA=iA+33554432|0,uA=EA=iA>>>0<33554432?EA+1|0:EA,kA=(67108863&EA)<<6|iA>>>26,iA=(nA=EA>>26)+oA|0,oA=EA=kA+bA|0,nA=aA,EA=EA>>>0>>0?iA+1|0:iA,CA=iA=oA+16777216|0,aA=(33554431&(EA=iA>>>0<16777216?EA+1|0:EA))<<7|iA>>>25,EA=(EA>>25)+g|0,EA=(iA=nA+aA|0)>>>0>>0?EA+1|0:EA,kA=g=iA+33554432|0,g=EA=g>>>0<33554432?EA+1|0:EA,EA=-67108864&kA,i[tA+8>>2]=iA-EA,aA=tA,EA=eg(f,E,B,t),nA=p,iA=(tA=eg(Q,C,wA,R))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=eg(L,u,rA,S),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(c,n,K,l),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,tA=eg(O,k,DA,N),nA=p+EA|0,nA=(iA=tA+iA|0)>>>0>>0?nA+1|0:nA,EA=(tA=eg(y,a,z,b))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(tA=eg(sA,M,$,V))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(s,o,tA=lA,bA=tA>>31),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(FA,GA,fA,P),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,lA=eg(h,D,w,e),nA=p+EA|0,nA=(iA=lA+iA|0)>>>0>>0?nA+1|0:nA,EA=I>>26,I=(lA=(67108863&I)<<6|YA>>>26)+iA|0,iA=EA+nA|0,EA=iA=I>>>0>>0?iA+1|0:iA,YA=I=(nA=I)+16777216|0,I=EA=I>>>0<16777216?EA+1|0:EA,EA=-33554432&YA,i[aA+28>>2]=nA-EA,lA=aA,EA=eg(y,a,B,t),iA=p,aA=eg(Q,C,DA,N),nA=p+iA|0,nA=(EA=aA+EA|0)>>>0>>0?nA+1|0:nA,aA=eg(L,u,sA,M),iA=p+nA|0,iA=(EA=aA+EA|0)>>>0>>0?iA+1|0:iA,nA=(aA=eg(s,o,K,l))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(IA,Z,fA,P),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(w,e,j,J),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,aA=eg(d,_,wA,R),nA=p+EA|0,nA=(iA=aA+iA|0)>>>0>>0?nA+1|0:nA,EA=(aA=eg(f,E,F,G))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(aA=eg(FA,GA,rA,S))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(h,D,c,n),EA=p+EA|0,aA=iA=iA+nA|0,EA=(EA=iA>>>0>>0?EA+1|0:EA)+(iA=g>>26)|0,EA=(g=aA+(nA=(67108863&g)<<6|kA>>>26)|0)>>>0>>0?EA+1|0:EA,FA=g=(iA=g)+16777216|0,g=nA=g>>>0<16777216?EA+1|0:EA,EA=-33554432&FA,i[lA+12>>2]=iA-EA,EA=eg(B,t,T,U),nA=p,iA=(aA=eg(Q,C,w,e))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=eg(f,E,L,u),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,aA=eg(K,l,x,H),nA=p+EA|0,nA=(iA=aA+iA|0)>>>0>>0?nA+1|0:nA,EA=(aA=eg(c,n,O,k))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(aA=eg(q,Y,z,b))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(y,a,$,V),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(tA,bA,X,m),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,hA=eg(s,o,aA=hA,GA=aA>>31),nA=p+EA|0,nA=(iA=hA+iA|0)>>>0>>0?nA+1|0:nA,EA=(hA=eg(h,D,W,v))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,hA=EA,EA=(EA=I>>25)+iA|0,EA=(I=hA+(nA=(33554431&I)<<7|YA>>>25)|0)>>>0>>0?EA+1|0:EA,hA=I=(iA=I)+33554432|0,I=EA=I>>>0<33554432?EA+1|0:EA,EA=-67108864&hA,i[lA+32>>2]=iA-EA,nA=iA=cA-(EA=-67108864&yA)|0,EA=(EA=gA-((EA>>>0>cA>>>0)+BA|0)|0)+(iA=g>>25)|0,EA=(g=nA+(cA=(33554431&g)<<7|FA>>>25)|0)>>>0>>0?EA+1|0:EA,(iA=g+33554432|0)>>>0<33554432&&(EA=EA+1|0),EA=(_A-(-33554432&QA)|0)+((67108863&EA)<<6|iA>>>26)|0,i[A+20>>2]=EA,EA=-67108864&iA,i[A+16>>2]=g-EA,EA=eg(w,e,B,t),nA=p,iA=(fA=eg(Q,C,fA,P))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=(fA=eg(L,u,wA,R))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,EA=(fA=eg(f,E,K,l))+nA|0,nA=p+iA|0,iA=(rA=eg(O,k,rA,S))+EA|0,EA=p+(EA>>>0>>0?nA+1|0:nA)|0,EA=iA>>>0>>0?EA+1|0:EA,nA=eg(c,n,z,b),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(DA,N,$,V),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=(rA=eg(y,a,tA,bA))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,EA=(rA=eg(aA,GA,sA,M))+nA|0,nA=p+iA|0,nA=EA>>>0>>0?nA+1|0:nA,iA=(rA=eg(s,o,AA,AA>>31))+EA|0,EA=p+nA|0,g=iA,EA=(EA=iA>>>0>>0?EA+1|0:EA)+(iA=I>>26)|0,EA=(I=g+(nA=(67108863&I)<<6|hA>>>26)|0)>>>0>>0?EA+1|0:EA,EA=(I=(g=I)+16777216|0)>>>0<16777216?EA+1|0:EA,I=-33554432&(iA=I),i[A+36>>2]=g-I,nA=oA-(-33554432&CA)|0,rA=eA-(I=-67108864&pA)|0,DA=HA-((I>>>0>eA>>>0)+uA|0)|0,EA=eg((33554431&(I=EA))<<7|iA>>>25,EA>>=25,19,0),iA=p+DA|0,EA=iA=(I=EA+rA|0)>>>0>>0?iA+1|0:iA,g=((67108863&(EA=(g=I+33554432|0)>>>0<33554432?EA+1|0:EA))<<6|(iA=g)>>>26)+nA|0,i[A+4>>2]=g,g=A,A=-67108864&iA,i[g>>2]=I-A}function H(A,I){var g,B,Q,C,E,n,a,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0;W=A,t=K=(L=i[I+12>>2])<<1,j=L,L=eg(K,E=K>>31,L,H=L>>31),X=p,K=L,g=L=i[I+16>>2],n=L>>31,D=L=(O=i[I+8>>2])<<1,V=eg(g,n,L,y=L>>31),L=p+X|0,L=(K=K+V|0)>>>0>>0?L+1|0:L,X=K,s=K=(V=i[I+20>>2])<<1,w=K>>31,a=K=(z=i[I+4>>2])<<1,q=eg(s,w,K,B=K>>31),K=p+L|0,K=(X=X+q|0)>>>0>>0?K+1|0:K,F=L=T=i[I+24>>2],f=L>>31,o=L=(BA=i[I>>2])<<1,q=eg(T,f,L,Q=L>>31),L=p+K|0,L=(X=q+X|0)>>>0>>0?L+1|0:L,Z=X,K=i[I+32>>2],h=X=r(K,19),Y=K,X=eg(X,c=X>>31,K,G=K>>31),L=p+L|0,L=(K=Z+X|0)>>>0>>0?L+1|0:L,Z=K,AA=i[I+36>>2],e=K=r(AA,38),C=K>>31,S=I=(X=i[I+28>>2])<<1,q=eg(K,C,I,b=I>>31),I=p+L|0,IA=K=Z+q|0,$=K>>>0>>0?I+1|0:I,I=eg(a,B,g,n),L=p,K=eg(D,y,j,H),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,N=V,q=eg(V,k=V>>31,o,Q),K=p+L|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(h,c,S,b),L=p+K|0,L=(I=q+I|0)>>>0>>0?L+1|0:L,K=eg(e,C,T,f),L=p+L|0,Z=I=K+I|0,QA=I>>>0>>0?L+1|0:L,I=eg(a,B,t,E),K=p,L=(O=eg(q=O,u=q>>31,q,u))+I|0,I=p+K|0,I=L>>>0>>0?I+1|0:I,K=(O=eg(o,Q,g,n))+L|0,L=p+I|0,L=K>>>0>>0?L+1|0:L,_=I=r(X,38),O=X,I=(X=eg(I,l=I>>31,X,m=X>>31))+K|0,K=p+L|0,K=I>>>0>>0?K+1|0:K,I=(L=I)+(X=eg(h,c,I=T<<1,I>>31))|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,K=eg(e,C,s,w),L=p+L|0,v=I=K+I|0,P=L=I>>>0>>0?L+1|0:L,I=L,M=L=v+33554432|0,R=I=L>>>0<33554432?I+1|0:I,L=(L=I>>26)+QA|0,QA=I=(K=(67108863&I)<<6|M>>>26)+Z|0,K=I>>>0>>0?L+1|0:L,J=I=I+16777216|0,L=(L=(K=I>>>0<16777216?K+1|0:K)>>25)+$|0,L=(I=(K=(33554431&K)<<7|I>>>25)+IA|0)>>>0>>0?L+1|0:L,K=I,I=L,Z=L=K+33554432|0,X=I=L>>>0<33554432?I+1|0:I,I=-67108864&L,i[W+24>>2]=K-I,I=eg(o,Q,q,u),L=p,z=eg(a,B,W=z,gA=W>>31),K=p+L|0,K=(I=z+I|0)>>>0>>0?K+1|0:K,L=I,z=I=r(T,19),I=L+(T=eg(I,IA=I>>31,T,f))|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,K=(T=eg(s,w,_,l))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,d=L=g<<1,T=eg(h,c,L,U=L>>31),L=p+I|0,L=(K=T+K|0)>>>0>>0?L+1|0:L,I=K,K=eg(e,C,t,E),L=p+L|0,$=I=I+K|0,T=I>>>0>>0?L+1|0:L,I=eg(s,w,z,IA),L=p,W=eg(o,Q,W,gA),K=p+L|0,K=(I=W+I|0)>>>0>>0?K+1|0:K,W=eg(g,n,_,l),L=p+K|0,L=(I=W+I|0)>>>0>>0?L+1|0:L,K=(W=eg(h,c,t,E))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,W=eg(e,C,q,u),L=p+I|0,gA=K=W+K|0,W=K>>>0>>0?L+1|0:L,I=eg(I=r(V,38),I>>31,V,k),L=p,V=I,K=eg(I=BA,K=I>>31,I,K),L=p+L|0,L=(I=V+K|0)>>>0>>0?L+1|0:L,V=eg(z,IA,d,U),K=p+L|0,K=(I=V+I|0)>>>0>>0?K+1|0:K,V=eg(t,E,_,l),L=p+K|0,L=(I=V+I|0)>>>0>>0?L+1|0:L,K=(V=eg(h,c,D,y))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,V=eg(a,B,e,C),L=p+I|0,z=K=V+K|0,IA=L=K>>>0>>0?L+1|0:L,BA=I=K+33554432|0,x=L=I>>>0<33554432?L+1|0:L,K=(I=L>>26)+W|0,W=L=(V=(67108863&L)<<6|BA>>>26)+gA|0,L=L>>>0>>0?K+1|0:K,gA=I=W+16777216|0,V=(33554431&(L=I>>>0<16777216?L+1|0:L))<<7|I>>>25,L=(L>>25)+T|0,L=(K=V+$|0)>>>0>>0?L+1|0:L,T=K=(I=K)+33554432|0,V=L=K>>>0<33554432?L+1|0:L,L=-67108864&K,i[A+8>>2]=I-L,I=eg(D,y,N,k),L=p,K=eg(g,n,t,E),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=eg(a,B,F,f),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=eg(o,Q,O,m),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=($=eg(e,C,Y,G))+I|0,I=p+L|0,L=X>>26,X=(Z=(67108863&X)<<6|Z>>>26)+K|0,K=(I=K>>>0<$>>>0?I+1|0:I)+L|0,L=K=X>>>0>>0?K+1|0:K,Z=K=(I=X)+16777216|0,X=L=K>>>0<16777216?L+1|0:L,L=-33554432&K,i[A+28>>2]=I-L,I=eg(o,Q,j,H),K=p,L=(q=eg(a,B,q,u))+I|0,I=p+K|0,I=L>>>0>>0?I+1|0:I,q=eg(F,f,_,l),K=p+I|0,K=(L=q+L|0)>>>0>>0?K+1|0:K,I=(q=eg(h,c,s,w))+L|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,K=eg(e,C,g,n),L=p+L|0,L=(L=(I=K+I|0)>>>0>>0?L+1|0:L)+(K=V>>26)|0,K=I=(V=(67108863&V)<<6|T>>>26)+I|0,I=L=I>>>0>>0?L+1|0:L,T=L=K+16777216|0,V=I=L>>>0<16777216?I+1|0:I,I=-33554432&L,i[A+12>>2]=K-I,q=A,I=eg(F,f,D,y),L=p,K=eg(g,n,g,n),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=eg(t,E,s,w),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=(j=eg(a,B,S,b))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,L=(j=eg(o,Q,Y,G))+K|0,K=p+I|0,K=L>>>0>>0?K+1|0:K,I=(AA=eg(e,C,j=AA,$=j>>31))+L|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,A=I,L=(I=X>>25)+L|0,L=(K=A+(X=(33554431&X)<<7|Z>>>25)|0)>>>0>>0?L+1|0:L,AA=K=(I=K)+33554432|0,X=L=K>>>0<33554432?L+1|0:L,L=-67108864&K,i[q+32>>2]=I-L,L=V>>25,K=(V=(33554431&V)<<7|T>>>25)+(v-(I=-67108864&M)|0)|0,I=L+(P-((I>>>0>v>>>0)+R|0)|0)|0,L=I=K>>>0>>0?I+1|0:I,V=I=K+33554432|0,I=((67108863&(L=I>>>0<33554432?L+1|0:L))<<6|I>>>26)+(QA=QA-(-33554432&J)|0)|0,i[q+20>>2]=I,I=-67108864&V,i[q+16>>2]=K-I,V=q,I=eg(t,E,F,f),K=p,L=(q=eg(N,k,d,U))+I|0,I=p+K|0,I=L>>>0>>0?I+1|0:I,K=(q=eg(D,y,O,m))+L|0,L=p+I|0,L=K>>>0>>0?L+1|0:L,I=(q=eg(a,B,Y,G))+K|0,K=p+L|0,K=I>>>0>>0?K+1|0:K,q=eg(o,Q,j,$),L=p+K|0,K=I=q+I|0,L=(I=I>>>0>>0?L+1|0:L)+(L=X>>26)|0,L=(K=(X=(67108863&X)<<6|AA>>>26)+K|0)>>>0>>0?L+1|0:L,X=K,I=L,I=(L=K+16777216|0)>>>0<16777216?I+1|0:I,K=-33554432&L,i[V+36>>2]=X-K,q=eg((33554431&I)<<7|L>>>25,I>>25,19,0),L=p+(IA-(((K=-67108864&BA)>>>0>z>>>0)+x|0)|0)|0,K=I=q+(z-K|0)|0,I=I>>>0>>0?L+1|0:L,I=(W-(-33554432&gA)|0)+((67108863&(I=(L=K+33554432|0)>>>0<33554432?I+1|0:I))<<6|L>>>26)|0,i[V+4>>2]=I,A=-67108864&L,i[V>>2]=K-A}function Y(A,I,g){var B,Q=0,C=0,E=0,n=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0;for(h=B=h-2048|0,Yg(B+1024|0,I),QI(B+1024|0,A),Yg(B,B+1024|0),QI(B,g),I=0;n=i[(Q=f=(B+1024|0)+(64|(A=F<<7))|0)>>2],e=i[(E=t=(B+1024|0)+(96|A)|0)>>2],E=i[E+4>>2],a=n,w=i[Q+4>>2],o=e,Q=A+(B+1024|0)|0,r=i[(n=(B+1024|0)+(32|A)|0)>>2],e=i[n+4>>2],o=ug(o^(l=rI(i[Q>>2],i[Q+4>>2],r,e)),(C=E)^(E=p),32),e=ug(a=(s=rI(a,w,o,C=p))^r,e^(r=p),24),P=ug((m=rI(l,a=E,e,E=p))^o,(y=p)^C,16),E=ug(e^(R=rI(s,r,P,S=p)),(N=p)^E,63),e=p,o=i[(r=(B+1024|0)+(104|A)|0)>>2],s=i[r+4>>2],H=i[(C=l=(B+1024|0)+(72|A)|0)>>2],c=i[C+4>>2],G=ug((G=o)^(k=rI(u=i[(C=o=(B+1024|0)+(8|A)|0)>>2],w=i[C+4>>2],U=i[(C=(B+1024|0)+(40|A)|0)>>2],a=i[C+4>>2])),(w=s)^(s=p),32),a=ug(c=(u=rI(H,c,G,w=p))^U,a^(U=p),24),V=ug((M=rI(k,c=s,a,s=p))^G,(J=p)^w,16),s=ug(a^(O=rI(u,U,V,j=p)),(z=p)^s,63),a=p,G=i[(k=U=(B+1024|0)+(112|A)|0)>>2],u=i[k+4>>2],v=i[(k=(B+1024|0)+(80|A)|0)>>2],D=i[k+4>>2],H=G,G=(B+1024|0)+(16|A)|0,Y=i[(b=w=(B+1024|0)+(48|A)|0)>>2],b=i[b+4>>2],H=ug(H^(d=rI(i[G>>2],i[G+4>>2],Y,b)),(c=u)^(u=p),32),b=ug(D=(c=rI(v,D,H,_=p))^Y,b^(Y=p),24),IA=ug(($=rI(d,D=u,b,u=p))^H,(AA=p)^_,16),u=ug(b^(W=rI(c,Y,IA,gA=p)),(q=p)^u,63),b=p,H=i[(Y=(B+1024|0)+(120|A)|0)>>2],_=i[Y+4>>2],BA=i[(c=d=(B+1024|0)+(88|A)|0)>>2],X=i[c+4>>2],L=ug((v=H)^(T=rI(Z=i[(c=H=(B+1024|0)+(24|A)|0)>>2],D=i[c+4>>2],x=i[(A=(B+1024|0)+(56|A)|0)>>2],c=i[A+4>>2])),(D=_)^(_=p),32),c=ug(D=(X=rI(BA,X,L,K=p))^x,c^(x=p),24),v=x,L=ug((x=rI(T,D=_,c,_=p))^L,(T=p)^K,16),_=ug(c^(X=rI(X,v,L,K=p)),(Z=p)^_,63),c=p,v=W,D=q,W=ug(L^(m=rI(m,y,s,a)),K^(y=p),32),s=ug((L=rI(v,D,W,q=p))^s,(K=p)^a,24),a=rI(a=m,y,s,m=p),y=p,i[Q>>2]=a,i[Q+4>>2]=y,Q=ug(a^W,q^y,16),a=p,i[Y>>2]=Q,i[Y+4>>2]=a,Q=rI(L,K,Q,a),a=p,i[k>>2]=Q,i[k+4>>2]=a,QA=C,CA=ug(Q^s,a^m,63),i[QA>>2]=CA,i[C+4>>2]=p,y=u,a=ug(P^(C=rI(M,J,u,b)),S^(s=p),32),Q=ug(y^(u=rI(X,Z,a,k=p)),(Q=b)^(b=p),24),C=rI(C,y=s,Q,s=p),Y=p,i[o>>2]=C,i[o+4>>2]=Y,o=ug(C^a,k^Y,16),C=p,i[t>>2]=o,i[t+4>>2]=C,t=rI(u,b,o,C),i[d>>2]=t,o=p,i[d+4>>2]=o,QA=w,CA=ug(Q^t,o^s,63),i[QA>>2]=CA,i[w+4>>2]=p,Q=rI($,AA,_,c),a=rI(R,N,C=ug(V^Q,j^(o=p),32),s=p),Q=rI(Q,w=o,t=ug(a^_,(k=p)^c,24),o=p),u=w=p,i[G>>2]=Q,i[G+4>>2]=u,Q=ug(Q^C,s^u,16),C=p,i[r>>2]=Q,i[r+4>>2]=C,Q=rI(a,k,Q,C),i[f>>2]=Q,C=f,f=p,i[C+4>>2]=f,QA=A,CA=ug(Q^t,f^o,63),i[QA>>2]=CA,i[A+4>>2]=p,C=E,Q=ug(IA^(f=rI(x,T,E,e)),gA^(t=p),32),A=ug(C^(r=rI(O,z,Q,E=p)),(A=e)^(e=p),24),f=rI(f,C=t,A,t=p),C=o=p,i[H>>2]=f,i[H+4>>2]=C,f=ug(Q^f,E^C,16),Q=p,i[U>>2]=f,i[U+4>>2]=Q,f=rI(r,e,f,Q),i[l>>2]=f,Q=p,i[l+4>>2]=Q,QA=n,CA=ug(A^f,Q^t,63),i[QA>>2]=CA,i[n+4>>2]=p,8!=(0|(F=F+1|0)););for(;F=i[768+(A=(t=I<<4)+(B+1024|0)|0)>>2],f=i[A+772>>2],a=i[(Q=A+512|0)>>2],o=i[Q+4>>2],C=F,F=i[A+256>>2],Q=i[A+260>>2],E=ug(C^(n=rI(i[A>>2],i[A+4>>2],F,Q)),(E=f)^(f=p),32),Q=ug(C=(r=rI(a,o,E,e=p))^F,Q^(F=p),24),w=F,s=ug((o=rI(n,f,Q,F=p))^E,(C=p)^e,16),F=ug(Q^(U=rI(r,w,s,a=p)),(k=p)^F,63),f=p,Q=i[A+780>>2],u=i[A+520>>2],y=i[A+524>>2],r=ug((G=i[A+776>>2])^(e=rI(w=i[(n=t=(B+1024|0)+(8|t)|0)>>2],e=i[n+4>>2],n=i[A+264>>2],E=i[A+268>>2])),(w=Q)^(Q=p),32),E=ug(w=(G=rI(u,y,r,l=p))^n,E^(n=p),24),y=G,u=ug((G=rI(e,w=Q,E,Q=p))^r,(w=p)^l,16),Q=ug(E^(Y=rI(y,n,u,b=p)),(d=p)^Q,63),n=p,E=i[A+900>>2],D=i[A+640>>2],m=i[A+644>>2],c=i[A+896>>2],e=i[A+384>>2],r=i[A+388>>2],H=ug(c^(l=rI(i[A+128>>2],i[A+132>>2],e,r)),(y=E)^(E=p),32),r=ug(y=(c=rI(D,m,H,_=p))^e,r^(e=p),24),D=c,c=ug((c=H)^(H=rI(l,y=E,r,E=p)),(y=_)^(_=p),16),E=ug(r^(y=rI(D,e,c,m=p)),(P=p)^E,63),e=p,r=i[A+908>>2],q=i[A+648>>2],j=i[A+652>>2],v=i[A+904>>2],l=i[A+392>>2],S=i[A+396>>2],N=ug(v^(R=rI(i[A+136>>2],i[A+140>>2],l,S)),(D=r)^(r=p),32),v=S=ug(D=(J=rI(q,j,N,M=p))^l,S^(l=p),24),N=ug((S=rI(R,D=r,S,r=p))^N,(R=p)^M,16),r=ug(v^(J=rI(J,l,N,M=p)),(V=p)^r,63),l=p,v=y,D=P,y=ug(N^(o=rI(o,C,Q,n)),M^(C=p),32),Q=ug((N=rI(v,D,y,P=p))^Q,(M=p)^n,24),n=rI(n=o,C,Q,o=p),C=p,i[A>>2]=n,i[A+4>>2]=C,n=ug(n^y,P^C,16),C=p,i[A+904>>2]=n,i[A+908>>2]=C,n=rI(N,M,n,C),C=p,i[A+640>>2]=n,i[A+644>>2]=C,QA=A,CA=ug(Q^n,o^C,63),i[QA+264>>2]=CA,i[A+268>>2]=p,y=E,n=rI(G,w,E,e),s=rI(J,V,o=ug(s^n,a^(E=p),32),C=p),n=rI(n,a=E,Q=ug(y^s,(Q=e)^(e=p),24),E=p),a=p,i[t>>2]=n,i[t+4>>2]=a,t=ug(n^o,C^a,16),n=p,i[A+768>>2]=t,i[A+772>>2]=n,t=rI(s,e,t,n),i[A+648>>2]=t,n=p,i[A+652>>2]=n,QA=A,CA=ug(Q^t,n^E,63),i[QA+384>>2]=CA,i[A+388>>2]=p,o=r,E=ug(u^(Q=rI(H,_,r,l)),b^(n=p),32),t=ug(o^(r=rI(U,k,E,e=p)),(C=l)^(l=p),24),Q=rI(Q,C=n,t,n=p),C=o=p,i[A+128>>2]=Q,i[A+132>>2]=C,Q=ug(Q^E,C^e,16),E=p,i[A+776>>2]=Q,i[A+780>>2]=E,Q=rI(r,l,Q,E),i[A+512>>2]=Q,E=p,i[A+516>>2]=E,QA=A,CA=ug(Q^t,n^E,63),i[QA+392>>2]=CA,i[A+396>>2]=p,t=rI(S,R,F,f),e=rI(Y,d,n=ug(c^t,m^(Q=p),32),E=p),f=rI(C=t,Q,F=ug(e^F,(r=p)^f,24),t=p),Q=p,i[A+136>>2]=f,i[A+140>>2]=Q,f=ug(n^f,E^Q,16),Q=p,i[A+896>>2]=f,i[A+900>>2]=Q,f=rI(e,r,f,Q),i[A+520>>2]=f,Q=p,i[A+524>>2]=Q,QA=A,CA=ug(f^F,Q^t,63),i[QA+256>>2]=CA,i[A+260>>2]=p,8!=(0|(I=I+1|0)););Yg(g,B),QI(g,B+1024|0),h=B+2048|0}function b(A,I,g){var B,Q=0,C=0,E=0,n=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0;for(h=B=h-2048|0,Yg(B+1024|0,I),QI(B+1024|0,A),Yg(B,B+1024|0),I=0;n=i[(Q=f=(B+1024|0)+(64|(A=F<<7))|0)>>2],e=i[(E=t=(B+1024|0)+(96|A)|0)>>2],E=i[E+4>>2],a=n,w=i[Q+4>>2],o=e,Q=A+(B+1024|0)|0,r=i[(n=(B+1024|0)+(32|A)|0)>>2],e=i[n+4>>2],o=ug(o^(l=rI(i[Q>>2],i[Q+4>>2],r,e)),(C=E)^(E=p),32),e=ug(a=(s=rI(a,w,o,C=p))^r,e^(r=p),24),P=ug((m=rI(l,a=E,e,E=p))^o,(y=p)^C,16),E=ug(e^(R=rI(s,r,P,S=p)),(N=p)^E,63),e=p,o=i[(r=(B+1024|0)+(104|A)|0)>>2],s=i[r+4>>2],H=i[(C=l=(B+1024|0)+(72|A)|0)>>2],c=i[C+4>>2],G=ug((G=o)^(k=rI(u=i[(C=o=(B+1024|0)+(8|A)|0)>>2],w=i[C+4>>2],U=i[(C=(B+1024|0)+(40|A)|0)>>2],a=i[C+4>>2])),(w=s)^(s=p),32),a=ug(c=(u=rI(H,c,G,w=p))^U,a^(U=p),24),V=ug((M=rI(k,c=s,a,s=p))^G,(J=p)^w,16),s=ug(a^(O=rI(u,U,V,j=p)),(z=p)^s,63),a=p,G=i[(k=U=(B+1024|0)+(112|A)|0)>>2],u=i[k+4>>2],v=i[(k=(B+1024|0)+(80|A)|0)>>2],D=i[k+4>>2],H=G,G=(B+1024|0)+(16|A)|0,Y=i[(b=w=(B+1024|0)+(48|A)|0)>>2],b=i[b+4>>2],H=ug(H^(d=rI(i[G>>2],i[G+4>>2],Y,b)),(c=u)^(u=p),32),b=ug(D=(c=rI(v,D,H,_=p))^Y,b^(Y=p),24),IA=ug(($=rI(d,D=u,b,u=p))^H,(AA=p)^_,16),u=ug(b^(W=rI(c,Y,IA,gA=p)),(q=p)^u,63),b=p,H=i[(Y=(B+1024|0)+(120|A)|0)>>2],_=i[Y+4>>2],BA=i[(c=d=(B+1024|0)+(88|A)|0)>>2],X=i[c+4>>2],L=ug((v=H)^(T=rI(Z=i[(c=H=(B+1024|0)+(24|A)|0)>>2],D=i[c+4>>2],x=i[(A=(B+1024|0)+(56|A)|0)>>2],c=i[A+4>>2])),(D=_)^(_=p),32),c=ug(D=(X=rI(BA,X,L,K=p))^x,c^(x=p),24),v=x,L=ug((x=rI(T,D=_,c,_=p))^L,(T=p)^K,16),_=ug(c^(X=rI(X,v,L,K=p)),(Z=p)^_,63),c=p,v=W,D=q,W=ug(L^(m=rI(m,y,s,a)),K^(y=p),32),s=ug((L=rI(v,D,W,q=p))^s,(K=p)^a,24),a=rI(a=m,y,s,m=p),y=p,i[Q>>2]=a,i[Q+4>>2]=y,Q=ug(a^W,q^y,16),a=p,i[Y>>2]=Q,i[Y+4>>2]=a,Q=rI(L,K,Q,a),a=p,i[k>>2]=Q,i[k+4>>2]=a,QA=C,CA=ug(Q^s,a^m,63),i[QA>>2]=CA,i[C+4>>2]=p,y=u,a=ug(P^(C=rI(M,J,u,b)),S^(s=p),32),Q=ug(y^(u=rI(X,Z,a,k=p)),(Q=b)^(b=p),24),C=rI(C,y=s,Q,s=p),Y=p,i[o>>2]=C,i[o+4>>2]=Y,o=ug(C^a,k^Y,16),C=p,i[t>>2]=o,i[t+4>>2]=C,t=rI(u,b,o,C),i[d>>2]=t,o=p,i[d+4>>2]=o,QA=w,CA=ug(Q^t,o^s,63),i[QA>>2]=CA,i[w+4>>2]=p,Q=rI($,AA,_,c),a=rI(R,N,C=ug(V^Q,j^(o=p),32),s=p),Q=rI(Q,w=o,t=ug(a^_,(k=p)^c,24),o=p),u=w=p,i[G>>2]=Q,i[G+4>>2]=u,Q=ug(Q^C,s^u,16),C=p,i[r>>2]=Q,i[r+4>>2]=C,Q=rI(a,k,Q,C),i[f>>2]=Q,C=f,f=p,i[C+4>>2]=f,QA=A,CA=ug(Q^t,f^o,63),i[QA>>2]=CA,i[A+4>>2]=p,C=E,Q=ug(IA^(f=rI(x,T,E,e)),gA^(t=p),32),A=ug(C^(r=rI(O,z,Q,E=p)),(A=e)^(e=p),24),f=rI(f,C=t,A,t=p),C=o=p,i[H>>2]=f,i[H+4>>2]=C,f=ug(Q^f,E^C,16),Q=p,i[U>>2]=f,i[U+4>>2]=Q,f=rI(r,e,f,Q),i[l>>2]=f,Q=p,i[l+4>>2]=Q,QA=n,CA=ug(A^f,Q^t,63),i[QA>>2]=CA,i[n+4>>2]=p,8!=(0|(F=F+1|0)););for(;F=i[768+(A=(t=I<<4)+(B+1024|0)|0)>>2],f=i[A+772>>2],a=i[(Q=A+512|0)>>2],o=i[Q+4>>2],C=F,F=i[A+256>>2],Q=i[A+260>>2],E=ug(C^(n=rI(i[A>>2],i[A+4>>2],F,Q)),(E=f)^(f=p),32),Q=ug(C=(r=rI(a,o,E,e=p))^F,Q^(F=p),24),w=F,s=ug((o=rI(n,f,Q,F=p))^E,(C=p)^e,16),F=ug(Q^(U=rI(r,w,s,a=p)),(k=p)^F,63),f=p,Q=i[A+780>>2],u=i[A+520>>2],y=i[A+524>>2],r=ug((G=i[A+776>>2])^(e=rI(w=i[(n=t=(B+1024|0)+(8|t)|0)>>2],e=i[n+4>>2],n=i[A+264>>2],E=i[A+268>>2])),(w=Q)^(Q=p),32),E=ug(w=(G=rI(u,y,r,l=p))^n,E^(n=p),24),y=G,u=ug((G=rI(e,w=Q,E,Q=p))^r,(w=p)^l,16),Q=ug(E^(Y=rI(y,n,u,b=p)),(d=p)^Q,63),n=p,E=i[A+900>>2],D=i[A+640>>2],m=i[A+644>>2],c=i[A+896>>2],e=i[A+384>>2],r=i[A+388>>2],H=ug(c^(l=rI(i[A+128>>2],i[A+132>>2],e,r)),(y=E)^(E=p),32),r=ug(y=(c=rI(D,m,H,_=p))^e,r^(e=p),24),D=c,c=ug((c=H)^(H=rI(l,y=E,r,E=p)),(y=_)^(_=p),16),E=ug(r^(y=rI(D,e,c,m=p)),(P=p)^E,63),e=p,r=i[A+908>>2],q=i[A+648>>2],j=i[A+652>>2],v=i[A+904>>2],l=i[A+392>>2],S=i[A+396>>2],N=ug(v^(R=rI(i[A+136>>2],i[A+140>>2],l,S)),(D=r)^(r=p),32),v=S=ug(D=(J=rI(q,j,N,M=p))^l,S^(l=p),24),N=ug((S=rI(R,D=r,S,r=p))^N,(R=p)^M,16),r=ug(v^(J=rI(J,l,N,M=p)),(V=p)^r,63),l=p,v=y,D=P,y=ug(N^(o=rI(o,C,Q,n)),M^(C=p),32),Q=ug((N=rI(v,D,y,P=p))^Q,(M=p)^n,24),n=rI(n=o,C,Q,o=p),C=p,i[A>>2]=n,i[A+4>>2]=C,n=ug(n^y,P^C,16),C=p,i[A+904>>2]=n,i[A+908>>2]=C,n=rI(N,M,n,C),C=p,i[A+640>>2]=n,i[A+644>>2]=C,QA=A,CA=ug(Q^n,o^C,63),i[QA+264>>2]=CA,i[A+268>>2]=p,y=E,n=rI(G,w,E,e),s=rI(J,V,o=ug(s^n,a^(E=p),32),C=p),n=rI(n,a=E,Q=ug(y^s,(Q=e)^(e=p),24),E=p),a=p,i[t>>2]=n,i[t+4>>2]=a,t=ug(n^o,C^a,16),n=p,i[A+768>>2]=t,i[A+772>>2]=n,t=rI(s,e,t,n),i[A+648>>2]=t,n=p,i[A+652>>2]=n,QA=A,CA=ug(Q^t,n^E,63),i[QA+384>>2]=CA,i[A+388>>2]=p,o=r,E=ug(u^(Q=rI(H,_,r,l)),b^(n=p),32),t=ug(o^(r=rI(U,k,E,e=p)),(C=l)^(l=p),24),Q=rI(Q,C=n,t,n=p),C=o=p,i[A+128>>2]=Q,i[A+132>>2]=C,Q=ug(Q^E,C^e,16),E=p,i[A+776>>2]=Q,i[A+780>>2]=E,Q=rI(r,l,Q,E),i[A+512>>2]=Q,E=p,i[A+516>>2]=E,QA=A,CA=ug(Q^t,n^E,63),i[QA+392>>2]=CA,i[A+396>>2]=p,t=rI(S,R,F,f),e=rI(Y,d,n=ug(c^t,m^(Q=p),32),E=p),f=rI(C=t,Q,F=ug(e^F,(r=p)^f,24),t=p),Q=p,i[A+136>>2]=f,i[A+140>>2]=Q,f=ug(n^f,E^Q,16),Q=p,i[A+896>>2]=f,i[A+900>>2]=Q,f=rI(e,r,f,Q),i[A+520>>2]=f,Q=p,i[A+524>>2]=Q,QA=A,CA=ug(f^F,Q^t,63),i[QA+256>>2]=CA,i[A+260>>2]=p,8!=(0|(I=I+1|0)););Yg(g,B),QI(g,B+1024|0),h=B+2048|0}function m(A){var I=0,g=0,B=0,Q=0,C=0,E=0,n=0,r=0,o=0;A:if(A|=0){C=(B=A-8|0)+(A=-8&(I=i[A-4>>2]))|0;I:if(!(1&I)){if(!(3&I))break A;if((B=B-(I=i[B>>2])|0)>>>0>2])))return i[8963]=A,i[C+4>>2]=-2&I,i[B+4>>2]=1|A,void(i[A+B>>2]=A)}else{if(I>>>0<=255){if(Q=i[B+8>>2],I=I>>>3|0,(0|(g=i[B+12>>2]))==(0|Q)){r=35844,o=i[8961]&vI(-2,I),i[r>>2]=o;break I}i[Q+12>>2]=g,i[g+8>>2]=Q;break I}if(n=i[B+24>>2],(0|B)==(0|(I=i[B+12>>2])))if((g=i[(Q=B+20|0)>>2])||(g=i[(Q=B+16|0)>>2])){for(;E=Q,(g=i[(Q=(I=g)+20|0)>>2])||(Q=I+16|0,g=i[I+16>>2]););i[E>>2]=0}else I=0;else g=i[B+8>>2],i[g+12>>2]=I,i[I+8>>2]=g;if(!n)break I;Q=i[B+28>>2];g:{if(i[(g=36148+(Q<<2)|0)>>2]==(0|B)){if(i[g>>2]=I,I)break g;r=35848,o=i[8962]&vI(-2,Q),i[r>>2]=o;break I}if(i[n+(i[n+16>>2]==(0|B)?16:20)>>2]=I,!I)break I}if(i[I+24>>2]=n,(g=i[B+16>>2])&&(i[I+16>>2]=g,i[g+24>>2]=I),!(g=i[B+20>>2]))break I;i[I+20>>2]=g,i[g+24>>2]=I}}if(!(B>>>0>=C>>>0)&&1&(I=i[C+4>>2])){I:{if(!(2&I)){if(i[8967]==(0|C)){if(i[8967]=B,A=i[8964]+A|0,i[8964]=A,i[B+4>>2]=1|A,i[8966]!=(0|B))break A;return i[8963]=0,void(i[8966]=0)}if(i[8966]==(0|C))return i[8966]=B,A=i[8963]+A|0,i[8963]=A,i[B+4>>2]=1|A,void(i[A+B>>2]=A);A=(-8&I)+A|0;g:if(I>>>0<=255){if(I=I>>>3|0,(0|(g=i[C+8>>2]))==(0|(Q=i[C+12>>2]))){r=35844,o=i[8961]&vI(-2,I),i[r>>2]=o;break g}i[g+12>>2]=Q,i[Q+8>>2]=g}else{if(n=i[C+24>>2],(0|C)==(0|(I=i[C+12>>2])))if((g=i[(Q=C+20|0)>>2])||(g=i[(Q=C+16|0)>>2])){for(;E=Q,(g=i[(Q=(I=g)+20|0)>>2])||(Q=I+16|0,g=i[I+16>>2]););i[E>>2]=0}else I=0;else g=i[C+8>>2],i[g+12>>2]=I,i[I+8>>2]=g;if(n){Q=i[C+28>>2];B:{if(i[(g=36148+(Q<<2)|0)>>2]==(0|C)){if(i[g>>2]=I,I)break B;r=35848,o=i[8962]&vI(-2,Q),i[r>>2]=o;break g}if(i[n+(i[n+16>>2]==(0|C)?16:20)>>2]=I,!I)break g}i[I+24>>2]=n,(g=i[C+16>>2])&&(i[I+16>>2]=g,i[g+24>>2]=I),(g=i[C+20>>2])&&(i[I+20>>2]=g,i[g+24>>2]=I)}}if(i[B+4>>2]=1|A,i[A+B>>2]=A,i[8966]!=(0|B))break I;return void(i[8963]=A)}i[C+4>>2]=-2&I,i[B+4>>2]=1|A,i[A+B>>2]=A}if(A>>>0<=255)return I=35884+((A=A>>>3|0)<<3)|0,(g=i[8961])&(A=1<>2]:(i[8961]=A|g,A=I),i[I+8>>2]=B,i[A+12>>2]=B,i[B+12>>2]=I,void(i[B+8>>2]=A);Q=31,i[B+16>>2]=0,i[B+20>>2]=0,A>>>0<=16777215&&(I=A>>>8|0,I<<=E=I+1048320>>>16&8,Q=28+((I=((I<<=Q=I+520192>>>16&4)<<(g=I+245760>>>16&2)>>>15|0)-(g|Q|E)|0)<<1|A>>>I+21&1)|0),i[B+28>>2]=Q,E=36148+(Q<<2)|0;I:{g:{if((g=i[8962])&(I=1<>>1|0)|0),I=i[E>>2];;){if(g=I,(-8&i[I+4>>2])==(0|A))break g;if(I=Q>>>29|0,Q<<=1,!(I=i[16+(E=g+(4&I)|0)>>2]))break}i[E+16>>2]=B,i[B+24>>2]=g}else i[8962]=I|g,i[E>>2]=B,i[B+24>>2]=E;i[B+12>>2]=B,i[B+8>>2]=B;break I}A=i[g+8>>2],i[A+12>>2]=B,i[g+8>>2]=B,i[B+24>>2]=0,i[B+12>>2]=g,i[B+8>>2]=A}A=i[8969]-1|0,i[8969]=A||-1}}}function v(A,I){var g,B=0,Q=0,C=0,E=0,n=0,a=0,r=0;g=A+I|0;A:{I:if(!(1&(B=i[A+4>>2]))){if(!(3&B))break A;if(I=(B=i[A>>2])+I|0,(0|(A=A-B|0))==i[8966]){if(3==(3&(B=i[g+4>>2])))return i[8963]=I,i[g+4>>2]=-2&B,i[A+4>>2]=1|I,void(i[g>>2]=I)}else{if(B>>>0<=255){if(C=i[A+8>>2],B=B>>>3|0,(0|(Q=i[A+12>>2]))==(0|C)){a=35844,r=i[8961]&vI(-2,B),i[a>>2]=r;break I}i[C+12>>2]=Q,i[Q+8>>2]=C;break I}if(n=i[A+24>>2],(0|(B=i[A+12>>2]))==(0|A))if((Q=i[(C=A+20|0)>>2])||(Q=i[(C=A+16|0)>>2])){for(;E=C,(Q=i[(C=(B=Q)+20|0)>>2])||(C=B+16|0,Q=i[B+16>>2]););i[E>>2]=0}else B=0;else Q=i[A+8>>2],i[Q+12>>2]=B,i[B+8>>2]=Q;if(!n)break I;C=i[A+28>>2];g:{if(i[(Q=36148+(C<<2)|0)>>2]==(0|A)){if(i[Q>>2]=B,B)break g;a=35848,r=i[8962]&vI(-2,C),i[a>>2]=r;break I}if(i[n+(i[n+16>>2]==(0|A)?16:20)>>2]=B,!B)break I}if(i[B+24>>2]=n,(Q=i[A+16>>2])&&(i[B+16>>2]=Q,i[Q+24>>2]=B),!(Q=i[A+20>>2]))break I;i[B+20>>2]=Q,i[Q+24>>2]=B}}I:{if(!(2&(B=i[g+4>>2]))){if(i[8967]==(0|g)){if(i[8967]=A,I=i[8964]+I|0,i[8964]=I,i[A+4>>2]=1|I,i[8966]!=(0|A))break A;return i[8963]=0,void(i[8966]=0)}if(i[8966]==(0|g))return i[8966]=A,I=i[8963]+I|0,i[8963]=I,i[A+4>>2]=1|I,void(i[A+I>>2]=I);I=(-8&B)+I|0;g:if(B>>>0<=255){if(C=i[g+8>>2],B=B>>>3|0,(0|(Q=i[g+12>>2]))==(0|C)){a=35844,r=i[8961]&vI(-2,B),i[a>>2]=r;break g}i[C+12>>2]=Q,i[Q+8>>2]=C}else{if(n=i[g+24>>2],(0|g)==(0|(B=i[g+12>>2])))if((C=i[(Q=g+20|0)>>2])||(C=i[(Q=g+16|0)>>2])){for(;E=Q,(C=i[(Q=(B=C)+20|0)>>2])||(Q=B+16|0,C=i[B+16>>2]););i[E>>2]=0}else B=0;else Q=i[g+8>>2],i[Q+12>>2]=B,i[B+8>>2]=Q;if(n){C=i[g+28>>2];B:{if(i[(Q=36148+(C<<2)|0)>>2]==(0|g)){if(i[Q>>2]=B,B)break B;a=35848,r=i[8962]&vI(-2,C),i[a>>2]=r;break g}if(i[n+(i[n+16>>2]==(0|g)?16:20)>>2]=B,!B)break g}i[B+24>>2]=n,(Q=i[g+16>>2])&&(i[B+16>>2]=Q,i[Q+24>>2]=B),(Q=i[g+20>>2])&&(i[B+20>>2]=Q,i[Q+24>>2]=B)}}if(i[A+4>>2]=1|I,i[A+I>>2]=I,i[8966]!=(0|A))break I;return void(i[8963]=I)}i[g+4>>2]=-2&B,i[A+4>>2]=1|I,i[A+I>>2]=I}if(I>>>0<=255)return B=35884+((I=I>>>3|0)<<3)|0,(Q=i[8961])&(I=1<>2]:(i[8961]=I|Q,I=B),i[B+8>>2]=A,i[I+12>>2]=A,i[A+12>>2]=B,void(i[A+8>>2]=I);C=31,i[A+16>>2]=0,i[A+20>>2]=0,I>>>0<=16777215&&(B=I>>>8|0,B<<=E=B+1048320>>>16&8,C=28+((B=((B<<=C=B+520192>>>16&4)<<(Q=B+245760>>>16&2)>>>15|0)-(Q|C|E)|0)<<1|I>>>B+21&1)|0),i[A+28>>2]=C,E=36148+(C<<2)|0;I:{if((Q=i[8962])&(B=1<>>1|0)|0),B=i[E>>2];;){if(Q=B,(-8&i[B+4>>2])==(0|I))break I;if(B=C>>>29|0,C<<=1,!(B=i[16+(E=Q+(4&B)|0)>>2]))break}i[E+16>>2]=A,i[A+24>>2]=Q}else i[8962]=B|Q,i[E>>2]=A,i[A+24>>2]=E;return i[A+12>>2]=A,void(i[A+8>>2]=A)}I=i[Q+8>>2],i[I+12>>2]=A,i[Q+8>>2]=A,i[A+24>>2]=0,i[A+12>>2]=Q,i[A+8>>2]=I}}function U(A,I,g,B,Q){var E,a,r,o,e,t,f,c,y,s,w,D,u,p,l,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0;for(h=E=h+-64|0,a=i[A+60>>2],r=i[A+56>>2],K=i[A+52>>2],x=i[A+48>>2],o=i[A+44>>2],e=i[A+40>>2],t=i[A+36>>2],f=i[A+32>>2],c=i[A+28>>2],y=i[A+24>>2],s=i[A+20>>2],w=i[A+16>>2],D=i[A+12>>2],u=i[A+8>>2],p=i[A+4>>2],l=i[A>>2];;){if(!Q&B>>>0>63|Q)k=g;else{if(_=0,k=F=EA(E,0,64),B|Q)for(;C[F+_|0]=n[I+_|0],!Q&(_=_+1|0)>>>0>>0|Q;);I=k,V=g}for(q=20,m=l,v=p,U=u,S=D,_=w,F=s,g=y,N=c,H=f,Y=t,M=e,d=a,P=r,G=K,R=x,L=o;b=_,m=Hg((_=_+m|0)^R,16),R=Hg(b^(H=m+H|0),12),b=H,H=Hg((H=m)^(m=_+R|0),8),_=Hg(R^(J=b+H|0),7),b=F,v=Hg((F=F+v|0)^G,16),G=Hg(b^(Y=v+Y|0),12),b=Y,Y=Hg((Y=v)^(v=F+G|0),8),F=Hg(G^(X=b+Y|0),7),G=g,U=Hg((g=g+U|0)^P,16),b=P=Hg(G^(M=U+M|0),12),P=Hg((G=U)^(U=g+P|0),8),g=Hg(b^(M=P+M|0),7),G=N,S=Hg((N=N+S|0)^d,16),L=G=Hg(G^(d=S+L|0),12),b=d,d=Hg((d=S)^(S=N+G|0),8),N=Hg(L^(G=b+d|0),7),b=M,M=Hg((m=F+m|0)^d,16),F=Hg((R=b+M|0)^F,12),d=Hg(M^(m=F+m|0),8),F=Hg(F^(M=R+d|0),7),H=Hg((v=g+v|0)^H,16),g=Hg((G=H+G|0)^g,12),R=Hg(H^(v=g+v|0),8),g=Hg(g^(L=G+R|0),7),H=Hg((U=N+U|0)^Y,16),N=Hg((Y=H+J|0)^N,12),G=Hg(H^(U=N+U|0),8),N=Hg(N^(H=Y+G|0),7),Y=Hg((S=_+S|0)^P,16),_=Hg((J=Y+X|0)^_,12),P=Hg(Y^(S=_+S|0),8),_=Hg(_^(Y=J+P|0),7),q=q-2|0;);if(q=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,J=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,X=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,W=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,T=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,j=n[I+24|0]|n[I+25|0]<<8|n[I+26|0]<<16|n[I+27|0]<<24,Z=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,O=n[I+32|0]|n[I+33|0]<<8|n[I+34|0]<<16|n[I+35|0]<<24,z=n[I+36|0]|n[I+37|0]<<8|n[I+38|0]<<16|n[I+39|0]<<24,$=n[I+40|0]|n[I+41|0]<<8|n[I+42|0]<<16|n[I+43|0]<<24,AA=n[I+44|0]|n[I+45|0]<<8|n[I+46|0]<<16|n[I+47|0]<<24,IA=n[I+48|0]|n[I+49|0]<<8|n[I+50|0]<<16|n[I+51|0]<<24,gA=n[I+52|0]|n[I+53|0]<<8|n[I+54|0]<<16|n[I+55|0]<<24,BA=n[I+56|0]|n[I+57|0]<<8|n[I+58|0]<<16|n[I+59|0]<<24,b=n[I+60|0]|n[I+61|0]<<8|n[I+62|0]<<16|n[I+63|0]<<24,xI(k,m+l^(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24)),xI(k+4|0,v+p^q),xI(k+8|0,U+u^J),xI(k+12|0,S+D^X),xI(k+16|0,_+w^W),xI(k+20|0,F+s^T),xI(k+24|0,g+y^j),xI(k+28|0,N+c^Z),xI(k+32|0,H+f^O),xI(k+36|0,Y+t^z),xI(k+40|0,$^M+e),xI(k+44|0,AA^L+o),xI(k+48|0,IA^R+x),xI(k+52|0,gA^G+K),xI(k+56|0,BA^P+r),xI(k+60|0,b^d+a),K=((x=(g=x)+1|0)>>>0>>0)+K|0,!Q&B>>>0<=64){if(!(!B|!Q&B>>>0>63|0!=(0|Q)))for(F=0;C[F+V|0]=n[k+F|0],(0|B)!=(0|(F=F+1|0)););i[A+52>>2]=K,i[A+48>>2]=x,h=E- -64|0;break}I=I- -64|0,g=k- -64|0,Q=Q-1|0,Q=(B=B+-64|0)>>>0<4294967232?Q+1|0:Q}}function S(A,I,g,B){var Q=0,C=0,E=0,a=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0;if(c=i[A+36>>2],a=i[A+32>>2],E=i[A+28>>2],C=i[A+24>>2],o=i[A+20>>2],!B&g>>>0>=16|B)for(H=!n[A+80|0]<<24,s=i[A+4>>2],Y=r(s,5),D=i[A+8>>2],_=r(D,5),G=i[A+12>>2],k=r(G,5),Q=i[A+16>>2],u=r(Q,5),b=Q,w=i[A>>2];Q=eg(e=((n[I+3|0]|n[I+4|0]<<8|n[I+5|0]<<16|n[I+6|0]<<24)>>>2&67108863)+C|0,0,G,0),t=p,C=(y=eg(o=(67108863&(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24))+o|0,0,b,0))+Q|0,Q=p+t|0,Q=C>>>0>>0?Q+1|0:Q,f=C,C=eg(t=((n[I+6|0]|n[I+7|0]<<8|n[I+8|0]<<16|n[I+9|0]<<24)>>>4&67108863)+E|0,0,D,0),Q=p+Q|0,Q=C>>>0>(E=f+C|0)>>>0?Q+1|0:Q,C=E,E=eg(y=((n[I+9|0]|n[I+10|0]<<8|n[I+11|0]<<16|n[I+12|0]<<24)>>>6|0)+a|0,0,s,0),Q=p+Q|0,Q=E>>>0>(a=C+E|0)>>>0?Q+1|0:Q,C=a,a=eg(h=c+H+((n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24)>>>8)|0,0,w,0),Q=p+Q|0,m=c=C+a|0,c=a>>>0>c>>>0?Q+1|0:Q,Q=eg(e,0,D,0),E=p,a=(C=eg(o,0,G,0))+Q|0,Q=p+E|0,Q=C>>>0>a>>>0?Q+1|0:Q,E=eg(t,0,s,0),Q=p+Q|0,Q=E>>>0>(a=E+a|0)>>>0?Q+1|0:Q,E=eg(y,0,w,0),Q=p+Q|0,Q=E>>>0>(a=E+a|0)>>>0?Q+1|0:Q,E=eg(h,0,u,0),Q=p+Q|0,v=a=E+a|0,a=E>>>0>a>>>0?Q+1|0:Q,Q=eg(e,0,s,0),C=p,E=(l=eg(o,0,D,0))+Q|0,Q=p+C|0,Q=E>>>0>>0?Q+1|0:Q,C=eg(t,0,w,0),Q=p+Q|0,Q=C>>>0>(E=C+E|0)>>>0?Q+1|0:Q,C=eg(y,0,u,0),Q=p+Q|0,Q=C>>>0>(E=C+E|0)>>>0?Q+1|0:Q,C=eg(h,0,k,0),Q=p+Q|0,l=E=C+E|0,E=C>>>0>E>>>0?Q+1|0:Q,Q=eg(e,0,w,0),f=p,C=(F=eg(o,0,s,0))+Q|0,Q=p+f|0,Q=C>>>0>>0?Q+1|0:Q,f=eg(t,0,u,0),Q=p+Q|0,Q=(C=f+C|0)>>>0>>0?Q+1|0:Q,f=eg(y,0,k,0),Q=p+Q|0,Q=(C=f+C|0)>>>0>>0?Q+1|0:Q,f=eg(h,0,_,0),Q=p+Q|0,Q=(C=f+C|0)>>>0>>0?Q+1|0:Q,f=C,C=Q,Q=eg(e,0,u,0),F=p,e=(o=eg(o,0,w,0))+Q|0,Q=p+F|0,Q=e>>>0>>0?Q+1|0:Q,o=eg(t,0,k,0),Q=p+Q|0,Q=(e=o+e|0)>>>0>>0?Q+1|0:Q,o=eg(y,0,_,0),Q=p+Q|0,Q=(e=o+e|0)>>>0>>0?Q+1|0:Q,o=eg(h,0,Y,0),Q=p+Q|0,Q=(e=o+e|0)>>>0>>0?Q+1|0:Q,o=e,t=(67108863&Q)<<6|e>>>26,Q=C,t=(67108863&(Q=(e=t+f|0)>>>0>>0?Q+1|0:Q))<<6|(C=e)>>>26,Q=E,Q=(C=t+l|0)>>>0>>0?Q+1|0:Q,t=C,C=(67108863&Q)<<6|C>>>26,Q=a,y=E=C+v|0,E=(67108863&(Q=C>>>0>E>>>0?Q+1|0:Q))<<6|E>>>26,Q=c,c=a=E+m|0,C=(67108863&e)+((Q=r((67108863&(Q=E>>>0>a>>>0?Q+1|0:Q))<<6|a>>>26,5)+(67108863&o)|0)>>>26|0)|0,E=67108863&t,a=67108863&y,c&=67108863,o=67108863&Q,I=I+16|0,!(B=B-(g>>>0<16)|0)&(g=g-16|0)>>>0>15|B;);i[A+20>>2]=o,i[A+36>>2]=c,i[A+32>>2]=a,i[A+28>>2]=E,i[A+24>>2]=C}function N(A,I,g){var B,Q,E,i,a=0,r=0,o=0,e=0,t=0;return h=E=h-160|0,mI(I,g,32,0),C[0|I]=248&n[0|I],C[I+31|0]=63&n[I+31|0]|64,CA(E,I),nI(A,E),r=n[(Q=g)+8|0]|n[Q+9|0]<<8|n[Q+10|0]<<16|n[Q+11|0]<<24,a=n[Q+12|0]|n[Q+13|0]<<8|n[Q+14|0]<<16|n[Q+15|0]<<24,o=n[Q+16|0]|n[Q+17|0]<<8|n[Q+18|0]<<16|n[Q+19|0]<<24,e=n[Q+20|0]|n[Q+21|0]<<8|n[Q+22|0]<<16|n[Q+23|0]<<24,t=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,g=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,B=I,i=n[Q+28|0]|n[Q+29|0]<<8|n[Q+30|0]<<16|n[Q+31|0]<<24,I=n[Q+24|0]|n[Q+25|0]<<8|n[Q+26|0]<<16|n[Q+27|0]<<24,C[B+24|0]=I,C[B+25|0]=I>>>8,C[B+26|0]=I>>>16,C[B+27|0]=I>>>24,C[B+28|0]=i,C[B+29|0]=i>>>8,C[B+30|0]=i>>>16,C[B+31|0]=i>>>24,C[B+16|0]=o,C[B+17|0]=o>>>8,C[B+18|0]=o>>>16,C[B+19|0]=o>>>24,C[B+20|0]=e,C[B+21|0]=e>>>8,C[B+22|0]=e>>>16,C[B+23|0]=e>>>24,C[B+8|0]=r,C[B+9|0]=r>>>8,C[B+10|0]=r>>>16,C[B+11|0]=r>>>24,C[B+12|0]=a,C[B+13|0]=a>>>8,C[B+14|0]=a>>>16,C[B+15|0]=a>>>24,C[0|B]=t,C[B+1|0]=t>>>8,C[B+2|0]=t>>>16,C[B+3|0]=t>>>24,C[B+4|0]=g,C[B+5|0]=g>>>8,C[B+6|0]=g>>>16,C[B+7|0]=g>>>24,o=n[(a=A)+8|0]|n[a+9|0]<<8|n[a+10|0]<<16|n[a+11|0]<<24,e=n[a+12|0]|n[a+13|0]<<8|n[a+14|0]<<16|n[a+15|0]<<24,t=n[a+16|0]|n[a+17|0]<<8|n[a+18|0]<<16|n[a+19|0]<<24,g=n[a+20|0]|n[a+21|0]<<8|n[a+22|0]<<16|n[a+23|0]<<24,I=n[0|a]|n[a+1|0]<<8|n[a+2|0]<<16|n[a+3|0]<<24,A=n[a+4|0]|n[a+5|0]<<8|n[a+6|0]<<16|n[a+7|0]<<24,r=n[a+28|0]|n[a+29|0]<<8|n[a+30|0]<<16|n[a+31|0]<<24,a=n[a+24|0]|n[a+25|0]<<8|n[a+26|0]<<16|n[a+27|0]<<24,C[B+56|0]=a,C[B+57|0]=a>>>8,C[B+58|0]=a>>>16,C[B+59|0]=a>>>24,C[B+60|0]=r,C[B+61|0]=r>>>8,C[B+62|0]=r>>>16,C[B+63|0]=r>>>24,C[B+48|0]=t,C[B+49|0]=t>>>8,C[B+50|0]=t>>>16,C[B+51|0]=t>>>24,C[B+52|0]=g,C[B+53|0]=g>>>8,C[B+54|0]=g>>>16,C[B+55|0]=g>>>24,C[B+40|0]=o,C[B+41|0]=o>>>8,C[B+42|0]=o>>>16,C[B+43|0]=o>>>24,C[B+44|0]=e,C[B+45|0]=e>>>8,C[B+46|0]=e>>>16,C[B+47|0]=e>>>24,C[B+32|0]=I,C[B+33|0]=I>>>8,C[B+34|0]=I>>>16,C[B+35|0]=I>>>24,C[B+36|0]=A,C[B+37|0]=A>>>8,C[B+38|0]=A>>>16,C[B+39|0]=A>>>24,h=E+160|0,0}function M(A,I,g){var B,Q=0,E=0,i=0;h=B=h+-64|0;A:{if(!(!g|g>>>0>=65)){if(Q=-1,!(n[A+80|0]|n[A+81|0]<<8|n[A+82|0]<<16|n[A+83|0]<<24|n[A+84|0]|n[A+85|0]<<8|n[A+86|0]<<16|n[A+87|0]<<24)){if(E=A,(Q=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)>>>0>=129){if(iA(A,128),l(A,i=A+96|0),Q=(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)-128|0,C[A+352|0]=Q,C[A+353|0]=Q>>>8,C[A+354|0]=Q>>>16,C[A+355|0]=Q>>>24,Q>>>0>=129)break A;X(i,A+224|0,Q),Q=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24}iA(E,Q),n[A+356|0]&&(C[A+88|0]=255,C[A+89|0]=255,C[A+90|0]=255,C[A+91|0]=255,C[A+92|0]=255,C[A+93|0]=255,C[A+94|0]=255,C[A+95|0]=255),C[A+80|0]=255,C[A+81|0]=255,C[A+82|0]=255,C[A+83|0]=255,C[A+84|0]=255,C[A+85|0]=255,C[A+86|0]=255,C[A+87|0]=255,EA((Q=A+96|0)+(E=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)|0,0,256-E|0),l(A,Q),tI(B,n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24,n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24),tI(8|B,n[A+8|0]|n[A+9|0]<<8|n[A+10|0]<<16|n[A+11|0]<<24,n[A+12|0]|n[A+13|0]<<8|n[A+14|0]<<16|n[A+15|0]<<24),tI(B+16|0,n[A+16|0]|n[A+17|0]<<8|n[A+18|0]<<16|n[A+19|0]<<24,n[A+20|0]|n[A+21|0]<<8|n[A+22|0]<<16|n[A+23|0]<<24),tI(B+24|0,n[A+24|0]|n[A+25|0]<<8|n[A+26|0]<<16|n[A+27|0]<<24,n[A+28|0]|n[A+29|0]<<8|n[A+30|0]<<16|n[A+31|0]<<24),tI(B+32|0,n[A+32|0]|n[A+33|0]<<8|n[A+34|0]<<16|n[A+35|0]<<24,n[A+36|0]|n[A+37|0]<<8|n[A+38|0]<<16|n[A+39|0]<<24),tI(B+40|0,n[A+40|0]|n[A+41|0]<<8|n[A+42|0]<<16|n[A+43|0]<<24,n[A+44|0]|n[A+45|0]<<8|n[A+46|0]<<16|n[A+47|0]<<24),tI(B+48|0,n[A+48|0]|n[A+49|0]<<8|n[A+50|0]<<16|n[A+51|0]<<24,n[A+52|0]|n[A+53|0]<<8|n[A+54|0]<<16|n[A+55|0]<<24),tI(B+56|0,n[A+56|0]|n[A+57|0]<<8|n[A+58|0]<<16|n[A+59|0]<<24,n[A+60|0]|n[A+61|0]<<8|n[A+62|0]<<16|n[A+63|0]<<24),X(I,B,g),fI(A,64),fI(Q,256),Q=0}return h=B- -64|0,Q}OI(),e()}t(1854,1886,306,1931),e()}function d(A,I){var g,B,Q,C,E,a,r,o,e,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0;g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,u=HI(I+4|0),t=p,h=HI(I+7|0),c=p,D=HI(I+10|0),f=p,B=HI(I+13|0),s=p,y=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,Q=HI(I+20|0),l=p,C=HI(I+23|0),E=p,a=HI(I+26|0),r=p,o=HI(I+29|0),I=f<<3|D>>>29,F=f=D<<3,D=f=f+16777216|0,f=I=f>>>0<16777216?I+1|0:I,c=I=c<<5|h>>>27,e=w=h<<5,t=I=t<<6|(h=u)>>>26,u=I=16777216+(h<<=6)|0,w=I,I=(I=(t=I>>>0<16777216?t+1|0:t)>>25)+c|0,I=(t=e+(w=(33554431&t)<<7|w>>>25)|0)>>>0>>0?I+1|0:I,(c=t+33554432|0)>>>0<33554432&&(I=I+1|0),I=(F-(-33554432&D)|0)+((67108863&I)<<6|c>>>26)|0,i[A+12>>2]=I,I=-67108864&c,i[A+8>>2]=t-I,I=0,w=y=(c=y)+16777216|0,y=I=y>>>0<16777216?1:I,F=c-(-33554432&w)|0,I=s<<2|(c=B)>>>30,s=c<<2,c=I,I=(I=f>>25)+c|0,t=I=(f=(t=s)+(s=(33554431&f)<<7|D>>>25)|0)>>>0>>0?I+1|0:I,c=I=f+33554432|0,I=((67108863&(t=I>>>0<33554432?t+1|0:t))<<6|I>>>26)+F|0,i[A+20>>2]=I,I=-67108864&c,i[A+16>>2]=f-I,s=(t=Q)<<7,I=(I=l<<7|t>>>25)+(t=y>>25)|0,I=(y=s+(c=(33554431&y)<<7|w>>>25)|0)>>>0>>0?I+1|0:I,y=t=y,c=t=t+33554432|0,t=I=t>>>0<33554432?I+1|0:I,I=-67108864&c,i[(f=A)+24>>2]=y-I,y=f,I=E<<5|(f=C)>>>27,l=f<<=5,s=f=f+16777216|0,f=I=f>>>0<16777216?I+1|0:I,I=(l-(-33554432&s)|0)+((67108863&t)<<6|c>>>26)|0,i[y+28>>2]=I,c=(t=a)<<4,t=I=r<<4|t>>>28,I=(I=f>>25)+t|0,I=(f=(w=c)+(c=(33554431&f)<<7|s>>>25)|0)>>>0>>0?I+1|0:I,f=t=f,c=t=t+33554432|0,t=I=t>>>0<33554432?I+1|0:I,I=-67108864&c,i[y+32>>2]=f-I,I=0,f=y=(y=o)<<2&33554428,I=(y=y+16777216|0)>>>0<16777216?I+1|0:I,t=(f-(33554432&y)|0)+((67108863&t)<<6|c>>>26)|0,i[A+36>>2]=t,y=eg((33554431&I)<<7|y>>>25,I>>>25|0,19,0),I=p,I=(t=y+g|0)>>>0>>0?I+1|0:I,(f=t+33554432|0)>>>0<33554432&&(I=I+1|0),I=(h-(-33554432&u)|0)+((67108863&I)<<6|f>>>26)|0,i[A+4>>2]=I,I=A,A=-67108864&f,i[I>>2]=t-A}function P(A,I){var g,B,Q,C,E,n,a,r,o,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0,G=0,k=0;l=t=i[(e=I)+4>>2],D=t>>31,F=t=i[e+8>>2],B=t>>31,w=t=i[e+12>>2],u=t>>31,G=t=i[e+16>>2],Q=t>>31,h=t=i[e+20>>2],s=t>>31,k=t=i[e+24>>2],C=t>>31,E=t=i[e>>2],n=t>>31,c=t=eg(e=i[e+36>>2],e>>31,121666,0),e=p,g=t=t+16777216|0,t=e=t>>>0<16777216?e+1|0:e,a=c-(-33554432&g)|0,f=eg(e=i[I+32>>2],e>>31,121666,0),r=p,c=eg(I=i[I+28>>2],I>>31,121666,0),e=p,y=f,o=I=c+16777216|0,f=I,I=(I=(e=I>>>0<16777216?e+1|0:e)>>25)+r|0,I=(e=y+(f=(33554431&e)<<7|f>>>25)|0)>>>0>>0?I+1|0:I,f=e,e=I,y=I=f+33554432|0,I=((67108863&(e=I>>>0<33554432?e+1|0:e))<<6|I>>>26)+a|0,i[A+36>>2]=I,I=-67108864&y,i[A+32>>2]=f-I,y=c-(-33554432&o)|0,e=eg(k,C,121666,0),k=p,c=eg(h,s,121666,0),I=p,f=e,h=e=c+16777216|0,s=e,e=(e=(I=e>>>0<16777216?I+1|0:I)>>25)+k|0,e=(I=f+(s=(33554431&I)<<7|s>>>25)|0)>>>0>>0?e+1|0:e,(f=I+33554432|0)>>>0<33554432&&(e=e+1|0),e=y+((67108863&e)<<6|f>>>26)|0,i[A+28>>2]=e,e=-67108864&f,i[A+24>>2]=I-e,h=c-(-33554432&h)|0,I=eg(G,Q,121666,0),G=p,c=eg(w,u,121666,0),e=p,y=I,w=I=c+16777216|0,u=(33554431&(e=I>>>0<16777216?e+1|0:e))<<7|I>>>25,e=(e>>25)+G|0,I=e=(f=y+u|0)>>>0>>0?e+1|0:e,I=((67108863&(I=(e=f+33554432|0)>>>0<33554432?I+1|0:I))<<6|e>>>26)+h|0,i[A+20>>2]=I,I=-67108864&e,i[A+16>>2]=f-I,w=c-(-33554432&w)|0,e=eg(F,B,121666,0),F=p,c=eg(l,D,121666,0),I=p,y=e,l=e=c+16777216|0,D=(33554431&(I=e>>>0<16777216?I+1|0:I))<<7|e>>>25,I=(I>>25)+F|0,e=I=(f=y+D|0)>>>0>>0?I+1|0:I,y=I=f+33554432|0,I=((67108863&(e=I>>>0<33554432?e+1|0:e))<<6|I>>>26)+w|0,i[A+12>>2]=I,I=-67108864&y,i[A+8>>2]=f-I,I=eg((33554431&t)<<7|g>>>25,t>>25,19,0),e=p,y=c-(-33554432&l)|0,t=eg(E,n,121666,0),e=p+e|0,e=(I=t+I|0)>>>0>>0?e+1|0:e,(t=I+33554432|0)>>>0<33554432&&(e=e+1|0),e=y+((67108863&e)<<6|t>>>26)|0,i[A+4>>2]=e,e=A,A=-67108864&t,i[e>>2]=I-A}function R(A,I,g,B){var Q,E=0,a=0;h=Q=h-16|0,E=-31;A:{I:{g:{B:switch(B-1|0){case 1:if(I>>>0<13)break I;B=n[35660]|n[35661]<<8|n[35662]<<16|n[35663]<<24,E=n[35656]|n[35657]<<8|n[35658]<<16|n[35659]<<24,C[0|A]=E,C[A+1|0]=E>>>8,C[A+2|0]=E>>>16,C[A+3|0]=E>>>24,C[A+4|0]=B,C[A+5|0]=B>>>8,C[A+6|0]=B>>>16,C[A+7|0]=B>>>24,B=n[35665]|n[35666]<<8|n[35667]<<16|n[35668]<<24,E=n[35661]|n[35662]<<8|n[35663]<<16|n[35664]<<24,C[A+5|0]=E,C[A+6|0]=E>>>8,C[A+7|0]=E>>>16,C[A+8|0]=E>>>24,C[A+9|0]=B,C[A+10|0]=B>>>8,C[A+11|0]=B>>>16,C[A+12|0]=B>>>24,a=-12,B=12;break g;case 0:break B;default:break A}if(I>>>0<12)break I;B=n[35673]|n[35674]<<8|n[35675]<<16|n[35676]<<24,E=n[35669]|n[35670]<<8|n[35671]<<16|n[35672]<<24,C[0|A]=E,C[A+1|0]=E>>>8,C[A+2|0]=E>>>16,C[A+3|0]=E>>>24,C[A+4|0]=B,C[A+5|0]=B>>>8,C[A+6|0]=B>>>16,C[A+7|0]=B>>>24,B=n[35677]|n[35678]<<8|n[35679]<<16|n[35680]<<24,C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,a=-11,B=11}if(E=oA(g))break A;if(qA(Q+5|0,19),!((E=I+a|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+B|0,Q+5|0,I+1|0),!((B=E-I|0)>>>0<4)&&(C[0|(A=A+I|0)]=36,C[A+1|0]=109,C[A+2|0]=61,C[A+3|0]=0,qA(Q+5|0,i[g+44>>2]),!((B=B-3|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+3|0,Q+5|0,I+1|0),!((B=B-I|0)>>>0<4)&&(C[0|(A=A+I|0)]=44,C[A+1|0]=116,C[A+2|0]=61,C[A+3|0]=0,qA(Q+5|0,i[g+40>>2]),!((B=B-3|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+3|0,Q+5|0,I+1|0),!((B=B-I|0)>>>0<4)&&(C[0|(A=A+I|0)]=44,C[A+1|0]=112,C[A+2|0]=61,C[A+3|0]=0,qA(Q+5|0,i[g+48>>2]),!((B=B-3|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+3|0,Q+5|0,I+1|0),!((B=B-I|0)>>>0<2)&&(C[0|(A=A+I|0)]=36,C[A+1|0]=0,O(A=A+1|0,I=B-1|0,i[g+16>>2],i[g+20>>2],3)))))))))){if(E=-31,(B=(B=I)-(I=YA(A))|0)>>>0<2)break A;return C[0|(A=A+I|0)]=36,C[A+1|0]=0,A=O(A+1|0,B-1|0,i[g>>2],i[g+4>>2],3),h=Q+16|0,A?0:-31}}E=-31}return h=Q+16|0,E}function J(A,I,g,B){var Q,E=0;Q=E=h,h=E=E-576&-64,i[E+188>>2]=0,xI(E+188|0,I);A:if(I>>>0<=64){if((0|iI(E+192|0,0,0,I))<0)break A;if((0|hg(E+192|0,E+188|0,4,0))<0)break A;if((0|hg(E+192|0,g,B,0))<0)break A;dI(E+192|0,A,I)}else if(!((0|iI(E+192|0,0,0,64))<0||(0|hg(E+192|0,E+188|0,4,0))<0||(0|hg(E+192|0,g,B,0))<0||(0|dI(E+192|0,E+112|0,64))<0)){if(g=i[E+116>>2],B=i[E+112>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24,g=i[E+124>>2],B=i[E+120>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=g,C[A+13|0]=g>>>8,C[A+14|0]=g>>>16,C[A+15|0]=g>>>24,g=i[E+140>>2],B=i[E+136>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=g,C[A+29|0]=g>>>8,C[A+30|0]=g>>>16,C[A+31|0]=g>>>24,g=i[E+132>>2],B=i[E+128>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=g,C[A+21|0]=g>>>8,C[A+22|0]=g>>>16,C[A+23|0]=g>>>24,A=A+32|0,(I=I-32|0)>>>0>=65)for(;;){if(X(E+48|0,E+112|0,64),(0|GI(E+112|0,64,E+48|0,64,0,0,0))<0)break A;if(g=i[E+116>>2],B=i[E+112>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24,g=i[E+124>>2],B=i[E+120>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=g,C[A+13|0]=g>>>8,C[A+14|0]=g>>>16,C[A+15|0]=g>>>24,g=i[E+140>>2],B=i[E+136>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=g,C[A+29|0]=g>>>8,C[A+30|0]=g>>>16,C[A+31|0]=g>>>24,g=i[E+132>>2],B=i[E+128>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=g,C[A+21|0]=g>>>8,C[A+22|0]=g>>>16,C[A+23|0]=g>>>24,A=A+32|0,!((I=I-32|0)>>>0>64))break}X(E+48|0,E+112|0,64),(0|GI(E+112|0,I,E+48|0,64,0,0,0))<0||X(A,E+112|0,I)}fI(E+192|0,384),h=Q}function x(A,I,g){var B=0,Q=0,C=0,E=0,i=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,p=0;for(C=2036477234,e=857760878,t=1634760805,E=1797285236,o=n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,B=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24,Q=n[g+8|0]|n[g+9|0]<<8|n[g+10|0]<<16|n[g+11|0]<<24,a=n[g+12|0]|n[g+13|0]<<8|n[g+14|0]<<16|n[g+15|0]<<24,c=n[g+16|0]|n[g+17|0]<<8|n[g+18|0]<<16|n[g+19|0]<<24,y=n[g+20|0]|n[g+21|0]<<8|n[g+22|0]<<16|n[g+23|0]<<24,w=n[g+24|0]|n[g+25|0]<<8|n[g+26|0]<<16|n[g+27|0]<<24,h=n[g+28|0]|n[g+29|0]<<8|n[g+30|0]<<16|n[g+31|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,f=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,i=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,I=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24;r=o,t=Hg((s=g)^(g=o+t|0),16),r=c=Hg(r^(o=t+c|0),12),c=Hg((s=t)^(t=g+c|0),8),o=Hg(r^(D=c+o|0),7),r=B,e=Hg((g=B+e|0)^f,16),r=f=Hg(r^(B=e+y|0),12),f=Hg((s=e)^(e=g+f|0),8),g=Hg(r^(y=f+B|0),7),r=Q,B=Hg((C=C+Q|0)^i,16),r=i=Hg(r^(Q=B+w|0),12),s=Hg(B^(i=C+i|0),8),C=Hg(r^(B=s+Q|0),7),E=Hg((Q=I)^(I=E+a|0),16),a=Hg((Q=E+h|0)^a,12),I=Hg(E^(u=I+a|0),8),E=Hg(a^(Q=I+Q|0),7),r=B,B=Hg((B=I)^(I=g+t|0),16),g=Hg((a=r+B|0)^g,12),I=Hg(B^(t=I+g|0),8),B=Hg(g^(w=a+I|0),7),r=Q,Q=Hg((g=C+e|0)^c,16),C=Hg((a=r+Q|0)^C,12),g=Hg(Q^(e=g+C|0),8),Q=Hg(C^(h=a+g|0),7),a=Hg((C=E+i|0)^f,16),E=Hg((i=a+D|0)^E,12),f=Hg(a^(C=C+E|0),8),a=Hg(E^(c=i+f|0),7),i=Hg((E=o+u|0)^s,16),o=Hg((y=i+y|0)^o,12),i=Hg(i^(E=E+o|0),8),o=Hg(o^(y=y+i|0),7),10!=(0|(p=p+1|0)););xI(A,t),xI(A+4|0,e),xI(A+8|0,C),xI(A+12|0,E),xI(A+16|0,g),xI(A+20|0,f),xI(A+24|0,i),xI(A+28|0,I)}function L(A){var I,g=0,B=0;h=I=h-48|0,g=n[28+(A|=0)|0]|n[A+29|0]<<8|n[A+30|0]<<16|n[A+31|0]<<24,i[I+24>>2]=n[A+24|0]|n[A+25|0]<<8|n[A+26|0]<<16|n[A+27|0]<<24,i[I+28>>2]=g,g=n[A+20|0]|n[A+21|0]<<8|n[A+22|0]<<16|n[A+23|0]<<24,i[I+16>>2]=n[A+16|0]|n[A+17|0]<<8|n[A+18|0]<<16|n[A+19|0]<<24,i[I+20>>2]=g,g=n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24,i[I>>2]=n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24,i[I+4>>2]=g,g=n[A+12|0]|n[A+13|0]<<8|n[A+14|0]<<16|n[A+15|0]<<24,i[I+8>>2]=n[A+8|0]|n[A+9|0]<<8|n[A+10|0]<<16|n[A+11|0]<<24,i[I+12>>2]=g,g=n[A+40|0]|n[A+41|0]<<8|n[A+42|0]<<16|n[A+43|0]<<24,i[I+32>>2]=n[A+36|0]|n[A+37|0]<<8|n[A+38|0]<<16|n[A+39|0]<<24,i[I+36>>2]=g,Vg[i[8957]](I,I,40,0,A+32|0,0,A),g=i[I+28>>2],B=i[I+24>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=g,C[A+29|0]=g>>>8,C[A+30|0]=g>>>16,C[A+31|0]=g>>>24,g=i[I+20>>2],B=i[I+16>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=g,C[A+21|0]=g>>>8,C[A+22|0]=g>>>16,C[A+23|0]=g>>>24,g=i[I+12>>2],B=i[I+8>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=g,C[A+13|0]=g>>>8,C[A+14|0]=g>>>16,C[A+15|0]=g>>>24,g=i[I+4>>2],B=i[I>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24,g=i[I+36>>2],B=i[I+32>>2],C[A+36|0]=B,C[A+37|0]=B>>>8,C[A+38|0]=B>>>16,C[A+39|0]=B>>>24,C[A+40|0]=g,C[A+41|0]=g>>>8,C[A+42|0]=g>>>16,C[A+43|0]=g>>>24,XI(A),h=I+48|0}function K(A,I,g){var B=0,Q=0,C=0,E=0,i=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,p=0,l=0,F=0;for(Q=2036477234,C=857760878,E=1634760805,i=1797285236,w=20,o=n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,s=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24,h=n[g+8|0]|n[g+9|0]<<8|n[g+10|0]<<16|n[g+11|0]<<24,c=n[g+12|0]|n[g+13|0]<<8|n[g+14|0]<<16|n[g+15|0]<<24,e=n[g+16|0]|n[g+17|0]<<8|n[g+18|0]<<16|n[g+19|0]<<24,a=n[g+20|0]|n[g+21|0]<<8|n[g+22|0]<<16|n[g+23|0]<<24,t=n[g+24|0]|n[g+25|0]<<8|n[g+26|0]<<16|n[g+27|0]<<24,f=n[g+28|0]|n[g+29|0]<<8|n[g+30|0]<<16|n[g+31|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,r=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,B=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,I=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24;D=B,B=Hg(E+a|0,7)^c,y=D^Hg(B+E|0,9),u=Hg(B+y|0,13)^a,c=Hg(y+u|0,18),I=Hg(C+o|0,7)^I,t=Hg(I+C|0,9)^t,o=Hg(I+t|0,13)^o,l=Hg(t+o|0,18),f=Hg(g+Q|0,7)^f,a=Hg(f+Q|0,9)^s,p=Hg(a+f|0,13)^g,F=Hg(a+p|0,18),g=Hg(i+e|0,7)^h,r=Hg(g+i|0,9)^r,e=Hg(g+r|0,13)^e,D=Hg(r+e|0,18),o=Hg((E^=c)+g|0,7)^o,s=Hg(o+E|0,9)^a,h=Hg(o+s|0,13)^g,E=Hg(s+h|0,18)^E,g=Hg((C^=l)+B|0,7)^p,r=Hg(g+C|0,9)^r,c=Hg(g+r|0,13)^B,C=Hg(r+c|0,18)^C,e=Hg((Q^=F)+I|0,7)^e,B=Hg(e+Q|0,9)^y,I=Hg(B+e|0,13)^I,Q=Hg(I+B|0,18)^Q,a=Hg((i^=D)+f|0,7)^u,t=Hg(a+i|0,9)^t,f=Hg(a+t|0,13)^f,i=Hg(t+f|0,18)^i,y=w>>>0>2,w=w-2|0,y;);return xI(A,E),xI(A+4|0,C),xI(A+8|0,Q),xI(A+12|0,i),xI(A+16|0,g),xI(A+20|0,r),xI(A+24|0,B),xI(A+28|0,I),0}function q(A,I,g,B,Q,E,a){var r,o,e,t,f,c,y,s=0;return h=r=h-560|0,ig(r+352|0,a),mI(r+288|0,E,32,0),V(r+352|0,r+320|0,32,0),V(r+352|0,g,B,Q),UI(r+352|0,r+224|0),o=n[(s=E)+32|0]|n[s+33|0]<<8|n[s+34|0]<<16|n[s+35|0]<<24,e=n[s+36|0]|n[s+37|0]<<8|n[s+38|0]<<16|n[s+39|0]<<24,t=n[s+40|0]|n[s+41|0]<<8|n[s+42|0]<<16|n[s+43|0]<<24,f=n[s+44|0]|n[s+45|0]<<8|n[s+46|0]<<16|n[s+47|0]<<24,c=n[s+48|0]|n[s+49|0]<<8|n[s+50|0]<<16|n[s+51|0]<<24,E=n[s+52|0]|n[s+53|0]<<8|n[s+54|0]<<16|n[s+55|0]<<24,y=n[s+60|0]|n[s+61|0]<<8|n[s+62|0]<<16|n[s+63|0]<<24,s=n[s+56|0]|n[s+57|0]<<8|n[s+58|0]<<16|n[s+59|0]<<24,C[A+56|0]=s,C[A+57|0]=s>>>8,C[A+58|0]=s>>>16,C[A+59|0]=s>>>24,C[A+60|0]=y,C[A+61|0]=y>>>8,C[A+62|0]=y>>>16,C[A+63|0]=y>>>24,C[A+48|0]=c,C[A+49|0]=c>>>8,C[A+50|0]=c>>>16,C[A+51|0]=c>>>24,C[A+52|0]=E,C[A+53|0]=E>>>8,C[A+54|0]=E>>>16,C[A+55|0]=E>>>24,C[A+40|0]=t,C[A+41|0]=t>>>8,C[A+42|0]=t>>>16,C[A+43|0]=t>>>24,C[A+44|0]=f,C[A+45|0]=f>>>8,C[A+46|0]=f>>>16,C[A+47|0]=f>>>24,C[0|(E=A+32|0)]=o,C[E+1|0]=o>>>8,C[E+2|0]=o>>>16,C[E+3|0]=o>>>24,C[E+4|0]=e,C[E+5|0]=e>>>8,C[E+6|0]=e>>>16,C[E+7|0]=e>>>24,G(r+224|0),CA(r,r+224|0),nI(A,r),ig(r+352|0,a),V(r+352|0,A,64,0),V(r+352|0,g,B,Q),UI(r+352|0,r+160|0),G(r+160|0),C[r+288|0]=248&n[r+288|0],C[r+319|0]=63&n[r+319|0]|64,function(A,I,g,B){var Q,E,i,a,r,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L,K,q,X,V,W,T,j,Z,O,z,$,AA,IA=0,gA=0,BA=0,QA=0,CA=0,EA=0,iA=0,nA=0,aA=0,rA=0,oA=0,eA=0,tA=0,fA=0,cA=0,yA=0,sA=0,wA=0,hA=0,DA=0,uA=0,pA=0,lA=0,FA=0,GA=0,kA=0,_A=0,HA=0,YA=0,bA=0,mA=0,vA=0,UA=0,SA=0,NA=0,MA=0,dA=0,PA=0,RA=0,JA=0,xA=0,LA=0,KA=0,qA=0,XA=0,VA=0,WA=0,TA=0,jA=0,ZA=0,OA=0;RA=HI(I),sA=n[I+2|0]|n[I+3|0]<<8|n[I+4|0]<<16|n[I+5|0]<<24,WA=HI(I+5|0),YA=p,wA=n[I+7|0]|n[I+8|0]<<8|n[I+9|0]<<16|n[I+10|0]<<24,hA=n[I+10|0]|n[I+11|0]<<8|n[I+12|0]<<16|n[I+13|0]<<24,mA=HI(I+13|0),oA=p,tA=n[I+15|0]|n[I+16|0]<<8|n[I+17|0]<<16|n[I+18|0]<<24,KA=HI(I+18|0),fA=p,bA=HI(I+21|0),iA=n[I+23|0]|n[I+24|0]<<8|n[I+25|0]<<16|n[I+26|0]<<24,aA=HI(I+26|0),QA=p,BA=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,NA=HI(g),pA=n[(I=g)+2|0]|n[I+3|0]<<8|n[I+4|0]<<16|n[I+5|0]<<24,XA=HI(I+5|0),rA=p,cA=n[I+7|0]|n[I+8|0]<<8|n[I+9|0]<<16|n[I+10|0]<<24,yA=n[I+10|0]|n[I+11|0]<<8|n[I+12|0]<<16|n[I+13|0]<<24,VA=HI(I+13|0),eA=p,CA=n[I+15|0]|n[I+16|0]<<8|n[I+17|0]<<16|n[I+18|0]<<24,qA=HI(I+18|0),gA=p,JA=HI(I+21|0),IA=n[I+23|0]|n[I+24|0]<<8|n[I+25|0]<<16|n[I+26|0]<<24,nA=HI(I+26|0),g=p,I=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,Z=HI(B),O=n[B+2|0]|n[B+3|0]<<8|n[B+4|0]<<16|n[B+5|0]<<24,z=HI(B+5|0),$=p,MA=n[B+7|0]|n[B+8|0]<<8|n[B+9|0]<<16|n[B+10|0]<<24,xA=n[B+10|0]|n[B+11|0]<<8|n[B+12|0]<<16|n[B+13|0]<<24,LA=HI(B+13|0),SA=p,vA=n[B+15|0]|n[B+16|0]<<8|n[B+17|0]<<16|n[B+18|0]<<24,TA=HI(B+18|0),_A=p,FA=HI(B+21|0),I=eg(Q=I>>>7|0,0,E=2097151&((3&QA)<<30|aA>>>2),0),EA=p,QA=I,I=eg(i=2097151&((3&g)<<30|nA>>>2),0,a=BA>>>7|0,0),g=p+EA|0,EA=BA=QA+I|0,BA=I>>>0>BA>>>0?g+1|0:g,I=eg(E,0,i,0),QA=p,IA=(g=eg(r=IA>>>5&2097151,0,a,0))+I|0,I=p+QA|0,g=I=g>>>0>IA>>>0?I+1|0:I,I=eg(Q,0,o=iA>>>5&2097151,0),g=p+g|0,iA=IA=I+IA|0,lA=g=I>>>0>IA>>>0?g+1|0:g,DA=(I=IA)- -1048576|0,uA=g=g-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+BA|0,aA=I=(g=(2097151&g)<<11|DA>>>21)>>>0>(BA=QA=g+EA|0)>>>0?I+1|0:I,GA=(I=BA)- -1048576|0,nA=EA=aA-((I>>>0<4293918720)-1|0)|0,QA=eg(Q,0,a,0),g=HA=(PA=p)-(((I=QA)>>>0<4293918720)-1|0)|0,IA=EA>>21,HA=(2097151&EA)<<11|GA>>>21,QA=I-(EA=-2097152&(dA=I- -1048576|0))|0,I=(PA-((I>>>0>>0)+g|0)|0)+IA|0,P=I=QA>>>0>(v=HA+QA|0)>>>0?I+1|0:I,EA=eg(v,I,-683901,-1),QA=p,R=I=g>>21,I=eg(S=(2097151&g)<<11|dA>>>21,I,136657,0),IA=p+QA|0,HA=g=I+EA|0,EA=I>>>0>g>>>0?IA+1|0:IA,I=eg(e=2097151&((1&eA)<<31|VA>>>1),0,E,0),g=p,IA=I,I=eg(t=yA>>>4&2097151,0,a,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(f=CA>>>6&2097151,0,o,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,m=I=0,QA=IA,IA=eg(c=2097151&JA,I,y=2097151&((7&fA)<<29|KA>>>3),0),I=p+g|0,I=IA>>>0>(QA=QA+IA|0)>>>0?I+1|0:I,IA=eg(s=2097151&((7&gA)<<29|qA>>>3),0,w=2097151&bA,0),g=p+I|0,g=IA>>>0>(QA=IA+QA|0)>>>0?g+1|0:g,I=eg(r,0,h=tA>>>6&2097151,0),IA=p+g|0,IA=I>>>0>(QA=I+QA|0)>>>0?IA+1|0:IA,g=eg(i,0,D=2097151&((1&oA)<<31|mA>>>1),0),I=p+IA|0,g=g>>>0>(IA=QA=g+QA|0)>>>0?I+1|0:I,I=eg(Q,0,u=hA>>>4&2097151,0),g=p+g|0,fA=IA=I+IA|0,QA=I>>>0>IA>>>0?g+1|0:g,I=eg(E,0,t,0),g=p,gA=(IA=I)+(I=eg(l=cA>>>7&2097151,0,a,0))|0,IA=p+g|0,IA=I>>>0>gA>>>0?IA+1|0:IA,g=eg(o,0,e,0),I=p+IA|0,I=g>>>0>(gA=g+gA|0)>>>0?I+1|0:I,IA=eg(f,0,w,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,I=eg(c,m,h,0),g=p+g|0,g=I>>>0>(IA=I+gA|0)>>>0?g+1|0:g,gA=(I=IA)+(IA=eg(y,0,s,0))|0,I=p+g|0,I=IA>>>0>gA>>>0?I+1|0:I,g=eg(r,0,D,0),IA=p+I|0,IA=g>>>0>(gA=g+gA|0)>>>0?IA+1|0:IA,g=eg(i,0,u,0),I=p+IA|0,g=g>>>0>(IA=gA=g+gA|0)>>>0?I+1|0:I,I=eg(Q,0,F=wA>>>7&2097151,0),g=p+g|0,yA=IA=I+IA|0,CA=g=I>>>0>IA>>>0?g+1|0:g,eA=(I=IA)- -1048576|0,gA=g=g-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+QA|0,g=I=(g=(2097151&g)<<11|eA>>>21)>>>0>(cA=g+fA|0)>>>0?I+1|0:I,I=I+EA|0,I=(IA=QA=cA)>>>0>(cA=IA+HA|0)>>>0?I+1|0:I,EA=(EA=g)-(((g=QA)>>>0<4293918720)-1|0)|0,oA=g- -1048576|0,tA=(g=IA=cA)-(IA=-2097152&oA)|0,fA=I-((QA=EA)+(g>>>0>>0)|0)|0,N=BA-(I=-2097152&GA)|0,J=g=aA-((I>>>0>BA>>>0)+nA|0)|0,I=eg(S,R,-997805,-1),IA=p+CA|0,IA=I>>>0>(BA=I+yA|0)>>>0?IA+1|0:IA,CA=(I=BA)+(BA=eg(v,P,136657,0))|0,I=p+IA|0,g=eg(N,g,-683901,-1),I=p+(BA>>>0>CA>>>0?I+1|0:I)|0,I=g>>>0>(IA=g+CA|0)>>>0?I+1|0:I,EA=IA-(g=-2097152&eA)|0,CA=I-((g>>>0>IA>>>0)+gA|0)|0,I=eg(E,0,l,0),IA=p,BA=(g=eg(G=2097151&((3&rA)<<30|XA>>>2),0,a,0))+I|0,I=p+IA|0,I=g>>>0>BA>>>0?I+1|0:I,IA=eg(o,0,t,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,I=eg(e,0,w,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(f,0,y,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,IA=eg(c,m,D,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,IA=eg(s,0,h,0),I=p+g|0,I=IA>>>0>(BA=IA+BA|0)>>>0?I+1|0:I,IA=eg(r,0,u,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,I=eg(i,0,F,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(Q,0,k=2097151&((3&YA)<<30|WA>>>2),0),I=p+IA|0,BA=g>>>0>(gA=BA=g+BA|0)>>>0?I+1|0:I,I=eg(E,0,G,0),g=p,IA=I,I=eg(_=pA>>>5&2097151,0,a,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,nA=(I=eg(o,0,l,0))+IA|0,IA=p+g|0,IA=I>>>0>nA>>>0?IA+1|0:IA,g=eg(t,0,w,0),I=p+IA|0,I=g>>>0>(nA=g+nA|0)>>>0?I+1|0:I,g=eg(e,0,y,0),I=p+I|0,I=g>>>0>(IA=g+nA|0)>>>0?I+1|0:I,nA=(g=IA)+(IA=eg(f,0,h,0))|0,g=p+I|0,g=IA>>>0>nA>>>0?g+1|0:g,I=eg(c,m,u,0),g=p+g|0,g=I>>>0>(IA=I+nA|0)>>>0?g+1|0:g,nA=(I=eg(s,0,D,0))+IA|0,IA=p+g|0,IA=I>>>0>nA>>>0?IA+1|0:IA,g=eg(r,0,F,0),I=p+IA|0,I=g>>>0>(nA=g+nA|0)>>>0?I+1|0:I,g=eg(i,0,k,0),I=p+I|0,g=I=g>>>0>(IA=g+nA|0)>>>0?I+1|0:I,I=eg(Q,0,H=sA>>>5&2097151,0),g=p+g|0,cA=IA=I+IA|0,XA=g=I>>>0>IA>>>0?g+1|0:g,AA=(I=IA)- -1048576|0,VA=IA=g-((I>>>0<4293918720)-1|0)|0,I=(I=IA>>21)+BA|0,yA=IA=(g=(2097151&IA)<<11|AA>>>21)+gA|0,qA=I=g>>>0>IA>>>0?I+1|0:I,WA=(I=IA)- -1048576|0,JA=IA=qA-((I>>>0<4293918720)-1|0)|0,g=(I=IA>>21)+CA|0,eA=BA=(IA=(2097151&IA)<<11|WA>>>21)+EA|0,PA=g=IA>>>0>BA>>>0?g+1|0:g,mA=(I=BA)- -1048576|0,HA=IA=g-((I>>>0<4293918720)-1|0)|0,I=(I=IA>>21)+fA|0,CA=IA=(g=(2097151&IA)<<11|mA>>>21)+tA|0,sA=IA=(GA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,aA=(2097151&IA)<<11|(bA=I- -1048576|0)>>>21,gA=IA>>21,I=eg(E,0,f,0),g=p,IA=I,I=eg(a,0,e,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(c,m,w,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,BA=(I=IA)+(IA=eg(o,0,s,0))|0,I=p+g|0,I=IA>>>0>BA>>>0?I+1|0:I,g=eg(r,0,y,0),IA=p+I|0,IA=g>>>0>(BA=g+BA|0)>>>0?IA+1|0:IA,g=eg(i,0,h,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,IA=eg(Q,0,D,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,IA=eg(S,R,-683901,-1),g=(I=g)+p|0,g=IA>>>0>(EA=BA+IA|0)>>>0?g+1|0:g,IA=EA,EA=(EA=I)-(((I=BA)>>>0<4293918720)-1|0)|0,pA=I- -1048576|0,nA=(I=IA)-(IA=-2097152&pA)|0,IA=g-((BA=EA)+(I>>>0>>0)|0)|0,I=(I=QA>>21)+IA|0,I=(g=(2097151&QA)<<11|oA>>>21)>>>0>(QA=g+nA|0)>>>0?I+1|0:I,EA=(g=QA)-(IA=-2097152&(rA=g- -1048576|0))|0,IA=(I-((g>>>0>>0)+(QA=nA=I-((g>>>0<4293918720)-1|0)|0)|0)|0)+gA|0,x=aA=EA+aA|0,L=IA=EA>>>0>aA>>>0?IA+1|0:IA,nA=eg(aA,IA,-683901,-1),EA=p,g=eg(o,0,c,m),I=p,IA=g,g=eg(a,0,f,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(E,0,s,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,IA=eg(r,0,w,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,IA=eg(i,0,y,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,I=eg(Q,0,h,0),IA=p+g|0,IA=I>>>0>(gA=I+gA|0)>>>0?IA+1|0:IA,I=(I=BA>>21)+IA|0,wA=gA=(I=(g=(2097151&BA)<<11|pA>>>21)>>>0>(BA=g+gA|0)>>>0?I+1|0:I)-(((g=BA)>>>0<4293918720)-1|0)|0,BA=g-(IA=-2097152&(UA=g- -1048576|0))|0,IA=(I-((g>>>0>>0)+gA|0)|0)+(QA>>21)|0,K=BA=(I=(2097151&QA)<<11|rA>>>21)+BA|0,q=IA=I>>>0>BA>>>0?IA+1|0:IA,g=eg(BA,IA,136657,0),I=p+EA|0,KA=IA=g+nA|0,hA=g>>>0>IA>>>0?I+1|0:I,g=eg(w,0,_,0),I=p,IA=g,g=eg(Y=2097151&NA,0,o,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,BA=(g=IA)+(IA=eg(y,0,G,0))|0,g=p+I|0,g=IA>>>0>BA>>>0?g+1|0:g,I=eg(h,0,l,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(t,0,D,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,IA=eg(e,0,u,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,IA=eg(f,0,F,0),I=p+g|0,I=IA>>>0>(BA=IA+BA|0)>>>0?I+1|0:I,IA=eg(c,m,H,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,I=eg(s,0,k,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(r,0,b=2097151&RA,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,QA=BA=(IA=(n[B+23|0]|n[B+24|0]<<8|n[B+25|0]<<16|n[B+26|0]<<24)>>>5&2097151)+BA|0,BA=IA>>>0>BA>>>0?I+1|0:I,I=eg(y,0,_,0),g=p,IA=I,I=eg(w,0,Y,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,gA=(I=eg(h,0,G,0))+IA|0,IA=p+g|0,IA=I>>>0>gA>>>0?IA+1|0:IA,g=eg(D,0,l,0),I=p+IA|0,I=g>>>0>(gA=g+gA|0)>>>0?I+1|0:I,g=eg(t,0,u,0),I=p+I|0,I=g>>>0>(IA=g+gA|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(e,0,F,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,I=eg(f,0,k,0),g=p+g|0,g=I>>>0>(IA=I+gA|0)>>>0?g+1|0:g,gA=(I=eg(c,m,b,0))+IA|0,IA=p+g|0,IA=I>>>0>gA>>>0?IA+1|0:IA,g=eg(s,0,H,0),I=p+IA|0,I=g>>>0>(gA=g+gA|0)>>>0?I+1|0:I,gA=IA=(g=2097151&FA)+gA|0,tA=IA=(oA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(YA=I- -1048576|0)>>>21,IA=(IA>>>21|0)+BA|0,rA=IA=I>>>0>(QA=I+QA|0)>>>0?IA+1|0:IA,NA=iA-(I=-2097152&DA)|0,FA=lA-((I>>>0>iA>>>0)+uA|0)|0,g=eg(E,0,r,0),I=p,IA=g,g=eg(a,0,c,m),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,BA=(g=IA)+(IA=eg(i,0,o,0))|0,g=p+I|0,g=IA>>>0>BA>>>0?g+1|0:g,I=eg(Q,0,w,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,EA=BA,I=eg(a,0,s,0),g=p,BA=I,I=eg(E,0,c,m),g=p+g|0,g=I>>>0>(BA=BA+I|0)>>>0?g+1|0:g,iA=(I=BA)+(BA=eg(o,0,r,0))|0,I=p+g|0,I=BA>>>0>iA>>>0?I+1|0:I,g=eg(i,0,w,0),I=p+I|0,I=g>>>0>(BA=g+iA|0)>>>0?I+1|0:I,iA=(g=BA)+(BA=eg(Q,0,y,0))|0,g=p+I|0,aA=g=BA>>>0>iA>>>0?g+1|0:g,lA=(I=BA=iA)- -1048576|0,nA=iA=g-((I>>>0<4293918720)-1|0)|0,g=(I=iA>>21)+IA|0,EA=g=(IA=EA=(iA=(2097151&iA)<<11|lA>>>21)+EA|0)>>>0>>0?g+1|0:g,uA=(I=IA)- -1048576|0,g=(I=(iA=DA=g-((I>>>0<4293918720)-1|0)|0)>>21)+FA|0,X=g=(DA=(2097151&iA)<<11|uA>>>21)>>>0>(U=NA=DA+NA|0)>>>0?g+1|0:g,FA=eg(U,g,470296,0),DA=p,M=IA-(g=-2097152&uA)|0,dA=I=EA-((g>>>0>IA>>>0)+iA|0)|0,g=eg(N,J,666643,0),IA=p+DA|0,IA=g>>>0>(iA=g+FA|0)>>>0?IA+1|0:IA,g=eg(M,I,654183,0),I=p+IA|0,g=g>>>0>(EA=iA=g+iA|0)>>>0?I+1|0:I,I=BA-(IA=-2097152&lA)|0,IA=(wA>>21)+(iA=aA-((IA>>>0>BA>>>0)+nA|0)|0)|0,V=nA=(BA=(2097151&wA)<<11|UA>>>21)+I|0,RA=IA=BA>>>0>nA>>>0?IA+1|0:IA,jA=QA- -1048576|0,BA=iA=rA-((QA>>>0<4293918720)-1|0)|0,I=eg(nA,IA,-997805,-1),g=p+g|0,I=(g=I>>>0>(IA=I+EA|0)>>>0?g+1|0:g)+rA|0,I=IA>>>0>(QA=IA+QA|0)>>>0?I+1|0:I,FA=(IA=QA)-(g=-2097152&jA)|0,DA=I-((g>>>0>IA>>>0)+BA|0)|0,I=eg(M,dA,470296,0),g=p,QA=(IA=I)+(I=eg(U,X,666643,0))|0,IA=p+g|0,IA=I>>>0>QA>>>0?IA+1|0:IA,g=eg(nA,RA,654183,0),I=p+IA|0,g=oA+(g>>>0>(QA=g+QA|0)>>>0?I+1|0:I)|0,rA=(IA=gA+QA|0)-(I=-2097152&YA)|0,iA=(g=IA>>>0>>0?g+1|0:g)-((I>>>0>IA>>>0)+tA|0)|0,g=eg(h,0,_,0),I=p,IA=g,g=eg(y,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,g=eg(D,0,G,0),I=p+I|0,I=g>>>0>(IA=g+IA|0)>>>0?I+1|0:I,QA=(g=IA)+(IA=eg(u,0,l,0))|0,g=p+I|0,g=IA>>>0>QA>>>0?g+1|0:g,I=eg(t,0,F,0),IA=p+g|0,IA=I>>>0>(QA=I+QA|0)>>>0?IA+1|0:IA,I=eg(e,0,k,0),g=p+IA|0,g=I>>>0>(QA=I+QA|0)>>>0?g+1|0:g,IA=eg(f,0,H,0),I=p+g|0,I=IA>>>0>(QA=IA+QA|0)>>>0?I+1|0:I,g=eg(s,0,b,0),I=p+I|0,I=g>>>0>(IA=g+QA|0)>>>0?I+1|0:I,g=IA,QA=(IA=2097151&((7&_A)<<29|TA>>>3))>>>0>(gA=QA=g+IA|0)>>>0?I+1|0:I,I=eg(D,0,_,0),g=p,EA=(IA=I)+(I=eg(h,0,Y,0))|0,IA=p+g|0,IA=I>>>0>EA>>>0?IA+1|0:IA,g=eg(u,0,G,0),I=p+IA|0,I=g>>>0>(EA=g+EA|0)>>>0?I+1|0:I,IA=eg(F,0,l,0),g=p+I|0,g=IA>>>0>(EA=IA+EA|0)>>>0?g+1|0:g,IA=eg(t,0,k,0),I=p+g|0,I=IA>>>0>(EA=IA+EA|0)>>>0?I+1|0:I,IA=eg(e,0,H,0),g=p+I|0,g=IA>>>0>(EA=IA+EA|0)>>>0?g+1|0:g,I=eg(f,0,b,0),IA=p+g|0,I=I>>>0>(g=EA=I+EA|0)>>>0?IA+1|0:IA,lA=IA=EA+(g=vA>>>6&2097151)|0,fA=IA=(aA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(uA=I- -1048576|0)>>>21,IA=(IA>>>21|0)+QA|0,nA=IA=I>>>0>(gA=I+gA|0)>>>0?IA+1|0:IA,wA=(I=gA)- -1048576|0,EA=IA=IA-((I>>>0<4293918720)-1|0)|0,I=(g=IA>>>21|0)+iA|0,oA=QA=(IA=(2097151&IA)<<11|wA>>>21)+rA|0,pA=IA=(iA=I=IA>>>0>QA>>>0?I+1|0:I)-(((I=QA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(tA=I- -1048576|0)>>>21,IA=(IA>>21)+DA|0,I=(g=IA=I>>>0>(QA=I+FA|0)>>>0?IA+1|0:IA)+hA|0,rA=(rA=g)-(((g=QA)>>>0<4293918720)-1|0)|0,ZA=g- -1048576|0,OA=(g=IA=_A=QA+KA|0)-(IA=-2097152&ZA)|0,kA=(I=QA>>>0>_A>>>0?I+1|0:I)-((QA=rA)+(g>>>0>>0)|0)|0,I=eg(K,q,-997805,-1),g=p+iA|0,UA=IA=I+oA|0,rA=I>>>0>IA>>>0?g+1|0:g,g=eg(V,RA,470296,0),I=p,IA=g,g=eg(M,dA,666643,0),I=p+I|0,I=(I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I)+nA|0,I=(g=IA+gA|0)>>>0>>0?I+1|0:I,wA=(IA=g)-(g=-2097152&wA)|0,hA=I-((g>>>0>IA>>>0)+EA|0)|0,I=eg(V,RA,666643,0),g=p+aA|0,oA=IA=I+lA|0,iA=I>>>0>IA>>>0?g+1|0:g,g=eg(u,0,_,0),I=p,IA=g,g=eg(D,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,g=eg(F,0,G,0),I=p+I|0,I=g>>>0>(IA=g+IA|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(k,0,l,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,I=eg(t,0,H,0),IA=p+g|0,IA=I>>>0>(gA=I+gA|0)>>>0?IA+1|0:IA,I=eg(e,0,b,0),g=p+IA|0,I=g=I>>>0>(gA=I+gA|0)>>>0?g+1|0:g,EA=gA=(IA=2097151&((1&SA)<<31|LA>>>1))+gA|0,gA=IA>>>0>gA>>>0?I+1|0:I,g=eg(F,0,_,0),I=p,IA=g,g=eg(u,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,nA=(g=IA)+(IA=eg(k,0,G,0))|0,g=p+I|0,g=IA>>>0>nA>>>0?g+1|0:g,I=eg(H,0,l,0),g=p+g|0,g=I>>>0>(IA=I+nA|0)>>>0?g+1|0:g,nA=(I=eg(t,0,b,0))+IA|0,IA=p+g|0,I=I>>>0>(g=nA)>>>0?IA+1|0:IA,aA=IA=nA+(g=xA>>>4&2097151)|0,xA=IA=(YA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(TA=I- -1048576|0)>>>21,IA=(IA>>>21|0)+gA|0,nA=EA=I+EA|0,SA=IA=I>>>0>EA>>>0?IA+1|0:IA,KA=(I=EA)- -1048576|0,vA=IA=IA-((I>>>0<4293918720)-1|0)|0,I=(g=IA>>>21|0)+iA|0,lA=IA=(_A=(IA=(IA=(2097151&IA)<<11|KA>>>21)>>>0>(g=gA=IA+oA|0)>>>0?I+1|0:I)-(((I=-2097152&uA)>>>0>g>>>0)+fA|0)|0)-(((I=EA=g-I|0)>>>0<4293918720)-1|0)|0,g=(g=IA>>21)+hA|0,FA=IA=(I=(2097151&IA)<<11|(NA=I- -1048576|0)>>>21)+wA|0,uA=g=I>>>0>IA>>>0?g+1|0:g,DA=(I=IA)- -1048576|0,wA=gA=g-((I>>>0<4293918720)-1|0)|0,d=CA-(I=-2097152&bA)|0,LA=IA=GA-((I>>>0>CA>>>0)+sA|0)|0,I=(g=gA>>21)+rA|0,I=(gA=(2097151&gA)<<11|DA>>>21)>>>0>(CA=gA+UA|0)>>>0?I+1|0:I,iA=(gA=eg(x,L,136657,0))+(CA-(g=-2097152&tA)|0)|0,g=p+(I-((g>>>0>CA>>>0)+pA|0)|0)|0,g=gA>>>0>iA>>>0?g+1|0:g,IA=eg(d,IA,-683901,-1),I=p+g|0,iA=gA=IA+iA|0,oA=IA=(hA=I=IA>>>0>gA>>>0?I+1|0:I)-(((I=gA)>>>0<4293918720)-1|0)|0,g=(g=IA>>21)+kA|0,CA=IA=(I=(2097151&IA)<<11|(bA=I- -1048576|0)>>>21)+OA|0,tA=g=I>>>0>IA>>>0?g+1|0:g,fA=IA=g-(((I=IA)>>>0<4293918720)-1|0)|0,UA=(2097151&IA)<<11|(GA=I- -1048576|0)>>>21,pA=IA>>21,g=eg(o,0,_,0),I=p,IA=g,g=eg(E,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,gA=(g=eg(w,0,G,0))+IA|0,IA=p+I|0,IA=g>>>0>gA>>>0?IA+1|0:IA,I=eg(y,0,l,0),g=p+IA|0,g=I>>>0>(gA=I+gA|0)>>>0?g+1|0:g,IA=eg(t,0,h,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,IA=eg(e,0,D,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,IA=eg(f,0,u,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,g=eg(c,m,k,0),IA=p+I|0,IA=g>>>0>(gA=g+gA|0)>>>0?IA+1|0:IA,I=eg(s,0,F,0),g=p+IA|0,g=I>>>0>(gA=I+gA|0)>>>0?g+1|0:g,IA=eg(r,0,H,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,IA=eg(i,0,b,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,I=HI(B+26|0),IA=2097151&((3&(IA=p))<<30|I>>>2),I=g,sA=gA=IA+gA|0,gA=I=IA>>>0>gA>>>0?I+1|0:I,I=eg(N,J,470296,0),g=p,kA=(IA=I)+(I=eg(v,P,666643,0))|0,IA=p+g|0,IA=I>>>0>kA>>>0?IA+1|0:IA,I=eg(U,X,654183,0),g=p+IA|0,g=I>>>0>(kA=I+kA|0)>>>0?g+1|0:g,I=eg(M,dA,-997805,-1),g=p+g|0,g=I>>>0>(IA=I+kA|0)>>>0?g+1|0:g,kA=(I=IA)+(IA=eg(V,RA,136657,0))|0,I=p+g|0,I=(I=IA>>>0>kA>>>0?I+1|0:I)+gA|0,I=(g=kA)>>>0>(IA=g+sA|0)>>>0?I+1|0:I,g=IA,IA=I,W=(I=sA)- -1048576|0,gA=rA=gA-((I>>>0<4293918720)-1|0)|0,rA=g,IA=(g=BA>>21)+IA|0,IA=(I=(2097151&BA)<<11|jA>>>21)>>>0>(BA=rA+I|0)>>>0?IA+1|0:IA,g=BA-(I=-2097152&W)|0,sA=eg(K,q,-683901,-1),I=(BA=IA-((I>>>0>BA>>>0)+gA|0)|0)+p|0,IA=I=sA>>>0>(kA=g+sA|0)>>>0?I+1|0:I,rA=BA-(((I=g)>>>0<4293918720)-1|0)|0,T=I- -1048576|0,IA=(g=QA>>21)+IA|0,IA=(I=(2097151&QA)<<11|ZA>>>21)>>>0>(QA=I+(sA=kA)|0)>>>0?IA+1|0:IA,sA=g=QA-(I=-2097152&T)|0,I=(QA=IA-((I>>>0>QA>>>0)+(BA=rA)|0)|0)+pA|0,j=g- -1048576|0,rA=QA-((g>>>0<4293918720)-1|0)|0,jA=(g=IA=UA=g+UA|0)-(IA=-2097152&j)|0,ZA=(sA>>>0>g>>>0?I+1|0:I)-((g>>>0>>0)+(QA=rA)|0)|0,OA=CA-(I=-2097152&GA)|0,kA=tA-((I>>>0>CA>>>0)+fA|0)|0,UA=iA-(I=-2097152&bA)|0,bA=hA-((I>>>0>iA>>>0)+oA|0)|0,g=eg(K,q,654183,0),I=p+uA|0,I=g>>>0>(IA=g+FA|0)>>>0?I+1|0:I,iA=((CA=IA)-(g=-2097152&DA)|0)+(IA=eg(x,L,-997805,-1))|0,g=p+(I-((g>>>0>CA>>>0)+wA|0)|0)|0,g=IA>>>0>iA>>>0?g+1|0:g,IA=eg(d,LA,136657,0),I=p+g|0,GA=CA=IA+iA|0,iA=IA>>>0>CA>>>0?I+1|0:I,sA=eA-(I=-2097152&mA)|0,hA=PA-((I>>>0>eA>>>0)+HA|0)|0,I=eg(v,P,-997805,-1),g=p,IA=I,I=eg(S,R,654183,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(N,J,136657,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,CA=(I=IA)+(IA=eg(U,X,-683901,-1))|0,I=p+g|0,IA=qA+(IA>>>0>CA>>>0?I+1|0:I)|0,oA=(g=CA+yA|0)-(I=-2097152&WA)|0,tA=(IA=g>>>0>>0?IA+1|0:IA)-((I>>>0>g>>>0)+JA|0)|0,I=eg(v,P,654183,0),g=p,IA=I,I=eg(S,R,470296,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,CA=(I=IA)+(IA=eg(N,J,-997805,-1))|0,I=p+g|0,g=CA+cA|0,IA=XA+(IA>>>0>CA>>>0?I+1|0:I)|0,CA=(I=eg(U,X,136657,0))+g|0,g=p+(g>>>0>>0?IA+1|0:IA)|0,g=I>>>0>CA>>>0?g+1|0:g,IA=eg(M,dA,-683901,-1),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,yA=(IA=CA)-(g=-2097152&AA)|0,eA=I-((g>>>0>IA>>>0)+VA|0)|0,g=eg(E,0,_,0),I=p,IA=g,g=eg(a,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,CA=(g=IA)+(IA=eg(o,0,G,0))|0,g=p+I|0,g=IA>>>0>CA>>>0?g+1|0:g,IA=eg(w,0,l,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,g=eg(t,0,y,0),IA=p+I|0,IA=g>>>0>(CA=g+CA|0)>>>0?IA+1|0:IA,I=eg(e,0,h,0),g=p+IA|0,g=I>>>0>(CA=I+CA|0)>>>0?g+1|0:g,IA=eg(f,0,D,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,IA=eg(c,m,F,0),g=p+I|0,g=IA>>>0>(CA=IA+CA|0)>>>0?g+1|0:g,IA=eg(s,0,u,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,g=eg(r,0,k,0),IA=p+I|0,IA=g>>>0>(CA=g+CA|0)>>>0?IA+1|0:IA,I=eg(Q,0,b,0),g=p+IA|0,g=I>>>0>(CA=I+CA|0)>>>0?g+1|0:g,IA=eg(i,0,H,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,g=(B=(n[B+28|0]|n[B+29|0]<<8|n[B+30|0]<<16|n[B+31|0]<<24)>>>7|0)>>>0>(IA=B+CA|0)>>>0?I+1|0:I,I=IA,IA=gA>>21,gA=I+(B=(2097151&gA)<<11|W>>>21)|0,I=g+IA|0,CA=gA,fA=I=B>>>0>gA>>>0?I+1|0:I,uA=(I=gA)- -1048576|0,pA=g=fA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+eA|0,gA=B=(g=(2097151&g)<<11|uA>>>21)+yA|0,rA=I=g>>>0>B>>>0?I+1|0:I,wA=(I=B)- -1048576|0,cA=g=rA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+tA|0,yA=I=(g=(2097151&g)<<11|wA>>>21)>>>0>(B=g+oA|0)>>>0?I+1|0:I,tA=(I=B)- -1048576|0,eA=g=yA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+hA|0,mA=oA=(g=(2097151&g)<<11|tA>>>21)+sA|0,HA=I=g>>>0>oA>>>0?I+1|0:I,I=eg(oA,I,-683901,-1),g=p+iA|0,oA=IA=I+GA|0,iA=I>>>0>IA>>>0?g+1|0:g,FA=B-(I=-2097152&tA)|0,GA=eA=yA-((I>>>0>B>>>0)+eA|0)|0,g=eg(K,q,470296,0)+EA|0,I=_A+p|0,I=g>>>0>>0?I+1|0:I,EA=((IA=g)-(B=-2097152&NA)|0)+(g=eg(x,L,654183,0))|0,IA=p+(I-((B>>>0>IA>>>0)+lA|0)|0)|0,I=eg(d,LA,-997805,-1),g=p+(g>>>0>EA>>>0?IA+1|0:IA)|0,g=I>>>0>(B=I+EA|0)>>>0?g+1|0:g,IA=(I=B)+(B=eg(mA,HA,136657,0))|0,I=p+g|0,I=B>>>0>IA>>>0?I+1|0:I,B=eg(FA,eA,-683901,-1),g=p+I|0,yA=g=B>>>0>(IA=B+IA|0)>>>0?g+1|0:g,hA=(I=IA)- -1048576|0,eA=B=g-((I>>>0<4293918720)-1|0)|0,I=(I=B>>21)+iA|0,EA=I=(g=(2097151&B)<<11|hA>>>21)>>>0>(B=g+oA|0)>>>0?I+1|0:I,tA=(I=B)- -1048576|0,g=(I=(iA=oA=EA-((I>>>0<4293918720)-1|0)|0)>>21)+bA|0,bA=lA=(oA=(2097151&iA)<<11|tA>>>21)+UA|0,oA=oA>>>0>lA>>>0?g+1|0:g,XA=B-(I=-2097152&tA)|0,VA=EA-((I>>>0>B>>>0)+iA|0)|0,JA=IA-(I=-2097152&hA)|0,PA=yA-((I>>>0>IA>>>0)+eA|0)|0,I=eg(K,q,666643,0),IA=p+(SA-(((g=-2097152&KA)>>>0>nA>>>0)+vA|0)|0)|0,IA=I>>>0>(B=I+(nA-g|0)|0)>>>0?IA+1|0:IA,I=eg(x,L,470296,0),g=p+IA|0,g=I>>>0>(B=I+B|0)>>>0?g+1|0:g,IA=(I=B)+(B=eg(d,LA,654183,0))|0,I=p+g|0,eA=IA,B=B>>>0>IA>>>0?I+1|0:I,nA=gA-(I=-2097152&wA)|0,iA=rA-((I>>>0>gA>>>0)+cA|0)|0,g=eg(v,P,470296,0),I=p,IA=g,g=eg(S,R,666643,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(N,J,654183,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,IA=eg(U,X,-997805,-1),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,g=eg(M,dA,136657,0),IA=p+I|0,IA=g>>>0>(gA=g+gA|0)>>>0?IA+1|0:IA,I=eg(V,RA,-683901,-1),g=p+IA|0,I=fA+(I>>>0>(gA=I+gA|0)>>>0?g+1|0:g)|0,I=(IA=gA+CA|0)>>>0>>0?I+1|0:I,g=(gA=IA)-(IA=-2097152&uA)|0,IA=I-((IA>>>0>gA>>>0)+pA|0)|0,I=(I=BA>>21)+IA|0,EA=BA=(gA=g)+(g=(2097151&BA)<<11|T>>>21)|0,cA=IA=(rA=I=g>>>0>BA>>>0?I+1|0:I)-(((I=BA)>>>0<4293918720)-1|0)|0,g=(2097151&IA)<<11|(_A=I- -1048576|0)>>>21,IA=(IA>>21)+iA|0,DA=BA=g+nA|0,sA=IA=g>>>0>BA>>>0?IA+1|0:IA,I=eg(BA,IA,-683901,-1),g=p+B|0,g=I>>>0>(IA=I+eA|0)>>>0?g+1|0:g,B=eg(mA,HA,-997805,-1),I=p+g|0,I=B>>>0>(IA=B+IA|0)>>>0?I+1|0:I,B=eg(FA,GA,136657,0),g=p+I|0,nA=IA=B+IA|0,gA=B>>>0>IA>>>0?g+1|0:g,g=eg(k,0,_,0),I=p,B=g,g=eg(F,0,Y,0),I=p+I|0,I=g>>>0>(B=B+g|0)>>>0?I+1|0:I,g=eg(H,0,G,0),IA=p+I|0,IA=g>>>0>(B=g+B|0)>>>0?IA+1|0:IA,I=eg(b,0,l,0),g=p+IA|0,I=g=I>>>0>(B=I+B|0)>>>0?g+1|0:g,CA=B=(g=MA>>>7&2097151)+B|0,B=g>>>0>B>>>0?I+1|0:I,I=eg(H,0,_,0),g=p,IA=I,I=eg(k,0,Y,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(b,0,G,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,BA=(I=IA)+(IA=2097151&((3&$)<<30|z>>>2))|0,I=g,iA=BA,tA=IA=(BA=I=IA>>>0>BA>>>0?I+1|0:I)-(((I=iA)>>>0<4293918720)-1|0)|0,g=(g=IA>>>21|0)+B|0,CA=IA=(I=(2097151&IA)<<11|(vA=I- -1048576|0)>>>21)+CA|0,fA=g=I>>>0>IA>>>0?g+1|0:g,lA=(I=IA)- -1048576|0,yA=B=g-((I>>>0<4293918720)-1|0)|0,I=(g=B>>>21|0)+YA|0,I=(B=aA+((2097151&B)<<11|lA>>>21)|0)>>>0>>0?I+1|0:I,aA=((IA=B)-(g=-2097152&TA)|0)+(B=eg(x,L,666643,0))|0,g=p+(I-((g>>>0>IA>>>0)+xA|0)|0)|0,g=B>>>0>aA>>>0?g+1|0:g,I=eg(d,LA,470296,0),g=p+g|0,g=I>>>0>(B=I+aA|0)>>>0?g+1|0:g,IA=(I=B)+(B=eg(DA,sA,136657,0))|0,I=p+g|0,I=B>>>0>IA>>>0?I+1|0:I,g=eg(mA,HA,654183,0),I=p+I|0,I=g>>>0>(B=g+IA|0)>>>0?I+1|0:I,g=eg(FA,GA,-997805,-1),IA=p+I|0,uA=B=g+B|0,eA=IA=g>>>0>B>>>0?IA+1|0:IA,wA=(I=B)- -1048576|0,aA=B=IA-((I>>>0<4293918720)-1|0)|0,g=(I=B>>21)+gA|0,gA=IA=(B=(2097151&B)<<11|wA>>>21)+nA|0,B=g=B>>>0>IA>>>0?g+1|0:g,nA=IA=g-(((I=IA)>>>0<4293918720)-1|0)|0,g=(2097151&IA)<<11|(hA=I- -1048576|0)>>>21,IA=(IA>>21)+PA|0,qA=pA=g+JA|0,pA=g>>>0>pA>>>0?IA+1|0:IA,IA=QA>>21,QA=(I=(2097151&QA)<<11|j>>>21)+(EA-(g=-2097152&_A)|0)|0,g=IA+(rA-((g>>>0>EA>>>0)+cA|0)|0)|0,rA=g=I>>>0>QA>>>0?g+1|0:g,cA=g=g-(((I=QA)>>>0<4293918720)-1|0)|0,SA=IA=g>>21,g=eg(MA=(2097151&g)<<11|(_A=I- -1048576|0)>>>21,IA,-683901,-1),I=p+B|0,I=g>>>0>(IA=g+gA|0)>>>0?I+1|0:I,JA=IA-(g=-2097152&hA)|0,PA=I-((g>>>0>IA>>>0)+nA|0)|0,I=eg(MA,SA,136657,0),g=p+eA|0,g=I>>>0>(B=I+uA|0)>>>0?g+1|0:g,YA=B-(I=-2097152&wA)|0,xA=g-((I>>>0>B>>>0)+aA|0)|0,B=(I=eg(d,LA,666643,0))+(CA-(g=-2097152&lA)|0)|0,g=p+(fA-((g>>>0>CA>>>0)+yA|0)|0)|0,g=I>>>0>B>>>0?g+1|0:g,IA=(I=B)+(B=eg(DA,sA,-997805,-1))|0,I=p+g|0,I=B>>>0>IA>>>0?I+1|0:I,B=(g=eg(mA,HA,470296,0))+IA|0,IA=p+I|0,IA=g>>>0>B>>>0?IA+1|0:IA,I=eg(FA,GA,654183,0),g=p+IA|0,fA=B=I+B|0,EA=I>>>0>B>>>0?g+1|0:g,gA=BA,g=eg(b,0,_,0),I=p,B=g,g=eg(H,0,Y,0),I=p+I|0,I=g>>>0>(B=B+g|0)>>>0?I+1|0:I,g=B,g=(B=O>>>5&2097151)>>>0>(IA=g+B|0)>>>0?I+1|0:I,B=2097151&Z,BA=eg(b,0,Y,0)+B|0,I=p,eA=B=(yA=I=B>>>0>BA>>>0?I+1|0:I)-(((I=BA)>>>0<4293918720)-1|0)|0,CA=IA,g=g+(IA=B>>>21|0)|0,aA=g=(I=(2097151&B)<<11|(lA=I- -1048576|0)>>>21)>>>0>(B=CA+I|0)>>>0?g+1|0:g,uA=(I=B)- -1048576|0,nA=g=g-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>>21|0)+gA|0,I=(g=(2097151&g)<<11|uA>>>21)>>>0>(CA=g+iA|0)>>>0?I+1|0:I,CA=(IA=eg(DA,sA,654183,0))+((gA=CA)-(g=-2097152&vA)|0)|0,g=p+(I-((16383&tA)+(g>>>0>gA>>>0)|0)|0)|0,I=eg(mA,HA,666643,0),IA=p+(IA>>>0>CA>>>0?g+1|0:g)|0,IA=I>>>0>(gA=I+CA|0)>>>0?IA+1|0:IA,g=eg(FA,GA,470296,0),I=p+IA|0,wA=gA=g+gA|0,iA=I=g>>>0>gA>>>0?I+1|0:I,hA=(I=gA)- -1048576|0,CA=g=iA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+EA|0,tA=gA=(g=(2097151&g)<<11|hA>>>21)+fA|0,g=I=g>>>0>gA>>>0?I+1|0:I,fA=(I=gA)- -1048576|0,I=(IA=(gA=EA=g-((I>>>0<4293918720)-1|0)|0)>>21)+xA|0,EA=(EA=(2097151&gA)<<11|fA>>>21)>>>0>(YA=vA=EA+YA|0)>>>0?I+1|0:I,I=eg(MA,SA,-997805,-1);g=p+g|0,g=I>>>0>(IA=I+tA|0)>>>0?g+1|0:g,xA=IA-(I=-2097152&fA)|0,vA=g-((I>>>0>IA>>>0)+gA|0)|0,I=eg(MA,SA,654183,0),g=p+iA|0,g=I>>>0>(IA=I+wA|0)>>>0?g+1|0:g,tA=IA-(I=-2097152&hA)|0,fA=g-((I>>>0>IA>>>0)+CA|0)|0,IA=(g=eg(DA,sA,470296,0))+(B-(I=-2097152&uA)|0)|0,I=p+(aA-((16383&nA)+(I>>>0>B>>>0)|0)|0)|0,I=g>>>0>IA>>>0?I+1|0:I,B=(g=eg(FA,GA,666643,0))+IA|0,IA=p+I|0,IA=g>>>0>B>>>0?IA+1|0:IA,gA=B,B=(I=eg(DA,sA,666643,0))+(BA-(g=-2097152&lA)|0)|0,g=p+(yA-((4095&eA)+(g>>>0>BA>>>0)|0)|0)|0,iA=g=I>>>0>B>>>0?g+1|0:g,eA=(I=B)- -1048576|0,CA=BA=g-((I>>>0<4293918720)-1|0)|0,IA=(I=BA>>21)+IA|0,aA=BA=(g=(2097151&BA)<<11|eA>>>21)+gA|0,gA=IA=g>>>0>BA>>>0?IA+1|0:IA,nA=(I=BA)- -1048576|0,BA=IA=IA-((I>>>0<4293918720)-1|0)|0,g=(I=IA>>21)+fA|0,IA=g=(IA=(2097151&IA)<<11|nA>>>21)>>>0>(yA=IA+tA|0)>>>0?g+1|0:g,g=eg(MA,SA,470296,0),I=p+gA|0,I=g>>>0>(aA=g+aA|0)>>>0?I+1|0:I,g=aA-(gA=-2097152&nA)|0,gA=I-((gA>>>0>aA>>>0)+BA|0)|0,nA=g,BA=(I=eg(MA,SA,666643,0))+(B-(g=-2097152&eA)|0)|0,g=p+(iA-((g>>>0>B>>>0)+CA|0)|0)|0,I=(I=(g=I>>>0>BA>>>0?g+1|0:g)>>21)+gA|0,CA=B=nA+(g=(2097151&g)<<11|(B=BA)>>>21)|0,IA=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+IA|0,gA=B=(I=(2097151&I)<<11|B>>>21)+yA|0,B=(2097151&(IA=I>>>0>(g=B)>>>0?IA+1|0:IA))<<11|g>>>21,g=(I=IA>>21)+vA|0,aA=IA=B+xA|0,IA=(g=B>>>0>(I=IA)>>>0?g+1|0:g)>>21,g=(2097151&g)<<11|I>>>21,I=IA+EA|0,uA=B=g+YA|0,g=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+PA|0,wA=B=(I=(2097151&I)<<11|B>>>21)+JA|0,I=(I=(g=I>>>0>B>>>0?g+1|0:g)>>21)+pA|0,hA=B=(g=(2097151&g)<<11|B>>>21)+qA|0,IA=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+VA|0,tA=B=(I=(2097151&I)<<11|B>>>21)+XA|0,B=(2097151&(IA=I>>>0>(g=B)>>>0?IA+1|0:IA))<<11|g>>>21,g=(I=IA>>21)+oA|0,fA=IA=B+bA|0,IA=(g=B>>>0>(I=IA)>>>0?g+1|0:g)>>21,g=(2097151&g)<<11|I>>>21,I=IA+kA|0,pA=B=g+OA|0,g=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+ZA|0,yA=B=(I=(2097151&I)<<11|B>>>21)+jA|0,I=(g=I>>>0>B>>>0?g+1|0:g)>>21,iA=(IA=(2097151&g)<<11|B>>>21)+(g=QA-(B=-2097152&_A)|0)|0,IA=(rA-((B>>>0>QA>>>0)+cA|0)|0)+I|0,eA=iA,cA=(2097151&(IA=g>>>0>(I=iA)>>>0?IA+1|0:IA))<<11|I>>>21,EA=g=IA>>21,I=2097151&BA,B=eg(cA,g,666643,0)+I|0,g=p,iA=B,B=g=I>>>0>B>>>0?g+1|0:g,C[0|A]=iA,C[A+1|0]=(255&g)<<24|iA>>>8,BA=A,g=2097151&CA,IA=eg(cA,EA,470296,0)+g|0,I=p,I=g>>>0>IA>>>0?I+1|0:I,CA=IA,QA=(2097151&(IA=B))<<11|iA>>>21,IA=I+(g=IA>>21)|0,IA=QA>>>0>(CA=CA+QA|0)>>>0?IA+1|0:IA,QA=CA,C[BA+4|0]=(2047&IA)<<21|QA>>>11,I=IA,IA=QA,C[BA+3|0]=(7&I)<<29|IA>>>3,IA=2097151&gA,gA=eg(cA,EA,654183,0)+IA|0,g=p,g=IA>>>0>gA>>>0?g+1|0:g,IA=gA,gA=(2097151&I)<<11|QA>>>21,I=(I>>21)+g|0,g=I=gA>>>0>(CA=IA+gA|0)>>>0?I+1|0:I,C[BA+6|0]=(63&I)<<26|CA>>>6,gA=0,I=nA=2097151&QA,C[BA+2|0]=31&((65535&B)<<16|iA>>>16)|I<<5,B=2097151&aA,IA=eg(cA,EA,-997805,-1)+B|0,I=p,B=I=B>>>0>IA>>>0?I+1|0:I,I=g>>21,QA=(g=(2097151&g)<<11|CA>>>21)+IA|0,IA=I+B|0,iA=QA,IA=g>>>0>QA>>>0?IA+1|0:IA,C[BA+9|0]=(511&IA)<<23|QA>>>9,I=IA,C[BA+8|0]=(1&I)<<31|QA>>>1,QA=0,B=aA=2097151&CA,C[BA+5|0]=(524287&gA)<<13|nA>>>19|B<<2,B=2097151&uA,IA=eg(cA,EA,136657,0)+B|0,g=p,g=B>>>0>IA>>>0?g+1|0:g,B=IA,g=g+(IA=I>>21)|0,CA=B=B+(I=(2097151&I)<<11|iA>>>21)|0,g=I>>>0>B>>>0?g+1|0:g,C[BA+12|0]=(4095&g)<<20|B>>>12,B=g,I=g,g=CA,C[BA+11|0]=(15&I)<<28|g>>>4,BA=0,g=nA=2097151&iA,C[A+7|0]=(16383&QA)<<18|aA>>>14|g<<7,IA=A,g=2097151&wA,QA=eg(cA,EA,-683901,-1)+g|0,I=p,I=(I=g>>>0>QA>>>0?I+1|0:I)+(g=B>>21)|0,g=I=(B=(2097151&B)<<11|CA>>>21)>>>0>(gA=QA=B+QA|0)>>>0?I+1|0:I,C[IA+14|0]=(127&I)<<25|gA>>>7,QA=0,B=iA=2097151&CA,C[IA+10|0]=(131071&BA)<<15|nA>>>17|B<<4,B=IA,I>>=21,IA=(g=(2097151&g)<<11|gA>>>21)>>>0>(CA=g+(2097151&hA)|0)>>>0?I+1|0:I,C[B+17|0]=(1023&IA)<<22|CA>>>10,I=IA,C[B+16|0]=(3&I)<<30|CA>>>2,B=EA=2097151&gA,C[A+13|0]=(1048575&QA)<<12|iA>>>20|B<<1,g=I,I>>=21,g=(IA=(2097151&g)<<11|CA>>>21)>>>0>(gA=IA+(2097151&tA)|0)>>>0?I+1|0:I,C[(B=A)+20|0]=(8191&g)<<19|gA>>>13,I=g,g=gA,C[B+19|0]=(31&I)<<27|g>>>5,g=iA=2097151&CA,C[B+15|0]=(32767&BA)<<17|EA>>>15|g<<6,g=I,I>>=21,g=(B=(2097151&g)<<11|gA>>>21)>>>0>(EA=B+(2097151&fA)|0)>>>0?I+1|0:I,C[A+21|0]=EA,I=gA,C[A+18|0]=(262143&QA)<<14|iA>>>18|I<<3,B=g,I=g,g=EA,C[A+22|0]=(255&I)<<24|g>>>8,g=I>>21,IA=(I=(2097151&I)<<11|EA>>>21)>>>0>(gA=I+(2097151&pA)|0)>>>0?g+1|0:g,C[A+25|0]=(2047&IA)<<21|gA>>>11,I=IA,IA=gA,C[A+24|0]=(7&I)<<29|IA>>>3,g=I>>21,g=(BA=(2097151&I)<<11|gA>>>21)>>>0>(CA=BA+(2097151&yA)|0)>>>0?g+1|0:g,BA=CA,I=g,C[(IA=A)+27|0]=(63&I)<<26|BA>>>6,IA=0,g=CA=2097151&gA,C[A+23|0]=31&((65535&B)<<16|EA>>>16)|g<<5,g=I,I>>=21,I=(g=(2097151&g)<<11|BA>>>21)>>>0>(QA=g+(2097151&eA)|0)>>>0?I+1|0:I,B=QA,C[A+31|0]=(131071&I)<<15|B>>>17,C[A+30|0]=(511&I)<<23|B>>>9,C[A+29|0]=(1&I)<<31|B>>>1,I=0,gA=BA&=2097151,C[A+26|0]=(524287&IA)<<13|CA>>>19|gA<<2,C[A+28|0]=(16383&I)<<18|gA>>>14|B<<7}(E,r+160|0,r+288|0,r+224|0),fI(r+288|0,64),fI(r+224|0,64),I&&(i[I>>2]=64,i[I+4>>2]=0),h=r+560|0,0}function X(A,I,g){var B,Q=0,E=0;if(g>>>0>=512)return s(0|A,0|I,0|g),A;B=A+g|0;A:if(3&(A^I))if(B>>>0<4)g=A;else if((Q=B-4|0)>>>0>>0)g=A;else for(g=A;C[0|g]=n[0|I],C[g+1|0]=n[I+1|0],C[g+2|0]=n[I+2|0],C[g+3|0]=n[I+3|0],I=I+4|0,Q>>>0>=(g=g+4|0)>>>0;);else{I:if((0|g)<1)g=A;else if(3&A)for(g=A;;){if(C[0|g]=n[0|I],I=I+1|0,B>>>0<=(g=g+1|0)>>>0)break I;if(!(3&g))break}else g=A;if(!((Q=-4&B)>>>0<64||(E=Q+-64|0)>>>0>>0))for(;i[g>>2]=i[I>>2],i[g+4>>2]=i[I+4>>2],i[g+8>>2]=i[I+8>>2],i[g+12>>2]=i[I+12>>2],i[g+16>>2]=i[I+16>>2],i[g+20>>2]=i[I+20>>2],i[g+24>>2]=i[I+24>>2],i[g+28>>2]=i[I+28>>2],i[g+32>>2]=i[I+32>>2],i[g+36>>2]=i[I+36>>2],i[g+40>>2]=i[I+40>>2],i[g+44>>2]=i[I+44>>2],i[g+48>>2]=i[I+48>>2],i[g+52>>2]=i[I+52>>2],i[g+56>>2]=i[I+56>>2],i[g+60>>2]=i[I+60>>2],I=I- -64|0,E>>>0>=(g=g- -64|0)>>>0;);if(g>>>0>=Q>>>0)break A;for(;i[g>>2]=i[I>>2],I=I+4|0,Q>>>0>(g=g+4|0)>>>0;);}if(g>>>0>>0)for(;C[0|g]=n[0|I],I=I+1|0,(0|B)!=(0|(g=g+1|0)););return A}function V(A,I,g,B){var Q,E=0,a=0,r=0,o=0,e=0,t=0,f=0;if(h=Q=h-704|0,g|B)if(E=B<<3|g>>>29,r=(f=i[(a=A)+72>>2])+(e=g<<3)|0,E=E+(o=i[a+76>>2])|0,t=r,i[a+72>>2]=r,E=r>>>0>>0?E+1|0:E,i[a+76>>2]=E,t=(e=(0|E)==(0|o)&f>>>0>t>>>0|E>>>0>>0)+i[(a=r=a- -64|0)>>2]|0,E=i[a+4>>2],E=e>>>0>t>>>0?E+1|0:E,r=(e=B>>>29|0)+t|0,i[a>>2]=r,i[a+4>>2]=r>>>0>>0?E+1|0:E,(0|(E=B))==(0|(t=0-((o=127&((7&o)<<29|f>>>3))>>>0>128)|0))&g>>>0>=(r=128-o|0)>>>0|E>>>0>t>>>0){for(a=0,E=0;C[80+(A+(e=a+o|0)|0)|0]=n[I+a|0],(0|r)!=(0|(a=a+1|0))|(0|(E=a>>>0<1?E+1|0:E))!=(0|t););if(F(A,A+80|0,Q,E=Q+640|0),I=I+r|0,!(B=B-((g>>>0>>0)+t|0)|0)&(g=g-r|0)>>>0>127|B)for(;F(A,I,Q,E),I=I+128|0,!(B=B-(g>>>0<128)|0)&(g=g-128|0)>>>0>127|B;);if(g|B)for(a=0,E=0;C[80+(A+a|0)|0]=n[I+a|0],(0|g)!=(0|(a=o=a+1|0))|(0|B)!=(0|(E=o>>>0<1?E+1|0:E)););fI(Q,704)}else for(a=g,r=(g=!B&g>>>0>1|0!=(0|B))?a:1,f=g?B:0,a=0,E=0;C[80+(A+(B=a+o|0)|0)|0]=n[I+a|0],(0|r)!=(0|(a=g=a+1|0))|(0|(E=g>>>0<1?E+1|0:E))!=(0|f););return h=Q+704|0,0}function W(A,I,g,B,Q,E,n,a){A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,n|=0,a|=0;var r,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,D=0;h=r=h-16|0,i[r+12>>2]=0,pg(a);A:{if(B){w=4&a;I:{g:{B:{for(;;){o=f;Q:{C:{for(;;){if(y=C[g+o|0],255!=(0|(t=w?LA(y):KA(y))))break C;if(!Q)break Q;if(!gg(Q,y))break B;if(!((o=o+1|0)>>>0>>0))break}A=f+1|0,i[r+12>>2]=A>>>0>>0?B:A;break g}if(s=(s<<6)+t|0,(t=e+6|0)>>>0<8)e=t;else{if(e=e-2|0,I>>>0<=c>>>0){i[r+12>>2]=o,i[8960]=68,o=1;break I}C[A+c|0]=s>>>e,c=c+1|0}if((f=o+1|0)>>>0>>0)continue}break}i[r+12>>2]=f;break g}i[r+12>>2]=o}o=0}if(!(e>>>0<=4)){A=-1;break A}}if(A=-1,!((-1<>2];;){g:{if(I>>>0<=E>>>0)i[8960]=68;else{if(61==(0|(n=C[A+E|0]))){Q=Q-1|0;break g}if(B&&gg(B,n))break g;i[8960]=28}a=-1;break I}if(E=E+1|0,i[g>>2]=E,!Q)break}return a}(g,B,r+12|0,Q,e>>>1|0)))){A=0;I:if(Q&&!((o=i[r+12>>2])>>>0>=B>>>0)){g:{for(;;){if(!gg(Q,C[g+o|0]))break g;if((0|(o=o+1|0))==(0|B))break}i[r+12>>2]=B;break I}i[r+12>>2]=o}D=c}}return I=i[r+12>>2],n?i[n>>2]=I+g:(0|I)!=(0|B)&&(i[8960]=28,A=-1),E&&(i[E>>2]=D),h=r+16|0,0|A}function T(A,I,g){var B,Q,C,E=0;h=B=h-16|0,Q=i[A+20>>2],i[A+20>>2]=0,C=i[A+4>>2],i[A+4>>2]=0,E=-26;A:{I:{g:switch(g-1|0){case 1:if(E=-32,XA(I,35621,9))break A;I=I+9|0;break I;case 0:break g;default:break A}if(E=-32,XA(I,35631,8))break A;I=I+8|0}if(!XA(I,35640,3)&&(I=bA(I+3|0,B+12|0))){if(E=-26,19!=i[B+12>>2])break A;if(!XA(I,35644,3)&&(I=bA(I+3|0,B+12|0))&&(i[A+44>>2]=i[B+12>>2],!XA(I,35648,3)&&(I=bA(I+3|0,B+12|0))&&(i[A+40>>2]=i[B+12>>2],!XA(I,35652,3)&&(I=bA(I+3|0,B+12|0))&&(g=i[B+12>>2],i[A+48>>2]=g,i[A+52>>2]=g,36==(0|(g=n[0|I]))&&(i[B+12>>2]=Q,I=36==(0|g)?I+1|0:I,!W(i[A+16>>2],Q,I,YA(I),0,B+12|0,B+8|0,3)&&(i[A+20>>2]=i[B+12>>2],I=i[B+8>>2],36==(0|(g=n[0|I]))&&(i[B+12>>2]=C,I=36==(0|g)?I+1|0:I,!W(i[A>>2],C,I,YA(I),0,B+12|0,B+8|0,3)))))))){if(i[A+4>>2]=i[B+12>>2],I=i[B+8>>2],E=oA(A))break A;return h=B+16|0,n[0|I]?-32:0}}E=-32}return h=B+16|0,E}function j(A,I){var g;for(h=g=h-192|0,H(g+144|0,I),H(g+96|0,g+144|0),H(g+96|0,g+96|0),_(g+96|0,I,g+96|0),_(g+144|0,g+144|0,g+96|0),H(g+48|0,g+144|0),_(g+96|0,g+96|0,g+48|0),H(g+48|0,g+96|0),I=1;H(g+48|0,g+48|0),5!=(0|(I=I+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),I=1;H(g+48|0,g+48|0),10!=(0|(I=I+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),I=1;H(g,g),20!=(0|(I=I+1|0)););for(_(g+48|0,g,g+48|0),I=1;H(g+48|0,g+48|0),11!=(0|(I=I+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),I=1;H(g+48|0,g+48|0),50!=(0|(I=I+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),I=1;H(g,g),100!=(0|(I=I+1|0)););for(_(g+48|0,g,g+48|0),I=1;H(g+48|0,g+48|0),51!=(0|(I=I+1|0)););for(_(g+96|0,g+48|0,g+96|0),I=1;H(g+96|0,g+96|0),6!=(0|(I=I+1|0)););_(A,g+96|0,g+144|0),h=g+192|0}function Z(A,I){var g,B,Q,E,n,a,o,e,t,f,c=0,y=0,s=0,w=0,h=0,D=0,u=0;(y=s=i[A+60>>2])|(c=i[A+56>>2])&&(s=c,C[(w=c+A|0)- -64|0]=1,!(y=(c=c+1|0)>>>0<1?y+1|0:y)&c>>>0<=15&&EA(w+65|0,0,15-s|0),C[A+80|0]=1,S(A,A- -64|0,16,0)),t=i[A+52>>2],f=i[A+48>>2],s=i[A+44>>2],u=i[A+24>>2],h=i[A+28>>2]+(u>>>26|0)|0,c=i[A+32>>2]+(h>>>26|0)|0,e=(g=(E=(-67108864|(Q=i[A+36>>2]+(c>>>26|0)|0))+((o=(a=67108863&c)+((h=(D=67108863&h)+((y=(c=(67108863&u)+((y=i[A+20>>2]+r(Q>>>26|0,5)|0)>>>26|0)|0)+((n=5+(w=67108863&y)|0)>>>26|0)|0)>>>26|0)|0)>>>26|0)|0)>>>26|0)|0)>>31)&c|(B=67108863&(u=(E>>>31|0)-1|0))&y,y=0,y=(c=w&g|B&n|e<<26)>>>0>(w=c+i[A+40>>2]|0)>>>0?1:y,xI(I,w),h=(c=(D=D&g|h&B)<<20|e>>>6)+s|0,s=0,s=c>>>0>h>>>0?1:s,c=y,y=s,y=c>>>0>(h=c+h|0)>>>0?y+1|0:y,xI(I+4|0,h),s=0,s=(c=(w=g&a|B&o)<<14|D>>>12)>>>0>(D=c+f|0)>>>0?1:s,c=y,y=s,y=c>>>0>(D=c+D|0)>>>0?y+1|0:y,xI(I+8|0,D),xI(s=I+12|0,y=y+(w=(I=(u&E|g&Q)<<8|w>>>18)+t|0)|0),fI(A,88)}function O(A,I,g,B,Q){A|=0,I|=0,g|=0,B|=0;var E=0,i=0,a=0,o=0,f=0,c=0,y=0,s=0,w=0;pg(Q|=0),i=(E=(B>>>0)/3|0)<<2,(E=r(E,-3)+B|0)&&(i=2&Q?(2|i)+(E>>>1|0)|0:i+4|0);A:{I:{g:{B:{if(I>>>0>i>>>0){if(!(4&Q)){if(a=0,!B)break g;Q=0,E=0;break B}if(a=0,!B)break g;for(Q=0,E=0;;){for(f=n[g+o|0]|f<<8,Q=Q+8|0;c=E,y=Q,s=A+E|0,w=CI(f>>>(Q=Q-6|0)&63),C[0|s]=w,E=E+1|0,Q>>>0>5;);if((0|(o=o+1|0))==(0|B))break}if(a=E,!Q)break g;s=A+E|0,w=CI(f<<12-y&63),C[0|s]=w,a=c+2|0;break g}OI(),e()}for(;;){for(f=n[g+o|0]|f<<8,Q=Q+8|0;c=E,y=Q,s=A+E|0,w=EI(f>>>(Q=Q-6|0)&63),C[0|s]=w,E=E+1|0,Q>>>0>5;);if((0|(o=o+1|0))==(0|B))break}a=E,Q&&(s=A+E|0,w=EI(f<<12-y&63),C[0|s]=w,a=c+2|0)}if((E=a)>>>0<=i>>>0){if(E>>>0>>0)break I;i=E;break A}t(35568,35587,230,35603),e()}EA(A+E|0,61,i-E|0)}return EA(A+i|0,0,(I>>>0>(g=i+1|0)>>>0?I:g)-i|0),0|A}function z(A,I,g,B){var Q=0,E=0,a=0,r=0,o=0,e=0;A:{if((Q=i[A+56>>2])|(E=i[A+60>>2])){if(e=A,o=a=16-Q|0,o=(a=(0|(r=0-((Q>>>0>16)+E|0)|0))==(0|B)&g>>>0>>0|B>>>0>>0)?g:o,(a=r=a?B:r)|o){if(C[(A+Q|0)- -64|0]=n[0|I],E=1,Q=0,1!=(0|o)|a)for(;r=E+i[A+56>>2]|0,C[(A+r|0)- -64|0]=n[I+E|0],(0|o)!=(0|(E=E+1|0))|(0|(Q=E>>>0<1?Q+1|0:Q))!=(0|a););Q=i[A+56>>2],E=i[A+60>>2]}if(r=Q+o|0,Q=E+a|0,E=r,i[e+56>>2]=E,Q=E>>>0>>0?Q+1|0:Q,i[e+60>>2]=Q,!Q&E>>>0<16)break A;S(A,A- -64|0,16,0),i[A+56>>2]=0,i[A+60>>2]=0,g=(Q=g)-(E=o)|0,B=B-((Q>>>0>>0)+a|0)|0,I=I+E|0}if(!B&g>>>0>=16|B&&(S(A,I,Q=-16&g,B),g&=15,B=0,I=I+Q|0),g|B){for(E=0,Q=0;e=E+i[A+56>>2]|0,C[(A+e|0)- -64|0]=n[I+E|0],(0|g)!=(0|(E=E+1|0))|(0|B)!=(0|(Q=E>>>0<1?Q+1|0:Q)););I=A,Q=g+i[A+56>>2]|0,A=B+i[A+60>>2]|0,i[I+56>>2]=Q,i[I+60>>2]=g>>>0>Q>>>0?A+1|0:A}}}function $(A,I){var g=0,B=0,Q=0,C=0,E=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0;A:if(A&&(2!=i[A+36>>2]||(Q=i[I>>2],n[I+8|0]<2&&!Q)?(function(A,I,g){var B,Q=0,C=0,E=0;if(h=B=h-4096|0,vg(B+3072|0),vg(B+2048|0),!(!A|!I)&&(i[B+2048>>2]=i[I>>2],i[B+2052>>2]=0,i[B+2056>>2]=i[I+4>>2],i[B+2060>>2]=0,i[B+2064>>2]=n[I+8|0],i[B+2068>>2]=0,i[B+2072>>2]=i[A+16>>2],i[B+2076>>2]=0,i[B+2080>>2]=i[A+8>>2],i[B+2084>>2]=0,i[B+2088>>2]=i[A+36>>2],i[B+2092>>2]=0,i[A+20>>2]))for(I=0;(E=127&I)||(Q=i[B+2100>>2],Q=(C=i[B+2096>>2]+1|0)>>>0<1?Q+1|0:Q,i[B+2096>>2]=C,i[B+2100>>2]=Q,vg(B),vg(B+1024|0),Y(B+3072|0,B+2048|0,B),Y(B+3072|0,B,B+1024|0)),E=i[4+(C=(B+1024|0)+(E<<3)|0)>>2],i[(Q=(I<<3)+g|0)>>2]=i[C>>2],i[Q+4>>2]=E,(I=I+1|0)>>>0>2];);h=B+4096|0}(A,I,t=i[A+4>>2]),Q=i[I>>2],B=0):(t=i[A+4>>2],B=1),c=B,!((E=!((B=n[I+8|0])|Q)<<1)>>>0>=(g=i[A+20>>2])>>>0)))for(C=i[A+24>>2],g=(Q=(r(C,i[I+4>>2])+E|0)+r(g,B)|0)+((Q>>>0)%(C>>>0)|0?-1:C-1|0)|0;;){if(f=1==((Q>>>0)%(C>>>0)|0)?Q-1|0:g,c?(o=i[A>>2],g=i[o+4>>2]+(f<<10)|0):(o=i[A>>2],g=(E<<3)+t|0),B=i[g+4>>2],y=i[g>>2],g=i[A+28>>2],i[I+12>>2]=E,B=(B>>>0)%(g>>>0)|0,e=i[I+4>>2],g=n[I+8|0]?B:e,o=i[o+4>>2],s=C,w=B,C=i[I>>2],e=(o+(r(s,g=(B=C)?w:g)<<10)|0)+(FA(A,I,y,!0&(0|g)==(0|e))<<10)|0,B=o+(f<<10)|0,g=o+(Q<<10)|0,C?Y(B,e,g):b(B,e,g),(E=E+1|0)>>>0>=a[A+20>>2])break A;Q=Q+1|0,g=f+1|0,C=i[A+24>>2]}}function AA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y=0,s=0,w=0,h=0,D=0,u=0,p=0,l=0,F=0;B=i[I+4>>2],Q=i[A+4>>2],C=i[I+8>>2],s=i[A+8>>2],E=i[I+12>>2],w=i[A+12>>2],n=i[I+16>>2],h=i[A+16>>2],a=i[I+20>>2],D=i[A+20>>2],r=i[I+24>>2],u=i[A+24>>2],o=i[I+28>>2],p=i[A+28>>2],e=i[I+32>>2],l=i[A+32>>2],t=i[I+36>>2],F=i[A+36>>2],c=(g=0-g|0)&((f=i[I>>2])^(y=i[A>>2])),i[A>>2]=c^y,y=F,F=g&(F^t),i[A+36>>2]=y^F,y=l,l=g&(l^e),i[A+32>>2]=y^l,y=p,p=g&(p^o),i[A+28>>2]=y^p,y=u,u=g&(u^r),i[A+24>>2]=y^u,y=D,D=g&(D^a),i[A+20>>2]=y^D,y=h,h=g&(h^n),i[A+16>>2]=y^h,y=w,w=g&(w^E),i[A+12>>2]=y^w,y=s,s=g&(s^C),i[A+8>>2]=y^s,y=A,A=g&(B^Q),i[y+4>>2]=A^Q,i[I+36>>2]=F^t,i[I+32>>2]=l^e,i[I+28>>2]=p^o,i[I+24>>2]=u^r,i[I+20>>2]=D^a,i[I+16>>2]=h^n,i[I+12>>2]=w^E,i[I+8>>2]=s^C,i[I+4>>2]=A^B,i[I>>2]=f^c}function IA(A,I){var g;i[A>>2]=67108863&(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24),i[A+4>>2]=(n[I+3|0]|n[I+4|0]<<8|n[I+5|0]<<16|n[I+6|0]<<24)>>>2&67108611,i[A+8>>2]=(n[I+6|0]|n[I+7|0]<<8|n[I+8|0]<<16|n[I+9|0]<<24)>>>4&67092735,i[A+12>>2]=(n[I+9|0]|n[I+10|0]<<8|n[I+11|0]<<16|n[I+12|0]<<24)>>>6&66076671,g=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,i[A+20>>2]=0,i[A+24>>2]=0,i[A+28>>2]=0,i[A+32>>2]=0,i[A+36>>2]=0,i[A+16>>2]=g>>>8&1048575,i[A+40>>2]=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,i[A+44>>2]=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,i[A+48>>2]=n[I+24|0]|n[I+25|0]<<8|n[I+26|0]<<16|n[I+27|0]<<24,I=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,C[A+80|0]=0,i[A+56>>2]=0,i[A+60>>2]=0,i[A+52>>2]=I}function gA(A,I,g){var B=0;A:if((0|A)!=(0|I)){if((I-A|0)-g>>>0<=0-(g<<1)>>>0)return X(A,I,g);if(B=3&(A^I),A>>>0>>0){if(B)B=A;else{if(3&A)for(B=A;;){if(!g)break A;if(C[0|B]=n[0|I],I=I+1|0,g=g-1|0,!(3&(B=B+1|0)))break}else B=A;if(!(g>>>0<=3))for(;i[B>>2]=i[I>>2],I=I+4|0,B=B+4|0,(g=g-4|0)>>>0>3;);}if(g)for(;C[0|B]=n[0|I],B=B+1|0,I=I+1|0,g=g-1|0;);}else{if(!B){if(A+g&3)for(;;){if(!g)break A;if(C[0|(B=(g=g-1|0)+A|0)]=n[I+g|0],!(3&B))break}if(!(g>>>0<=3))for(;i[(g=g-4|0)+A>>2]=i[I+g>>2],g>>>0>3;);}if(!g)break A;for(;C[(g=g-1|0)+A|0]=n[I+g|0],g;);}}return A}function BA(A,I){var g,B=0;h=g=h-48|0,function(A,I){var g,B,Q,C,E,n,a,o,e=0;B=i[I+28>>2],Q=i[I+24>>2],C=i[I+20>>2],E=i[I+16>>2],n=i[I+12>>2],a=i[I+8>>2],o=i[I+4>>2],e=i[I>>2],g=i[I+36>>2],I=i[I+32>>2],e=r(((B+(Q+(C+(E+(n+(a+(o+(e+(r(g,19)+16777216>>>25|0)>>26)>>25)>>26)>>25)>>26)>>25)>>26)>>25)+I>>26)+g>>25,19)+e|0,i[A>>2]=67108863&e,e=o+(e>>26)|0,i[A+4>>2]=33554431&e,e=a+(e>>25)|0,i[A+8>>2]=67108863&e,e=n+(e>>26)|0,i[A+12>>2]=33554431&e,e=E+(e>>25)|0,i[A+16>>2]=67108863&e,e=C+(e>>26)|0,i[A+20>>2]=33554431&e,e=Q+(e>>25)|0,i[A+24>>2]=67108863&e,e=B+(e>>26)|0,i[A+28>>2]=33554431&e,I=I+(e>>25)|0,i[A+32>>2]=67108863&I,i[A+36>>2]=g+(I>>26)&33554431}(g,I),I=i[g>>2],C[0|A]=I,C[A+2|0]=I>>>16,C[A+1|0]=I>>>8,B=i[g+4>>2],C[A+5|0]=B>>>14,C[A+4|0]=B>>>6,C[A+3|0]=B<<2|I>>>24,I=i[g+8>>2],C[A+8|0]=I>>>13,C[A+7|0]=I>>>5,C[A+6|0]=I<<3|B>>>22,B=i[g+12>>2],C[A+11|0]=B>>>11,C[A+10|0]=B>>>3,C[A+9|0]=B<<5|I>>>21,I=i[g+16>>2],C[A+15|0]=I>>>18,C[A+14|0]=I>>>10,C[A+13|0]=I>>>2,C[A+12|0]=I<<6|B>>>19,I=i[g+20>>2],C[A+16|0]=I,C[A+18|0]=I>>>16,C[A+17|0]=I>>>8,B=i[g+24>>2],C[A+21|0]=B>>>15,C[A+20|0]=B>>>7,C[A+19|0]=B<<1|I>>>24,I=i[g+28>>2],C[A+24|0]=I>>>13,C[A+23|0]=I>>>5,C[A+22|0]=I<<3|B>>>23,B=i[g+32>>2],C[A+27|0]=B>>>12,C[A+26|0]=B>>>4,C[A+25|0]=B<<4|I>>>21,I=i[g+36>>2],C[A+31|0]=I>>>18,C[A+30|0]=I>>>10,C[A+29|0]=I>>>2,C[A+28|0]=I<<6|B>>>20,h=g+48|0}function QA(A,I,g,B){var Q=0,E=0,i=0,a=0,r=0,o=0;A:if(g|B)for(o=A+224|0,i=A+96|0,Q=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24;;){if(a=96+(A+Q|0)|0,r=E=256-Q|0,!B&g>>>0<=E>>>0){X(a,I,g),I=g+(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)|0,C[A+352|0]=I,C[A+353|0]=I>>>8,C[A+354|0]=I>>>16,C[A+355|0]=I>>>24;break A}if(X(a,I,E),Q=(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)+E|0,C[A+352|0]=Q,C[A+353|0]=Q>>>8,C[A+354|0]=Q>>>16,C[A+355|0]=Q>>>24,iA(A,128),l(A,i),X(i,o,128),Q=(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)-128|0,C[A+352|0]=Q,C[A+353|0]=Q>>>8,C[A+354|0]=Q>>>16,C[A+355|0]=Q>>>24,I=I+E|0,!((g=(E=g)-r|0)|(B=B-(E>>>0>>0)|0)))break}return 0}function CA(A,I){var g,B=0,Q=0,E=0,i=0;for(h=g=h-464|0;Q=B<<1,i=n[I+B|0],C[Q+(g+400|0)|0]=15&i,C[(g+400|0)+(1|Q)|0]=i>>>4,32!=(0|(B=B+1|0)););for(B=0;I=((Q=(I=B)+n[0|(B=(g+400|0)+E|0)]|0)<<24)- -134217728|0,C[0|B]=Q-(I>>24&240),B=I>>28,63!=(0|(E=E+1|0)););for(C[g+463|0]=n[g+463|0]+B,zI(A),B=1;fg(g,B>>>1|0,C[(g+400|0)+B|0]),OA(g+240|0,A,g),DI(A,g+240|0),I=B>>>0<62,B=B+2|0,I;);for(JI(g+240|0,A),_I(g+120|0,g+240|0),AI(g+240|0,g+120|0),_I(g+120|0,g+240|0),AI(g+240|0,g+120|0),_I(g+120|0,g+240|0),AI(g+240|0,g+120|0),DI(A,g+240|0),B=0;fg(g,B>>>1|0,C[(g+400|0)+B|0]),OA(g+240|0,A,g),DI(A,g+240|0),I=B>>>0<62,B=B+2|0,I;);h=g+464|0}function EA(A,I,g){var B=0,Q=0,E=0,n=0;if(g&&(C[(B=A+g|0)-1|0]=I,C[0|A]=I,!(g>>>0<3||(C[B-2|0]=I,C[A+1|0]=I,C[B-3|0]=I,C[A+2|0]=I,g>>>0<7||(C[B-4|0]=I,C[A+3|0]=I,g>>>0<9||(Q=(B=0-A&3)+A|0,I=r(255&I,16843009),i[Q>>2]=I,i[(B=(g=g-B&-4)+Q|0)-4>>2]=I,g>>>0<9||(i[Q+8>>2]=I,i[Q+4>>2]=I,i[B-8>>2]=I,i[B-12>>2]=I,g>>>0<25||(i[Q+24>>2]=I,i[Q+20>>2]=I,i[Q+16>>2]=I,i[Q+12>>2]=I,i[B-16>>2]=I,i[B-20>>2]=I,i[B-24>>2]=I,i[B-28>>2]=I,(g=g-(n=4&Q|24)|0)>>>0<32))))))))for(B=I,E=I,I=Q+n|0;i[I+24>>2]=E,i[I+28>>2]=B,i[I+16>>2]=E,i[I+20>>2]=B,i[I+8>>2]=E,i[I+12>>2]=B,i[I>>2]=E,i[I+4>>2]=B,I=I+32|0,(g=g-32|0)>>>0>31;);return A}function iA(A,I){var g,B,Q,E=0,i=0;i=E=A- -64|0,B=1+(g=n[E+4|0]|n[E+5|0]<<8|n[E+6|0]<<16|n[E+7|0]<<24)|0,E=(I=I+(E=Q=n[0|E]|n[E+1|0]<<8|n[E+2|0]<<16|n[E+3|0]<<24)|0)>>>0>>0?B:g,C[0|i]=I,C[i+1|0]=I>>>8,C[i+2|0]=I>>>16,C[i+3|0]=I>>>24,C[i+4|0]=E,C[i+5|0]=E>>>8,C[i+6|0]=E>>>16,C[i+7|0]=E>>>24,I=(E=(0|E)==(0|g)&I>>>0>>0|E>>>0>>0)+(n[A+72|0]|n[A+73|0]<<8|n[A+74|0]<<16|n[A+75|0]<<24)|0,i=n[A+76|0]|n[A+77|0]<<8|n[A+78|0]<<16|n[A+79|0]<<24,E=I>>>0>>0?i+1|0:i,C[A+72|0]=I,C[A+73|0]=I>>>8,C[A+74|0]=I>>>16,C[A+75|0]=I>>>24,C[A+76|0]=E,C[A+77|0]=E>>>8,C[A+78|0]=E>>>16,C[A+79|0]=E>>>24}function nA(A,I,g,B,Q,C,E){var n,a,r,o,e=0;return h=n=h-352|0,K(n,C,E),!Q&B>>>0<=g-A>>>0|A>>>0>=g>>>0&&!(!Q&B>>>0>A-g>>>0|Q&&A>>>0>g>>>0)||(g=gA(A,g,B)),i[n+56>>2]=0,i[n+60>>2]=0,i[n+48>>2]=0,i[n+52>>2]=0,i[n+40>>2]=0,i[n+44>>2]=0,i[n+32>>2]=0,i[n+36>>2]=0,(a=!((E=(e=!Q&B>>>0>32|0!=(0|Q))?32:B)|(e=e?0:Q)))||X(n- -64|0,g,E),o=C+16|0,$I(n+32|0,n+32|0,r=E+32|0,C=r>>>0<32?e+1|0:e,o,n),lg(n+96|0,n+32|0),a||X(A,n- -64|0,E),fI(n+32|0,64),!Q&B>>>0>=33|Q&&Ag(A+E|0,C=g+E|0,(g=B)-E|0,Q-(e+(g>>>0>>0)|0)|0,o,n),fI(n,32),yg(n+96|0,A,B,Q),Fg(n+96|0,I),fI(n+96|0,256),h=n+352|0,0}function aA(A,I){i[A>>2]=1634760805,i[A+4>>2]=857760878,i[A+8>>2]=2036477234,i[A+12>>2]=1797285236,i[A+16>>2]=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,i[A+20>>2]=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,i[A+24>>2]=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,i[A+28>>2]=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,i[A+32>>2]=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,i[A+36>>2]=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,i[A+40>>2]=n[I+24|0]|n[I+25|0]<<8|n[I+26|0]<<16|n[I+27|0]<<24,i[A+44>>2]=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24}function rA(A,I,g,B,Q,C,E){var n,a,r=0,o=0;h=n=h-96|0,K(n,C,E),a=C+16|0,Vg[i[8952]](n+32|0,32,0,a,n),C=-1;A:{if(!(0|Vg[i[8946]](g,I,B,Q,n+32|0))){if(C=0,!A)break A;!Q&B>>>0<=A-I>>>0|A>>>0<=I>>>0&&!(!Q&B>>>0>I-A>>>0|Q&&A>>>0>>0)||(I=gA(A,I,B)),g=(C=!Q&B>>>0>32|0!=(0|Q))?32:B,E=C=C?0:Q,g|C?(o=X(n- -64|0,I,g),C=E,$I(n+32|0,n+32|0,r=g+32|0,C=r>>>0<32?C+1|0:C,a,n),X(A,o,g)):(C=E,$I(n+32|0,n+32|0,r=g+32|0,C=r>>>0<32?C+1|0:C,a,n)),C=0,!Q&B>>>0<33||Ag((r=A)+(A=g)|0,A+I|0,B-A|0,Q-(E+(A>>>0>B>>>0)|0)|0,a,n)}fI(n,32)}return h=n+96|0,C}function oA(A){var I=0,g=0,B=0;if(!A)return-25;if(!i[A>>2])return-1;A:{I:{if(I=-2,!(a[A+4>>2]<16)&&(i[A+8>>2]||(I=-18,!i[A+12>>2]))){if(g=i[A+20>>2],!i[A+16>>2])break I;if(I=-6,!(g>>>0<8)&&(i[A+24>>2]||(I=-20,!i[A+28>>2]))&&(i[A+32>>2]||(I=-21,!i[A+36>>2]))){if(!(g=i[A+48>>2]))return-16;if(I=-17,!(g>>>0>16777215||(I=-14,(B=i[A+44>>2])>>>0<8||(I=-15,B>>>0>2097152||(I=-14,g<<3>>>0>B>>>0))))){if(!i[A+40>>2])return-12;if(A=i[A+52>>2])break A;I=-28}}}return I}return g?-19:-6}return A>>>0>16777215?-29:0}function eA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y,s,w,h,D,u,p,l;f=i[I+4>>2],B=i[A+4>>2],c=i[I+8>>2],Q=i[A+8>>2],y=i[I+12>>2],C=i[A+12>>2],s=i[I+16>>2],E=i[A+16>>2],w=i[I+20>>2],n=i[A+20>>2],h=i[I+24>>2],a=i[A+24>>2],D=i[I+28>>2],r=i[A+28>>2],u=i[I+32>>2],o=i[A+32>>2],p=i[I+36>>2],e=i[A+36>>2],t=i[A>>2],l=i[I>>2]^t,I=0-g|0,i[A>>2]=t^l&I,i[A+36>>2]=I&(e^p)^e,i[A+32>>2]=I&(o^u)^o,i[A+28>>2]=I&(r^D)^r,i[A+24>>2]=I&(a^h)^a,i[A+20>>2]=I&(n^w)^n,i[A+16>>2]=I&(E^s)^E,i[A+12>>2]=I&(C^y)^C,i[A+8>>2]=I&(Q^c)^Q,i[A+4>>2]=I&(B^f)^B}function tA(A,I){for(var g=0,B=0,Q=0,E=0,i=0,a=0,r=0,o=0;C[A+g|0]=n[(g>>>3|0)+I|0]>>>(7&g)&1,256!=(0|(g=g+1|0)););for(;;){a=(I=a)+1|0;A:if(n[0|(i=A+I|0)]&&(g=a,Q=1,!(I>>>0>254)))for(;;){I:if(E=C[0|(B=A+g|0)])if((0|(o=(r=C[0|i])+(E<<=Q)|0))<=15)C[0|i]=o,C[0|B]=0;else{if((0|(B=r-E|0))<-15)break A;for(C[0|i]=B;;){if(!n[0|(B=A+g|0)]){C[0|B]=1;break I}if(C[0|B]=0,B=g>>>0<255,g=g+1|0,!B)break}}if(Q>>>0>5)break A;if(!((g=I+(Q=Q+1|0)|0)>>>0<256))break}if(256==(0|a))break}}function fA(A,I,g,B){var Q,C,E,n,a=0;h=Q=h+-64|0,EA(Q+8|0,0,52),a=YA(A),i[Q+20>>2]=a,i[Q+36>>2]=a,i[Q+4>>2]=a,C=k(a),i[Q+32>>2]=C,E=k(a),i[Q+16>>2]=E,n=k(a),i[Q>>2]=n;A:if(!n|!C|!E||!(a=k(a)))m(C),m(E),m(n),A=-22;else{if(A=T(Q,A,B)){m(i[Q+32>>2]),m(i[Q+16>>2]),m(i[Q>>2]),m(a);break A}A=0,I=pA(i[Q+40>>2],i[Q+44>>2],i[Q+52>>2],I,g,i[Q+16>>2],i[Q+20>>2],a,i[Q+4>>2],0,0,B),m(i[Q+32>>2]),m(i[Q+16>>2]),(I||zA(a,i[Q>>2],i[Q+4>>2]))&&(A=-35),m(a),m(i[Q>>2])}return h=Q- -64|0,A}function cA(A,I){var g,B,Q=0;h=g=h-288|0,d(B=A+40|0,I),wg(Q=A+80|0),H(g+240|0,B),_(g+192|0,g+240|0,2128),yA(g+240|0,g+240|0,Q),sA(g+192|0,g+192|0,Q),H(g+144|0,g+192|0),_(g+144|0,g+144|0,g+192|0),H(A,g+144|0),_(A,A,g+192|0),_(A,A,g+240|0),function(A,I){var g,B=0;for(h=g=h-144|0,H(g+96|0,I),H(g+48|0,g+96|0),H(g+48|0,g+48|0),_(g+48|0,I,g+48|0),_(g+96|0,g+96|0,g+48|0),H(g+96|0,g+96|0),_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),B=1;H(g+48|0,g+48|0),5!=(0|(B=B+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),B=1;H(g+48|0,g+48|0),10!=(0|(B=B+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),B=1;H(g,g),20!=(0|(B=B+1|0)););for(_(g+48|0,g,g+48|0),B=1;H(g+48|0,g+48|0),11!=(0|(B=B+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),B=1;H(g+48|0,g+48|0),50!=(0|(B=B+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),B=1;H(g,g),100!=(0|(B=B+1|0)););for(_(g+48|0,g,g+48|0),B=1;H(g+48|0,g+48|0),51!=(0|(B=B+1|0)););_(g+96|0,g+48|0,g+96|0),H(g+96|0,g+96|0),H(g+96|0,g+96|0),_(A,g+96|0,I),h=g+144|0}(A,A),_(A,A,g+144|0),_(A,A,g+240|0),H(g+96|0,A),_(g+96|0,g+96|0,g+192|0),yA(g+48|0,g+96|0,g+240|0);A:{if(!RI(g+48|0)){if(sA(g,g+96|0,g+240|0),Q=-1,!RI(g))break A;_(A,A,2176)}(0|KI(A))==(n[I+31|0]>>>7|0)&&mA(A,A),_(A+120|0,A,B),Q=0}return h=g+288|0,Q}function yA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y,s,w,h,D,u;B=i[g+4>>2],Q=i[I+4>>2],C=i[g+8>>2],E=i[I+8>>2],n=i[g+12>>2],a=i[I+12>>2],r=i[g+16>>2],o=i[I+16>>2],e=i[g+20>>2],t=i[I+20>>2],f=i[g+24>>2],c=i[I+24>>2],y=i[g+28>>2],s=i[I+28>>2],w=i[g+32>>2],h=i[I+32>>2],D=i[g+36>>2],u=i[I+36>>2],i[A>>2]=i[I>>2]-i[g>>2],i[A+36>>2]=u-D,i[A+32>>2]=h-w,i[A+28>>2]=s-y,i[A+24>>2]=c-f,i[A+20>>2]=t-e,i[A+16>>2]=o-r,i[A+12>>2]=a-n,i[A+8>>2]=E-C,i[A+4>>2]=Q-B}function sA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y,s,w,h,D,u;B=i[g+4>>2],Q=i[I+4>>2],C=i[g+8>>2],E=i[I+8>>2],n=i[g+12>>2],a=i[I+12>>2],r=i[g+16>>2],o=i[I+16>>2],e=i[g+20>>2],t=i[I+20>>2],f=i[g+24>>2],c=i[I+24>>2],y=i[g+28>>2],s=i[I+28>>2],w=i[g+32>>2],h=i[I+32>>2],D=i[g+36>>2],u=i[I+36>>2],i[A>>2]=i[g>>2]+i[I>>2],i[A+36>>2]=D+u,i[A+32>>2]=w+h,i[A+28>>2]=y+s,i[A+24>>2]=f+c,i[A+20>>2]=e+t,i[A+16>>2]=r+o,i[A+12>>2]=n+a,i[A+8>>2]=C+E,i[A+4>>2]=B+Q}function wA(A){var I,g=0,B=0,Q=0,E=0;for(C[11+(I=h-16|0)|0]=0,C[I+12|0]=0,C[I+13|0]=0,C[I+14|0]=0,i[I+8>>2]=0;;){for(Q=n[A+B|0],g=0;C[0|(E=(I+8|0)+g|0)]=n[0|E]|Q^n[(3232+(g<<5)|0)+B|0],7!=(0|(g=g+1|0)););if(31==(0|(B=B+1|0)))break}for(B=127&n[A+31|0],A=0,g=0;C[0|(Q=(I+8|0)+g|0)]=n[0|Q]|B^n[3263+(g<<5)|0],7!=(0|(g=g+1|0)););for(g=0;g=n[(I+8|0)+A|0]-1|g,7!=(0|(A=A+1|0)););return g>>>8&1}function hA(A,I){var g=0,B=0,Q=0,E=0,i=0;for(EA(X(A,1952,64)- -64|0,0,293);Q=B=(g=E<<3)+A|0,g=I+g|0,i=n[0|B]|n[B+1|0]<<8|n[B+2|0]<<16|n[B+3|0]<<24,B=(n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24)^(n[B+4|0]|n[B+5|0]<<8|n[B+6|0]<<16|n[B+7|0]<<24),g=(n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24)^i,C[0|Q]=g,C[Q+1|0]=g>>>8,C[Q+2|0]=g>>>16,C[Q+3|0]=g>>>24,C[Q+4|0]=B,C[Q+5|0]=B>>>8,C[Q+6|0]=B>>>16,C[Q+7|0]=B>>>24,8!=(0|(E=E+1|0)););}function DA(A,I,g,B,Q){var C,E=0;h=C=h+-64|0;A:{I:{if(E=!g,(g=YA(A))>>>0<128&&E){if(i[C+56>>2]=0,i[C+48>>2]=0,i[C+52>>2]=0,i[C+40>>2]=0,i[C+44>>2]=0,E=function(A){var I=0,g=0;return I=0,A&&(g=A,I=A,(1|A)>>>0<65536||(I=g)),g=I,!(A=k(I))|!(3&n[A-4|0])||EA(A,0,g),A}(g))break I}else i[8960]=28;A=-1;break A}i[C+32>>2]=0,i[C+36>>2]=0,i[C+8>>2]=E,i[C+16>>2]=E,i[C+20>>2]=g,i[C>>2]=E,i[C+12>>2]=g,i[C+24>>2]=0,i[C+28>>2]=0,i[C+4>>2]=g,T(C,A,Q)?(i[8960]=28,A=-1):(A=1,(0|I)==i[C+40>>2]&&(A=i[C+44>>2]!=(B>>>10|0))),m(E)}return h=C- -64|0,A}function uA(A,I){var g,B=0,Q=0,E=0,o=0;if(h=g=h-48|0,!((B=oA(A))||(B=-26,I-1>>>0>1||(E=i[A+44>>2],B=i[A+48>>2],i[g>>2]=0,Q=i[A+40>>2],i[g+28>>2]=B,i[g+12>>2]=-1,i[g+8>>2]=Q,B=((Q=E>>>0<(Q=B<<3)>>>0?Q:E)>>>0)/((E=B<<2)>>>0)|0,i[g+20>>2]=B,i[g+24>>2]=B<<2,i[g+16>>2]=r(B,E),B=i[A+52>>2],i[g+36>>2]=I,i[g+32>>2]=B,B=function(A,I){var g,B=0;return h=g=h-80|0,B=-25,!A|!I||(B=k(i[A+20>>2]<<3),i[A+4>>2]=B,B?(B=function(A,I){var g,B=0,Q=0;h=g=h-16|0,Q=-22;A:if(!(!A|!I)&&1024==(((B=I<<10)>>>0)/(I>>>0)|0)&&(I=k(12),i[A>>2]=I,I)){i[I>>2]=0,i[I+4>>2]=0,I=function(A,I){if(I>>>0>4294967168)A=48;else{if(!(I=function(A){var I=0,g=0,B=0,Q=0,C=0,E=0;return A>>>0>=4294967168?(i[8960]=48,0):(A=k(76+(B=A>>>0<11?16:A+11&-8)|0))?(I=A-8|0,63&A?(Q=(-8&(E=i[(C=A-4|0)>>2]))-(g=(A=(A=(A+63&-64)-8|0)-I>>>0>15?A:A- -64|0)-I|0)|0,3&E?(i[A+4>>2]=Q|1&i[A+4>>2]|2,i[4+(Q=A+Q|0)>>2]=1|i[Q+4>>2],i[C>>2]=g|1&i[C>>2]|2,i[A+4>>2]=1|i[A+4>>2],v(I,g)):(I=i[I>>2],i[A+4>>2]=Q,i[A>>2]=I+g)):A=I,3&(I=i[A+4>>2])&&((g=-8&I)>>>0<=B+16>>>0||(i[A+4>>2]=B|1&I|2,I=A+B|0,B=g-B|0,i[I+4>>2]=3|B,i[4+(g=A+g|0)>>2]=1|i[g+4>>2],v(I,B))),A+8|0):0}(I)))return 48;i[A>>2]=I,A=0}return A}(g+12|0,B),i[8960]=I;I:{if(I)i[g+12>>2]=0;else if(I=i[g+12>>2])break I;m(i[A>>2]),i[A>>2]=0;break A}i[i[A>>2]>>2]=I,i[i[A>>2]+4>>2]=I,i[i[A>>2]+8>>2]=B,Q=0}return h=g+16|0,Q}(A,i[A+16>>2]))?eI(A,i[I+56>>2]):(function(A,I,g){var B,Q=0;B=Q=h,h=Q=Q-448&-64,!A|!I||(iI(Q- -64|0,0,0,64),xI(Q+60|0,i[I+48>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+4>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+44>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+40>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,19),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,g),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+12>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+8>>2])&&(hg(Q- -64|0,g,i[I+12>>2],0),1&C[I+56|0]&&(fI(i[I+8>>2],i[I+12>>2]),i[I+12>>2]=0)),xI(Q+60|0,i[I+20>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+16>>2])&&hg(Q- -64|0,g,i[I+20>>2],0),xI(Q+60|0,i[I+28>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+24>>2])&&(hg(Q- -64|0,g,i[I+28>>2],0),2&n[I+56|0]&&(fI(i[I+24>>2],i[I+28>>2]),i[I+28>>2]=0)),xI(Q+60|0,i[I+36>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+32>>2])&&hg(Q- -64|0,g,i[I+36>>2],0),dI(Q- -64|0,A,64)),h=B}(g,I,i[A+36>>2]),fI(g- -64|0,8),function(A,I){var g,B=0,Q=0,C=0;if(h=g=h-1024|0,i[I+28>>2])for(C=A+68|0,Q=A- -64|0;xI(Q,0),xI(C,B),J(g,1024,A,72),TA(i[i[I>>2]+4>>2]+(r(i[I+24>>2],B)<<10)|0,g),xI(Q,1),J(g,1024,A,72),TA(1024+(i[i[I>>2]+4>>2]+(r(i[I+24>>2],B)<<10)|0)|0,g),(B=B+1|0)>>>0>2];);fI(g,1024),h=g+1024|0}(g,A),fI(g,72),B=0):B=-22),h=g+80|0,B}(g,A))))){if(i[g+8>>2])for(;kA(g,o),(o=o+1|0)>>>0>2];);!function(A,I){var g,B=0,Q=0;if(h=g=h-2048|0,!(!A|!I)){if(Yg(g+1024|0,(i[i[I>>2]+4>>2]+(i[I+24>>2]<<10)|0)-1024|0),a[I+28>>2]>=2)for(B=1;Q=i[I+24>>2],QI(g+1024|0,(i[i[I>>2]+4>>2]+(Q+r(B,Q)<<10)|0)-1024|0),(B=B+1|0)>>>0>2];);!function(A,I){for(var g=0,B=0;tI((g=B<<3)+A|0,i[(g=I+g|0)>>2],i[g+4>>2]),128!=(0|(B=B+1|0)););}(g,g+1024|0),J(i[A>>2],i[A+4>>2],g,1024),fI(g+1024|0,1024),fI(g,1024),eI(I,i[A+56>>2])}h=g+2048|0}(A,g),B=0}return h=g+48|0,B}function pA(A,I,g,B,Q,C,E,n,a,r,o,e){var t,f;return h=t=h+-64|0,(f=k(a))?(i[t+32>>2]=0,i[t+36>>2]=0,i[t+24>>2]=0,i[t+28>>2]=0,i[t+20>>2]=E,i[t+16>>2]=C,i[t+12>>2]=Q,i[t+8>>2]=B,i[t+4>>2]=a,i[t>>2]=f,i[t+56>>2]=0,i[t+52>>2]=g,i[t+48>>2]=g,i[t+44>>2]=I,i[t+40>>2]=A,(g=uA(t,e))?fI(f,a):!r|!o||!R(r,o,t,e)?(n&&X(n,f,a),fI(f,a),g=0):(fI(f,a),fI(r,o),g=-31),m(f)):g=-22,h=t- -64|0,g}function lA(A,I,g,B,Q,E){var i,a,o=0,e=0,t=0;return h=i=h-592|0,o=-1,function(A){var I=0,g=0,B=0,Q=0,C=0;for(I=32,g=1;C=(B=n[(I=I-1|0)+A|0])-(Q=n[I+3456|0])>>8&g|255&C,g&=65535+(B^Q)>>>8,I;);return 0!=(0|C)}(a=A+32|0)&&(wA(A)||function(A){var I=0,g=0;for(g=127&(-1^n[A+31|0]),I=30;g=-1^n[A+I|0]|g,I=I-1|0;);return 1&(((255&g)-1&236-n[0|A])>>>8^-1)}(Q)&&(wA(Q)||cA(i+128|0,Q)||(ig(i+384|0,E),V(i+384|0,A,32,0),V(i+384|0,Q,32,0),V(i+384|0,I,g,B),UI(i+384|0,i+320|0),G(i+320|0),function(A,I,g,B){var Q;h=Q=h-2272|0,tA(Q+2016|0,I),tA(Q+1760|0,B),FI(Q+480|0,g),JI(Q+320|0,g),DI(Q,Q+320|0),VA(Q+320|0,Q,Q+480|0),DI(Q+160|0,Q+320|0),FI(I=Q+640|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+800|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+960|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+1120|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+1280|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+1440|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(Q+1600|0,Q+160|0),Ug(A),wg(A+40|0),wg(A+80|0),B=255;A:{for(;;){if(!(n[(g=B)+(Q+2016|0)|0]|n[(Q+1760|0)+g|0])){if(B=g-1|0,g)continue;break A}break}if(!((0|g)<0))for(;AI(Q+320|0,A),(0|(g=C[(I=g)+(Q+2016|0)|0]))>=1?(DI(Q+160|0,Q+320|0),VA(Q+320|0,Q+160|0,(Q+480|0)+r((254&g)>>>1|0,160)|0)):(0|g)>-1||(DI(Q+160|0,Q+320|0),WA(Q+320|0,Q+160|0,(Q+480|0)+r((0-g&254)>>>1|0,160)|0)),(0|(g=C[I+(Q+1760|0)|0]))>=1?(DI(Q+160|0,Q+320|0),OA(Q+320|0,Q+160|0,r((254&g)>>>1|0,120)+2272|0)):(0|g)>-1||(DI(Q+160|0,Q+320|0),ZA(Q+320|0,Q+160|0,r((0-g&254)>>>1|0,120)+2272|0)),_I(A,Q+320|0),g=I-1|0,(0|I)>0;);}h=Q+2272|0}(i+8|0,i+320|0,i+128|0,a),nI(i+288|0,i+8|0),e=-1,t=Gg(i+288|0,A),o=((i+288|0)==(0|A)?e:t)|zA(A,i+288|0,32)))),h=i+592|0,o}function FA(A,I,g,B){var Q=0,C=0;A:if(i[I>>2])C=i[A+24>>2],Q=i[A+20>>2],B=B?i[I+12>>2]+(C+(-1^Q)|0)|0:(C-Q|0)-!i[I+12>>2]|0,C=0,3!=(0|(I=n[I+8|0]))&&(C=r(Q,I+1|0));else{if(!(Q=n[I+8|0])){B=i[I+12>>2]-1|0,C=0;break A}if(Q=r(Q,i[A+20>>2]),I=i[I+12>>2],B){B=(I+Q|0)-1|0,C=0;break A}B=Q-!I|0,C=0}return I=C+(Q=B-1|0)|0,eg(g,0,g,0),eg(B,0,p,0),function(A,I,g){var B=0,Q=0,C=0,E=0,i=0,n=0,a=0,e=0,t=0;A:{I:{g:{B:{Q:{C:{E:{i:{n:{if(Q=I){if(!(B=g))break n;break i}return D=A-r((A>>>0)/(g>>>0)|0,g)|0,u=0,void(p=0)}if(!A)break E;break C}if(!((E=B-1|0)&B))break Q;i=0-(E=(o(B)+33|0)-o(Q)|0)|0;break g}return D=0,u=Q,void(p=0)}if((B=32-o(Q)|0)>>>0<31)break B;break I}if(D=A&E,u=0,1==(0|B))break A;return g=31&(A=B?31-o(B-1^B)|0:32),void(p=(63&A)>>>0>=32?0:I>>>g|0)}E=B+1|0,i=63-B|0}if(B=I,C=31&(Q=63&E),Q>>>0>=32?(Q=0,C=B>>>C|0):(Q=B>>>C|0,C=((1<>>C),B=31&(i&=63),i>>>0>=32?(I=A<>>32-B|I<>>31)-(e=g&(n=i-((Q=Q<<1|C>>>31)+(B>>>0>>0)|0)>>31))|0,Q=Q-(a>>>0>>0)|0,I=I<<1|A>>>31,A=t|A<<1,t=1&n,E=E-1|0;);return D=C,u=Q,void(p=I<<1|A>>>31)}D=A,u=I,I=0}p=I}(I-(g=p)|0,(I>>>0>>0)-(I>>>0>>0)|0,i[A+24>>2]),p=u,D}function GA(A,I,g,B,Q,C,E,i,n,a){var r;return h=r=h-352|0,_g(r+32|0,64,n,a),lg(r+96|0,r+32|0),fI(r+32|0,64),yg(r+96|0,C,E,i),yg(r+96|0,34688,0-E&15,0),yg(r+96|0,I,g,B),yg(r+96|0,34688,0-g&15,0),tI(r+24|0,E,i),yg(r+96|0,r+24|0,8,0),tI(r+24|0,g,B),yg(r+96|0,r+24|0,8,0),Fg(r+96|0,r),fI(r+96|0,256),Q=kg(r,Q),fI(r,16),A&&(Q?(EA(A,0,g),Q=-1):(BI(A,I,g,B,n,1,a),Q=0)),h=r+352|0,Q}function kA(A,I){var g,B=0,Q=0,E=0;if(h=g=h-32|0,!(!A|!i[A+28>>2]))for(i[g+16>>2]=I,B=1;;){if(C[g+24|0]=Q,I=0,E=0,B)for(;i[g+28>>2]=0,B=i[g+28>>2],i[g+8>>2]=i[g+24>>2],i[g+12>>2]=B,i[g+20>>2]=I,B=i[g+20>>2],i[g>>2]=i[g+16>>2],i[g+4>>2]=B,$(A,g),(I=I+1|0)>>>0<(E=i[A+28>>2])>>>0;);if(B=E,4==(0|(Q=Q+1|0)))break}h=g+32|0}function _A(A,I,g,B,Q,C,E,n,a,r,o){var e;return h=e=h-336|0,_g(e+16|0,64,r,o),lg(e+80|0,e+16|0),fI(e+16|0,64),yg(e+80|0,E,n,a),yg(e+80|0,34688,0-n&15,0),BI(A,B,Q,C,r,1,o),yg(e+80|0,A,Q,C),yg(e+80|0,34688,0-Q&15,0),tI(e+8|0,n,a),yg(e+80|0,e+8|0,8,0),tI(e+8|0,Q,C),yg(e+80|0,e+8|0,8,0),Fg(e+80|0,I),fI(e+80|0,256),g&&(i[g>>2]=16,i[g+4>>2]=0),h=e+336|0,0}function HA(A,I,g,B,Q,C,E,i,n,a){var r;return h=r=h-352|0,og(r+32|0,n,a),lg(r+96|0,r+32|0),fI(r+32|0,64),yg(r+96|0,C,E,i),tI(r+24|0,E,i),yg(r+96|0,r+24|0,8,0),yg(r+96|0,I,g,B),tI(r+24|0,g,B),yg(r+96|0,r+24|0,8,0),Fg(r+96|0,r),fI(r+96|0,256),Q=kg(r,Q),fI(r,16),A&&(Q?(EA(A,0,g),Q=-1):(NI(A,I,g,B,n,a),Q=0)),h=r+352|0,Q}function YA(A){var I=0,g=0,B=0;A:{I:if(3&(I=A)){if(!n[0|A])return 0;for(;;){if(!(3&(I=I+1|0)))break I;if(!n[0|I])break}break A}for(;g=I,I=I+4|0,!((-1^(B=i[g>>2]))&B-16843009&-2139062144););if(!(255&B))return g-A|0;for(;B=n[g+1|0],g=I=g+1|0,B;);}return I-A|0}function bA(A,I){var g,B=0,Q=0,C=0,E=0,a=0;A:if(!(((g=n[0|A])-48&255)>>>0>9)){for(Q=g,B=A;;){if(E=B,C>>>0>429496729)break A;if((Q=(255&Q)-48|0)>>>0>(-1^(B=r(C,10)))>>>0)break A;if(C=B+Q|0,!(((Q=n[0|(B=E+1|0)])-48&255)>>>0<10))break}(0|A)==(0|B)|(48==(0|g)?(0|A)!=(0|E):0)||(i[I>>2]=C,a=B)}return a}function mA(A,I){var g,B,Q,C,E,n,a,r,o;g=i[I+4>>2],B=i[I+8>>2],Q=i[I+12>>2],C=i[I+16>>2],E=i[I+20>>2],n=i[I+24>>2],a=i[I+28>>2],r=i[I+32>>2],o=i[I+36>>2],i[A>>2]=0-i[I>>2],i[A+36>>2]=0-o,i[A+32>>2]=0-r,i[A+28>>2]=0-a,i[A+24>>2]=0-n,i[A+20>>2]=0-E,i[A+16>>2]=0-C,i[A+12>>2]=0-Q,i[A+8>>2]=0-B,i[A+4>>2]=0-g}function vA(A,I,g){var B=0;B=I<<8&16711680|I<<24,B|=255&(g<<8|I>>>24)|65280&(g<<24|I>>>8),I=-16777216&((255&g)<<24|I>>>8)|16711680&((16777215&g)<<8|I>>>24)|g>>>8&65280|g>>>24|0,C[0|A]=I,C[A+1|0]=I>>>8,C[A+2|0]=I>>>16,C[A+3|0]=I>>>24,I=B,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24}function UA(A,I,g){var B;B=A,g?(i[A+48>>2]=n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,g=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24):(i[A+48>>2]=0,g=0),i[B+52>>2]=g,i[A+56>>2]=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,i[A+60>>2]=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24}function SA(A,I){var g,B,Q,C,E,n,a,r,o;g=i[I+8>>2],B=i[I+12>>2],Q=i[I+16>>2],C=i[I+20>>2],E=i[I+24>>2],n=i[I+28>>2],a=i[I>>2],r=i[I+4>>2],o=i[I+36>>2],i[A+32>>2]=i[I+32>>2],i[A+36>>2]=o,i[A+24>>2]=E,i[A+28>>2]=n,i[A+16>>2]=Q,i[A+20>>2]=C,i[A+8>>2]=g,i[A+12>>2]=B,i[A>>2]=a,i[A+4>>2]=r}function NA(A,I,g,B,Q,C,E,a,r,o,e){var t;return h=t=h-48|0,i[t+8>>2]=0,i[t>>2]=0,i[t+4>>2]=0,x(t+16|0,o,e),e=n[o+16|0]|n[o+17|0]<<8|n[o+18|0]<<16|n[o+19|0]<<24,o=n[o+20|0]|n[o+21|0]<<8|n[o+22|0]<<16|n[o+23|0]<<24,i[t+4>>2]=e,i[t+8>>2]=o,function(A,I,g,B,Q,C,E,n,a,r,o){var e;h=e=h-336|0,rg(e+16|0,64,r,o),lg(e+80|0,e+16|0),fI(e+16|0,64),yg(e+80|0,E,n,a),yg(e+80|0,34704,0-n&15,0),SI(A,B,Q,C,r,1,o),yg(e+80|0,A,Q,C),yg(e+80|0,34704,0-Q&15,0),tI(e+8|0,n,a),yg(e+80|0,e+8|0,8,0),tI(e+8|0,Q,C),yg(e+80|0,e+8|0,8,0),Fg(e+80|0,I),fI(e+80|0,256),g&&(i[g>>2]=16,i[g+4>>2]=0),h=e+336|0}(A,I,g,B,Q,C,E,a,r,t,t+16|0),fI(t+16|0,32),h=t+48|0,0}function MA(A,I,g,B,Q,C,E,a,r,o){var e;return h=e=h-48|0,i[e+8>>2]=0,i[e>>2]=0,i[e+4>>2]=0,x(e+16|0,r,o),o=n[r+16|0]|n[r+17|0]<<8|n[r+18|0]<<16|n[r+19|0]<<24,r=n[r+20|0]|n[r+21|0]<<8|n[r+22|0]<<16|n[r+23|0]<<24,i[e+4>>2]=o,i[e+8>>2]=r,A=function(A,I,g,B,Q,C,E,i,n,a){var r;return h=r=h-352|0,rg(r+32|0,64,n,a),lg(r+96|0,r+32|0),fI(r+32|0,64),yg(r+96|0,C,E,i),yg(r+96|0,34704,0-E&15,0),yg(r+96|0,I,g,B),yg(r+96|0,34704,0-g&15,0),tI(r+24|0,E,i),yg(r+96|0,r+24|0,8,0),tI(r+24|0,g,B),yg(r+96|0,r+24|0,8,0),Fg(r+96|0,r),fI(r+96|0,256),Q=kg(r,Q),fI(r,16),A&&(Q?(EA(A,0,g),Q=-1):(SI(A,I,g,B,n,1,a),Q=0)),h=r+352|0,Q}(A,I,g,B,Q,C,E,a,e,e+16|0),fI(e+16|0,32),h=e+48|0,A}function dA(A){var I;return I=n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24,A=n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24,p=65280&(A<<24|I>>>8)|255&(A<<8|I>>>24)|I<<8&16711680|I<<24,-16777216&((255&A)<<24|I>>>8)|16711680&((16777215&A)<<8|I>>>24)|A>>>8&65280|A>>>24|0}function PA(A,I,g,B,Q,C,E,n,a,r,o){var e;return h=e=h-336|0,og(e+16|0,r,o),lg(e+80|0,e+16|0),fI(e+16|0,64),yg(e+80|0,E,n,a),tI(e+8|0,n,a),yg(e+80|0,e+8|0,8,0),NI(A,B,Q,C,r,o),yg(e+80|0,A,Q,C),tI(e+8|0,Q,C),yg(e+80|0,e+8|0,8,0),Fg(e+80|0,I),fI(e+80|0,256),g&&(i[g>>2]=16,i[g+4>>2]=0),h=e+336|0,0}function RA(A,I,g,B){var Q;if(h=Q=h-192|0,!(!g|(I-1&255)>>>0>=64|(B-1&255)>>>0>=64))return E[Q+130>>1]=257,C[Q+129|0]=B,C[Q+128|0]=I,WI(Q+128|4),tI(Q+128|8,0,0),EA(Q+144|0,0,48),hA(A,Q+128|0),EA(B+Q|0,0,128-B|0),QA(I=A,A=X(Q,g,B),128,0),fI(A,128),h=A+192|0,0;OI(),e()}function JA(A,I,g){i[A+48>>2]=g?n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24:0,i[A+52>>2]=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,i[A+56>>2]=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,i[A+60>>2]=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24}function xA(A,I,g,B,Q,C,E){var n;return h=n=h-16|0,A=EA(A,0,128),E>>>0<2147483649&&!(B|C)?E>>>0>8191&&Q|C?(cI(n,16),A=pA(Q,E>>>10|0,1,I,g,n,16,0,32,A,128,2)?-1:0):(i[8960]=28,A=-1):(i[8960]=22,A=-1),h=n+16|0,A}function LA(A){var I=0;return(0-(I=A+4&(A+65488>>>8^-1)&(57-A>>>8^-1)&255|((I=A-65|0)>>>8^-1)&I&(90-A>>>8^-1)&255|A+185&(A+65439>>>8^-1)&(122-A>>>8^-1)&255|63&(1+(16288^A)>>>8^-1)|62&(1+(16338^A)>>>8^-1))>>>8^-1)&1+(65470^A)>>>8&255|I}function KA(A){var I=0;return(0-(I=A+4&(A+65488>>>8^-1)&(57-A>>>8^-1)&255|((I=A-65|0)>>>8^-1)&I&(90-A>>>8^-1)&255|A+185&(A+65439>>>8^-1)&(122-A>>>8^-1)&255|63&(1+(16336^A)>>>8^-1)|62&(1+(16340^A)>>>8^-1))>>>8^-1)&1+(65470^A)>>>8&255|I}function qA(A,I){var g,B,Q=0,E=0,i=0,n=0;for(h=g=h-16|0,Q=10;n=Q,i=(I>>>0)/10|0,C[0|(E=(Q=Q-1|0)+(g+6|0)|0)]=I-r(i,10)|48,!(I>>>0<10)&&(I=i,Q););B=X(I=A,E,A=11-n|0)+A|0,C[0|B]=0,h=g+16|0}function XA(A,I,g){var B=0,Q=0,C=0;if(!g)return 0;A:if(B=n[0|A]){for(;;){if((0|(Q=n[0|I]))==(0|B)&&!(!(g=g-1|0)|!Q)){if(I=I+1|0,B=n[A+1|0],A=A+1|0,B)continue;break A}break}C=B}return(255&C)-n[0|I]|0}function VA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g),_(B,B,g+40|0),_(C=A+120|0,g+120|0,I+120|0),_(A,I+80|0,g+80|0),sA(Q,A,A),yA(A,E,B),sA(B,E,B),sA(E,Q,C),yA(C,Q,C),h=Q+48|0}function WA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g+40|0),_(B,B,g),_(C=A+120|0,g+120|0,I+120|0),_(A,I+80|0,g+80|0),sA(Q,A,A),yA(A,E,B),sA(B,E,B),yA(E,Q,C),sA(C,Q,C),h=Q+48|0}function TA(A,I){for(var g=0,B=0,Q=0,C=0;Q=(g=B<<3)+A|0,C=n[0|(g=I+g|0)]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,g=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24,i[Q>>2]=C,i[Q+4>>2]=g,128!=(0|(B=B+1|0)););}function jA(A,I,g){var B;if(i[12+(B=h-16|0)>>2]=A,i[B+8>>2]=I,I=0,i[B+4>>2]=0,(0|g)>=1)for(;i[B+4>>2]=i[B+4>>2]|n[i[B+8>>2]+I|0]^n[i[B+12>>2]+I|0],(0|g)!=(0|(I=I+1|0)););return(i[B+4>>2]-1>>>8&1)-1|0}function ZA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g+40|0),_(B,B,g),_(C=A+120|0,g+80|0,I+120|0),sA(Q,I=I+80|0,I),yA(A,E,B),sA(B,E,B),yA(E,Q,C),sA(C,Q,C),h=Q+48|0}function OA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g),_(B,B,g+40|0),_(C=A+120|0,g+80|0,I+120|0),sA(Q,I=I+80|0,I),yA(A,E,B),sA(B,E,B),sA(E,Q,C),yA(C,Q,C),h=Q+48|0}function zA(A,I,g){var B;if(i[12+(B=h-16|0)>>2]=A,i[B+8>>2]=I,I=0,C[B+7|0]=0,g)for(;C[B+7|0]=n[B+7|0]|n[i[B+8>>2]+I|0]^n[i[B+12>>2]+I|0],(0|g)!=(0|(I=I+1|0)););return(n[B+7|0]-1>>>8&1)-1|0}function $A(A,I,g){var B,Q=0,E=0;if(h=B=h-16|0,C[B+15|0]=0,E=-1,!(0|Vg[i[8950]](A,I,g))){for(;C[B+15|0]=n[A+Q|0]|n[B+15|0],32!=(0|(Q=Q+1|0)););E=0-(n[B+15|0]-1>>>8&1)|0}return h=B+16|0,E}function AI(A,I){var g,B,Q,C,E;h=B=h-48|0,H(A,I),H(g=A+80|0,E=I+40|0),function(A,I){var g,B,Q,C,E,n,a,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0,EA=0,iA=0,nA=0;E=K=(W=i[I+12>>2])<<1,n=K>>31,a=K=(O=i[I+4>>2])<<1,K=eg(E,n,K,g=K>>31),X=p,q=K,k=K=gA=i[I+8>>2],V=eg(K,z=K>>31,K,z),K=p+X|0,K=(q=q+V|0)>>>0>>0?K+1|0:K,V=q,B=q=BA=i[I+16>>2],o=q>>31,e=q=(QA=i[I>>2])<<1,X=eg(B,o,q,Q=q>>31),K=p+K|0,K=(q=V+X|0)>>>0>>0?K+1|0:K,j=q,X=i[I+28>>2],l=q=r(X,38),U=X,V=eg(q,h=q>>31,X,_=X>>31),K=p+K|0,K=(q=j+V|0)>>>0>>0?K+1|0:K,T=q,j=i[I+32>>2],Z=eg(f=q=r(j,19),c=q>>31,q=(V=i[I+24>>2])<<1,q>>31),q=p+K|0,q=Z>>>0>($=T+Z|0)>>>0?q+1|0:q,T=$,IA=i[I+36>>2],t=K=r(IA,38),C=K>>31,D=I=($=i[I+20>>2])<<1,Z=eg(K,C,I,s=I>>31),I=p+q|0,H=(K=T+Z|0)<<1,P=K=(K>>>0>>0?I+1|0:I)<<1|K>>>31,S=I=H+33554432|0,R=K=I>>>0<33554432?K+1|0:K,I=K>>26,K=(67108863&K)<<6|S>>>26,q=eg(a,g,B,o),Z=p,T=K,u=K=gA<<1,CA=W,W=eg(K,w=K>>31,W,Y=W>>31),K=p+Z|0,K=(q=W+q|0)>>>0>>0?K+1|0:K,gA=$,W=(Z=eg($,F=$>>31,e,Q))+q|0,q=p+K|0,q=W>>>0>>0?q+1|0:q,BA=W,N=K=X<<1,W=eg(f,c,K,b=K>>31),K=p+q|0,K=(X=BA+W|0)>>>0>>0?K+1|0:K,q=X,W=V,X=eg(t,C,V,y=V>>31),K=p+K|0,K=(q=q+X|0)>>>0>>0?K+1|0:K,X=q,I=I+(q=K<<1|q>>>31)|0,EA=K=T+(X<<=1)|0,K=K>>>0>>0?I+1|0:I,J=I=EA+16777216|0,I=(33554431&(K=I>>>0<16777216?K+1|0:K))<<7|I>>>25,X=K>>25,K=eg(E,n,CA,Y),q=p,T=I,I=(Z=eg(B,o,u,w))+K|0,K=p+q|0,K=I>>>0>>0?K+1|0:K,q=eg(a,g,D,s),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(Z=eg(e,Q,V,y))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,Z=j,j=eg(f,c,j,G=j>>31),K=p+I|0,K=(q=j+q|0)>>>0>>0?K+1|0:K,I=(j=eg(t,C,N,b))+q|0,q=p+K|0,I=((K=I)>>>0>>0?q+1|0:q)<<1|K>>>31,j=K<<1,K=I+X|0,K=(q=T+j|0)>>>0>>0?K+1|0:K,iA=q=(I=q)+33554432|0,X=K=q>>>0<33554432?K+1|0:K,K=-67108864&q,i[A+24>>2]=I-K,j=A,I=eg(I=r($,38),I>>31,$,F),K=p,T=I,$=eg(I=QA,q=I>>31,I,q),q=p+K|0,q=(I=T+$|0)>>>0<$>>>0?q+1|0:q,K=I,AA=I=r(V,19),m=I>>31,M=I=B<<1,I=K+(V=eg(AA,m,I,v=I>>31))|0,K=p+q|0,K=I>>>0>>0?K+1|0:K,q=eg(E,n,l,h),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(V=eg(f,c,u,w))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,V=eg(a,g,t,C),K=p+I|0,x=K=((I=q=V+q|0)>>>0>>0?K+1|0:K)<<1|I>>>31,QA=I=33554432+($=I<<1)|0,BA=q=I>>>0<33554432?K+1|0:K,I=(67108863&q)<<6|I>>>26,V=q>>26,K=eg(AA,m,D,s),q=p,nA=I,I=(O=eg(e,Q,T=O,d=T>>31))+K|0,K=p+q|0,K=I>>>0>>0?K+1|0:K,q=(O=eg(B,o,l,h))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,O=eg(f,c,E,n),K=p+I|0,K=(q=O+q|0)>>>0>>0?K+1|0:K,I=(O=eg(t,C,k,z))+q|0,q=p+K|0,I=((K=I)>>>0>>0?q+1|0:q)<<1|K>>>31,O=K<<1,K=I+V|0,K=(q=nA+O|0)>>>0>>0?K+1|0:K,O=q,(I=q+16777216|0)>>>0<16777216&&(K=K+1|0),nA=I,q=I,I=K>>25,K=(33554431&K)<<7|q>>>25,V=I,I=eg(e,Q,k,z),q=p,L=K,T=eg(a,g,T,d),K=p+q|0,K=(I=T+I|0)>>>0>>0?K+1|0:K,T=eg(AA,m,W,y),q=p+K|0,q=(I=T+I|0)>>>0>>0?q+1|0:q,T=eg(D,s,l,h),K=p+q|0,K=(I=T+I|0)>>>0>>0?K+1|0:K,q=eg(f,c,M,v),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(T=eg(t,C,E,n))+I|0,I=p+K|0,K=(K=(I=q>>>0>>0?I+1|0:I)<<1|q>>>31)+V|0,q=K=(I=L+(q<<=1)|0)>>>0>>0?K+1|0:K,T=K=I+33554432|0,V=q=K>>>0<33554432?q+1|0:q,K&=-67108864,i[j+8>>2]=I-K,I=eg(u,w,gA,F),q=p,K=(AA=eg(B,o,E,n))+I|0,I=p+q|0,I=K>>>0>>0?I+1|0:I,q=(AA=eg(a,g,W,y))+K|0,K=p+I|0,K=q>>>0>>0?K+1|0:K,I=(AA=eg(e,Q,U,_))+q|0,q=p+K|0,q=I>>>0>>0?q+1|0:q,AA=eg(t,C,Z,G),K=p+q|0,K=(K=(K=(I=AA+I|0)>>>0>>0?K+1|0:K)<<1|I>>>31)+(q=X>>26)|0,q=I=(X=(67108863&X)<<6|iA>>>26)+(I<<1)|0,I=K=I>>>0>>0?K+1|0:K,iA=K=q+16777216|0,X=I=K>>>0<16777216?I+1|0:I,I=-33554432&K,i[j+28>>2]=q-I,I=eg(e,Q,CA,Y),K=p,q=eg(a,g,k,z),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(W,y,l,h),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(z=eg(f,c,D,s))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,K=(z=eg(t,C,B,o))+q|0,q=p+I|0,I=K,K=(K>>>0>>0?q+1|0:q)<<1|K>>>31,q=I<<1,K=(I=V>>26)+K|0,K=(q=q+(V=(67108863&V)<<6|T>>>26)|0)>>>0>>0?K+1|0:K,CA=q=(I=q)+16777216|0,V=K=q>>>0<16777216?K+1|0:K,K=-33554432&q,i[j+12>>2]=I-K,z=A,I=eg(W,y,u,w),K=p,q=eg(B,o,B,o),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(E,n,D,s),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(a,g,N,b),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(j=eg(e,Q,Z,G))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,K=(IA=eg(t,C,j=IA,T=j>>31))+q|0,q=p+I|0,A=(I=K)<<1,K=(I=X>>25)+(K=(K>>>0>>0?q+1|0:q)<<1|K>>>31)|0,K=(q=A+(X=(33554431&X)<<7|iA>>>25)|0)>>>0>>0?K+1|0:K,IA=q=(I=q)+33554432|0,X=K=q>>>0<33554432?K+1|0:K,K=-67108864&q,i[z+32>>2]=I-K,K=V>>25,q=(V=(33554431&V)<<7|CA>>>25)+(H-(I=-67108864&S)|0)|0,I=K+(P-((I>>>0>H>>>0)+R|0)|0)|0,K=I=q>>>0>>0?I+1|0:I,V=I=q+33554432|0,I=((67108863&(K=I>>>0<33554432?K+1|0:K))<<6|I>>>26)+(EA=EA-(-33554432&J)|0)|0,i[z+20>>2]=I,I=-67108864&V,i[z+16>>2]=q-I,I=eg(E,n,W,y),q=p,K=(W=eg(gA,F,M,v))+I|0,I=p+q|0,I=K>>>0>>0?I+1|0:I,q=(W=eg(u,w,U,_))+K|0,K=p+I|0,K=q>>>0>>0?K+1|0:K,I=(W=eg(a,g,Z,G))+q|0,q=p+K|0,q=I>>>0>>0?q+1|0:q,W=eg(e,Q,j,T),K=p+q|0,K=(K=(K=(I=W+I|0)>>>0>>0?K+1|0:K)<<1|I>>>31)+(q=X>>26)|0,K=(I=(X=(67108863&X)<<6|IA>>>26)+(I<<1)|0)>>>0>>0?K+1|0:K,q=I,X=I,I=K,I=(K=q+16777216|0)>>>0<16777216?I+1|0:I,q=-33554432&K,i[z+36>>2]=X-q,V=O-(-33554432&nA)|0,I=(K=eg((33554431&I)<<7|K>>>25,I>>25,19,0))+($-(q=-67108864&QA)|0)|0,q=p+(x-((q>>>0>$>>>0)+BA|0)|0)|0,q=I>>>0>>0?q+1|0:q,K=I,I=q,I=((67108863&(I=(q=K+33554432|0)>>>0<33554432?I+1|0:I))<<6|q>>>26)+V|0,i[z+4>>2]=I,A=-67108864&q,i[z>>2]=K-A}(C=A+120|0,I+80|0),sA(Q=A+40|0,I,E),H(B,Q),sA(Q,g,A),yA(g,g,A),yA(A,B,Q),yA(C,C,g),h=B+48|0}function II(A){var I,g;return(A=(I=i[8943])+(g=A+3&-4)|0)>>>0<=I>>>0&&(0|g)>=1||A>>>0>Wg()<<16>>>0&&!(0|w(0|A))?(i[8960]=48,-1):(i[8943]=A,I)}function gI(A,I){var g;return h=g=h+-64|0,(I-1&255)>>>0>=64&&(OI(),e()),C[g+3|0]=1,C[g+1|0]=0,C[g+2|0]=1,C[0|g]=I,WI(4|g),tI(8|g,0,0),EA(g+16|0,0,48),hA(A,g),h=g- -64|0,0}function BI(A,I,g,B,Q,C,E){var i=0,n=0;i=B,1==(((i=(n=g+63|0)>>>0<63?i+1|0:i)>>>6|0)+(0!=(0|(i=(63&i)<<26|n>>>6)))|0)&(n=0-i|0)>>>0>>0&&(OI(),e()),SI(A,I,g,B,Q,C,E)}function QI(A,I){for(var g=0,B=0,Q=0,C=0;B=(g=Q<<3)+A|0,C=i[(g=I+g|0)>>2],g=i[B+4>>2]^i[g+4>>2],i[B>>2]=i[B>>2]^C,i[B+4>>2]=g,128!=(0|(Q=Q+1|0)););}function CI(A){var I,g;return 95&(1+(32704^A)>>>8^-1)|45&(1+(16321^A)>>>8^-1)|(I=A+65510>>>8&255)&A+65|(g=A+65484>>>8|0)&A+71&(255^I)|A+252&A+65474>>>8&(-1^g)&255}function EI(A){var I,g;return 47&(1+(16320^A)>>>8^-1)|43&(1+(16321^A)>>>8^-1)|(I=A+65510>>>8&255)&A+65|(g=A+65484>>>8|0)&A+71&(255^I)|A+252&A+65474>>>8&(-1^g)&255}function iI(A,I,g,B){var Q=0;Q=-1;A:if(!(g>>>0>64|B-1>>>0>63)){I:{if(!g||!I){if(!gI(A,255&B))break I;break A}if(RA(A,255&B,I,255&g))break A}Q=0}return Q}function nI(A,I){var g,B,Q;h=g=h-144|0,j(g+96|0,I+80|0),_(g+48|0,I,g+96|0),_(g,I+40|0,g+96|0),BA(A,g),B=A,Q=KI(g+48|0)<<7^n[A+31|0],C[B+31|0]=Q,h=g+144|0}function aI(A,I){var g,B=0;if(C[15+(g=h-16|0)|0]=0,I)for(;C[g+15|0]=n[A+B|0]|n[g+15|0],(0|(B=B+1|0))!=(0|I););return n[g+15|0]-1>>>8&1}function rI(A,I,g,B){var Q;return B=I+B|0,B=(Q=A+g|0)>>>0>>0?B+1|0:B,g=eg(A<<1&-2,1&(I=I<<1|A>>>31),g,0),A=p+B|0,p=A=(I=g+Q|0)>>>0>>0?A+1|0:A,I}function oI(A,I,g){var B,Q=0;if(B=g>>>3|0)for(g=0;vA((Q=g<<3)+A|0,i[(Q=I+Q|0)>>2],i[Q+4>>2]),(0|B)!=(0|(g=g+1|0)););}function eI(A,I){var g=0;!function(A,I){I&&((I=i[A>>2])&&fI(i[I+4>>2],i[A+16>>2]<<10),(I=i[A+4>>2])&&fI(I,i[A+20>>2]<<3))}(A,4&I),m(i[A+4>>2]),i[A+4>>2]=0,(I=i[A>>2])&&(g=i[I>>2])&&m(g),m(I),i[A>>2]=0}function tI(A,I,g){C[0|A]=I,C[A+1|0]=I>>>8,C[A+2|0]=I>>>16,C[A+3|0]=I>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24}function fI(A,I){var g;if(i[12+(g=h-16|0)>>2]=A,I)for(A=0;C[i[g+12>>2]+A|0]=0,(0|I)!=(0|(A=A+1|0)););}function cI(A,I){A|=0;var g=0,B=0,Q=0;if(I|=0)for(;B=A+g|0,Q=YI(),C[0|B]=Q,(0|(g=g+1|0))!=(0|I););}function yI(A,I,g,B,Q){var C,E;return A|=0,I|=0,g|=0,B|=0,h=C=(E=h)-128&-64,IA(C,Q|=0),z(C,I,g,B),Z(C,A),h=E,0}function sI(A){var I=0,g=0,B=0;for(I=1;I=n[0|(B=A+g|0)]+I|0,C[0|B]=I,I=I>>>8|0,4!=(0|(g=g+1|0)););}function wI(A,I,g,B,Q,C,E,i){var n,a=0;return h=n=h-32|0,a=-1,jI(n,E,i)||(a=Qg(A,I,g,B,Q,C,n),fI(n,32)),h=n+32|0,a}function hI(A,I,g,B,Q,C,E,i){var n,a=0;return h=n=h-32|0,a=-1,jI(n,E,i)||(a=Cg(A,I,g,B,Q,C,n),fI(n,32)),h=n+32|0,a}function DI(A,I){var g,B,Q;_(A,I,g=I+120|0),_(A+40|0,B=I+40|0,Q=I+80|0),_(A+80|0,Q,g),_(A+120|0,I,B)}function uI(A,I,g,B,Q,C,E){return!B&g>>>0>=16|B?hI(A,I+16|0,I,g-16|0,B-(g>>>0<16)|0,Q,C,E):-1}function pI(A,I){for(var g=0,B=0;C[0|(B=A+g|0)]=n[0|B]^n[I+g|0],8!=(0|(g=g+1|0)););}function lI(A,I,g){var B,Q;h=B=(Q=h)-384&-64,qI(B,0,0,24),sg(B,I,32,0),sg(B,g,32,0),TI(B,A,24),h=Q}function FI(A,I){var g;sA(A,g=I+40|0,I),yA(A+40|0,g,I),SA(A+80|0,I+80|0),_(A+120|0,I+120|0,2224)}function GI(A,I,g,B,Q,C,E){return I-1>>>0>63|E>>>0>64?-1:function(A,I,g,B,Q,C,E){var i,n=0;if(i=n=h,h=n=n-384&-64,!(!A|(B-1&255)>>>0>=64|(Q|C?!I:0)|E>>>0>=65|(E?!g:0)))return E?RA(n,B,g,E):gI(n,B),QA(n,I,Q,C),M(n,A,B),h=i,0;OI(),e()}(A,g,C,255&I,B,Q,255&E)}function kI(A,I,g,B,Q,C,E){return!B&g>>>0>=4294967280|B&&(OI(),e()),wI(A+16|0,A,I,g,B,Q,C,E)}function _I(A,I){var g;_(A,I,g=I+120|0),_(A+40|0,I+40|0,I=I+80|0),_(A+80|0,I,g)}function HI(A){var I;return I=n[0|A]|n[A+1|0]<<8,A=n[A+2|0],p=A>>>16|0,I|A<<16}function YI(){var A,I;return h=A=h-16|0,C[A+15|0]=0,I=0|f(1024,A+15|0,0),h=A+16|0,0|I}function bI(A,I,g,B,Q){var E;return h=E=h-416|0,function(A,I){var g,B=0,Q=0;for(h=g=h-192|0,MI(A),EA(g- -64|0,54,128),C[g+64|0]=54^n[0|I],B=1;C[0|(Q=(g- -64|0)+B|0)]=n[0|Q]^n[I+B|0],32!=(0|(B=B+1|0)););for(V(A,g- -64|0,128,0),MI(A=A+208|0),EA(g- -64|0,92,128),C[g+64|0]=92^n[0|I],B=1;C[0|(Q=(g- -64|0)+B|0)]=n[0|Q]^n[I+B|0],32!=(0|(B=B+1|0)););V(A,g- -64|0,128,0),fI(g- -64|0,128),fI(g,64),h=g+192|0}(E,Q),V(E,I,g,B),function(A,I){var g,B=0;h=g=h+-64|0,function(A,I){var g;h=g=h+-64|0,UI(A,g),V(A=A+208|0,g,64,0),UI(A,I),fI(g,64),h=g- -64|0}(A,g),B=i[g+28>>2],A=i[g+24>>2],C[I+24|0]=A,C[I+25|0]=A>>>8,C[I+26|0]=A>>>16,C[I+27|0]=A>>>24,C[I+28|0]=B,C[I+29|0]=B>>>8,C[I+30|0]=B>>>16,C[I+31|0]=B>>>24,B=i[g+20>>2],A=i[g+16>>2],C[I+16|0]=A,C[I+17|0]=A>>>8,C[I+18|0]=A>>>16,C[I+19|0]=A>>>24,C[I+20|0]=B,C[I+21|0]=B>>>8,C[I+22|0]=B>>>16,C[I+23|0]=B>>>24,B=i[g+12>>2],A=i[g+8>>2],C[I+8|0]=A,C[I+9|0]=A>>>8,C[I+10|0]=A>>>16,C[I+11|0]=A>>>24,C[I+12|0]=B,C[I+13|0]=B>>>8,C[I+14|0]=B>>>16,C[I+15|0]=B>>>24,B=i[g+4>>2],A=i[g>>2],C[0|I]=A,C[I+1|0]=A>>>8,C[I+2|0]=A>>>16,C[I+3|0]=A>>>24,C[I+4|0]=B,C[I+5|0]=B>>>8,C[I+6|0]=B>>>16,C[I+7|0]=B>>>24,h=g- -64|0}(E,A),h=E+416|0,0}function mI(A,I,g,B){var Q;return h=Q=h-208|0,MI(Q),V(Q,I,g,B),UI(Q,A),h=Q+208|0,0}function vI(A,I){var g=0;return(-1>>>(g=31&I)&A)<>>A}function UI(A,I){var g;h=g=h-704|0,function(A,I){var g,B=0;(g=i[A+72>>2]>>>3&127)>>>0<=111?X(80+(A+g|0)|0,35424,112-g|0):(X((B=A+80|0)+g|0,35424,128-g|0),F(A,B,I,I+640|0),EA(B,0,112)),oI(A+192|0,A- -64|0,16),F(A,A+80|0,I,I+640|0)}(A,g),oI(I,A,64),fI(g,704),fI(A,208),h=g+704|0}function SI(A,I,g,B,Q,C,E){1==(0|B)|B>>>0>1&&(OI(),e()),Vg[i[8957]](A,I,g,B,Q,C,E)}function NI(A,I,g,B,Q,C){1==(0|B)|B>>>0>1&&(OI(),e()),Vg[i[8956]](A,I,g,B,Q,1,0,C)}function MI(A){i[A+64>>2]=0,i[A+68>>2]=0,i[A+72>>2]=0,i[A+76>>2]=0,X(A,34720,64)}function dI(A,I,g){return g>>>0>=256&&(t(2016,2036,107,2089),e()),M(A,I,255&g)}function PI(){var A;h=A=h-16|0,C[A+15|0]=0,f(1062,A+15|0,0),h=A+16|0}function RI(A){var I;return h=I=h-32|0,BA(I,A),A=aI(I,32),h=I+32|0,A}function JI(A,I){var g;h=g=h-128|0,function(A,I){SA(A,I),SA(A+40|0,I+40|0),SA(A+80|0,I+80|0)}(g+8|0,I),AI(A,g+8|0),h=g+128|0}function xI(A,I){C[0|A]=I,C[A+1|0]=I>>>8,C[A+2|0]=I>>>16,C[A+3|0]=I>>>24}function LI(A,I,g){eA(A,I,g),eA(A+40|0,I+40|0,g),eA(A+80|0,I+80|0,g)}function KI(A){var I;return h=I=h-32|0,BA(I,A),h=I+32|0,1&C[0|I]}function qI(A,I,g,B){return 0|iI(A|=0,I|=0,g|=0,B|=0)}function XI(A){C[A+32|0]=1,C[A+33|0]=0,C[A+34|0]=0,C[A+35|0]=0}function VI(A){i[A>>2]=0,i[A+4>>2]=0,i[A+8>>2]=0,i[A+12>>2]=0}function WI(A){C[0|A]=0,C[A+1|0]=0,C[A+2|0]=0,C[A+3|0]=0}function TI(A,I,g){return 0|dI(A|=0,I|=0,g|=0)}function jI(A,I,g){return 0|function(A,I,g){var B,Q=0;return h=B=h-32|0,Q=-1,$A(B,g,I)||(Q=K(A,35552,B)),h=B+32|0,Q}(A|=0,I|=0,g|=0)}function ZI(A,I,g){return 0|$A(A|=0,I|=0,g|=0)}function OI(){var A;(A=i[9105])&&Vg[0|A](),c(),e()}function zI(A){Ug(A),wg(A+40|0),wg(A+80|0),Ug(A+120|0)}function $I(A,I,g,B,Q,C){Vg[i[8953]](A,I,g,B,Q,0,0,C)}function Ag(A,I,g,B,Q,C){Vg[i[8953]](A,I,g,B,Q,1,0,C)}function Ig(A,I){return A|=0,cI(I|=0,32),0|cg(A,I)}function gg(A,I){return A=function(A,I){var g=0,B=0;A:{if(B=255&I){if(3&A)for(;;){if(!(g=n[0|A])|(0|g)==(255&I))break A;if(!(3&(A=A+1|0)))break}I:if(!((-1^(g=i[A>>2]))&g-16843009&-2139062144))for(B=r(B,16843009);;){if((-1^(g^=B))&g-16843009&-2139062144)break I;if(g=i[A+4>>2],A=A+4|0,g-16843009&(-1^g)&-2139062144)break}for(;(B=n[0|(g=A)])&&(A=g+1|0,(0|B)!=(255&I)););return g}return YA(A)+A|0}return A}(A,I),n[0|A]==(255&I)?A:0}function Bg(A,I,g,B,Q,C){return q(A,I,g,B,Q,C,0),0}function Qg(A,I,g,B,Q,C,E){return nA(A,I,g,B,Q,C,E)}function Cg(A,I,g,B,Q,C,E){return rA(A,I,g,B,Q,C,E)}function Eg(A,I,g,B,Q,C,E){return GI(A,I,g,B,Q,C,E)}function ig(A,I){MI(A),I&&V(A,35728,34,0)}function ng(A,I,g,B,Q){return lA(A,I,g,B,Q,0)}function ag(A,I){return 0|cg(A|=0,I|=0)}function rg(A,I,g,B){Vg[i[8955]](A,I,0,g,B)}function og(A,I,g){Vg[i[8954]](A,64,0,I,g)}function eg(A,I,g,B){return function(A,I,g,B){var Q,C,E,i,n=0,a=0;return i=r(n=g>>>16|0,a=A>>>16|0),n=(65535&(a=((E=r(Q=65535&g,C=65535&A))>>>16|0)+r(a,Q)|0))+r(n,C)|0,A=(r(I,g)+i|0)+r(A,B)+(a>>>16)+(n>>>16)|0,p=A,65535&E|n<<16}(A,I,g,B)}function tg(A,I){return(255&(A^I))-1>>>31|0}function fg(A,I,g){!function(A,I,g){var B,Q;h=B=h-128|0,wg(A),wg(A+40|0),Ug(A+80|0),LI(A,I,tg(g=g-((0-(Q=(128&g)>>>7|0)&g)<<1)<<24>>24,1)),LI(A,I+120|0,tg(g,2)),LI(A,I+240|0,tg(g,3)),LI(A,I+360|0,tg(g,4)),LI(A,I+480|0,tg(g,5)),LI(A,I+600|0,tg(g,6)),LI(A,I+720|0,tg(g,7)),LI(A,I+840|0,tg(g,8)),SA(B+8|0,A+40|0),SA(B+48|0,A),mA(B+88|0,A+80|0),LI(A,B+8|0,Q),h=B+128|0}(A,r(I,960)+3488|0,g)}function cg(A,I){return 0|Vg[i[8951]](A,I)}function yg(A,I,g,B){Vg[i[8948]](A,I,g,B)}function sg(A,I,g,B){return hg(A,I,g,B)}function wg(A){i[A>>2]=1,EA(A+4|0,0,36)}function hg(A,I,g,B){return QA(A,I,g,B)}function Dg(A,I,g){return function(A,I,g){var B=0,Q=0,C=0,E=0;return B=31&(C=E=63&g),C>>>0>=32?B=-1>>>B|0:(Q=-1>>>B|0,B=(1<>>B),C=B&A,B=I&Q,Q=31&E,E>>>0>=32?(B=C<>>32-Q|B<>>0>=32?(B=-1<>>32-g|-1<>>0>=32?(g=0,A=B>>>I|0):(g=B>>>I|0,A=((1<>>I),p=g|C,A|E}(A,I,g)}function ug(A,I,g){return function(A,I,g){var B=0,Q=0,C=0,E=0,i=0;return B=31&(E=63&g),E>>>0>=32?(Q=-1<>>32-B|-1<>>0>=32?(Q=0,E=B>>>C|0):(Q=B>>>C|0,E=((1<>>C),i=Q,C=31&(B=0-g&63),B>>>0>=32?(Q=0,g=-1>>>C|0):(Q=-1>>>C|0,g=(1<>>C),A&=g,I&=Q,Q=31&B,B>>>0>=32?(g=A<>>32-Q|I<>>0<18,U=U+2|0,Y;);xI(A,g+1634760805|0),xI(A+4|0,h+B|0),xI(A+8|0,D+Q|0),xI(A+12|0,b+C|0),xI(A+16|0,u+E|0),xI(A+20|0,H+857760878|0),xI(A+24|0,p+e|0),xI(A+28|0,l+t|0),xI(A+32|0,F+f|0),xI(A+36|0,_+c|0),xI(A+40|0,I+2036477234|0),xI(A+44|0,s+i|0),xI(A+48|0,y+a|0),xI(A+52|0,w+r|0),xI(A+56|0,k+o|0),xI(A+60|0,G+1797285236|0)}(A,I,g)}function vg(A){EA(A,0,1024)}function Ug(A){EA(A,0,40)}function Sg(){return 16}function Ng(){return 32}function Mg(){return 24}function dg(){return-17}function Pg(){return 64}function Rg(){return 1}function Jg(){return 2}function xg(){return 8}function Lg(){return 0}function Kg(){return-1}function qg(){return 3}Q(I=n,1024,"InsgcmV0dXJuIE1vZHVsZS5nZXRSYW5kb21WYWx1ZSgpOyB9IgB7IGlmIChNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPT09IHVuZGVmaW5lZCkgeyB0cnkgeyB2YXIgd2luZG93XyA9ICdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ID8gd2luZG93IDogc2VsZjsgdmFyIGNyeXB0b18gPSB0eXBlb2Ygd2luZG93Xy5jcnlwdG8gIT09ICd1bmRlZmluZWQnID8gd2luZG93Xy5jcnlwdG8gOiB3aW5kb3dfLm1zQ3J5cHRvOyB2YXIgcmFuZG9tVmFsdWVzU3RhbmRhcmQgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IG5ldyBVaW50MzJBcnJheSgxKTsgY3J5cHRvXy5nZXRSYW5kb21WYWx1ZXMoYnVmKTsgcmV0dXJuIGJ1ZlswXSA+Pj4gMDsgfTsgcmFuZG9tVmFsdWVzU3RhbmRhcmQoKTsgTW9kdWxlLmdldFJhbmRvbVZhbHVlID0gcmFuZG9tVmFsdWVzU3RhbmRhcmQ7IH0gY2F0Y2ggKGUpIHsgdHJ5IHsgdmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpOyB2YXIgcmFuZG9tVmFsdWVOb2RlSlMgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IGNyeXB0b1sncmFuZG9tQnl0ZXMnXSg0KTsgcmV0dXJuIChidWZbMF0gPDwgMjQgfCBidWZbMV0gPDwgMTYgfCBidWZbMl0gPDwgOCB8IGJ1ZlszXSkgPj4+IDA7IH07IHJhbmRvbVZhbHVlTm9kZUpTKCk7IE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9IHJhbmRvbVZhbHVlTm9kZUpTOyB9IGNhdGNoIChlKSB7IHRocm93ICdObyBzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm91bmQnOyB9IH0gfSB9AExpYnNvZGl1bURSR2J1Zl9sZW4gPD0gU0laRV9NQVgAcmFuZG9tYnl0ZXMvcmFuZG9tYnl0ZXMuYwByYW5kb21ieXRlcwBTLT5idWZsZW4gPD0gQkxBS0UyQl9CTE9DS0JZVEVTAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9ibGFrZTJiLXJlZi5jAGJsYWtlMmJfZmluYWwAAAAAAAAAAAjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FtvdXRsZW4gPD0gVUlOVDhfTUFYAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9nZW5lcmljaGFzaF9ibGFrZTJiLmMAY3J5cHRvX2dlbmVyaWNoYXNoX2JsYWtlMmJfZmluYWwAAAAAAAAAtnhZ/4Vy0wC9bhX/DwpqACnAAQCY6Hn/vDyg/5lxzv8At+L+tA1I/wAAAAAAAAAAsKAO/tPJhv+eGI8Af2k1AGAMvQCn1/v/n0yA/mpl4f8e/AQAkgyu"),Q(I,2224,"WfGy/grlpv973Sr+HhTUAFKAAwAw0fMAd3lA/zLjnP8AbsUBZxuQ"),Q(I,2272,"hTuMAb3xJP/4JcMBYNw3ALdMPv/DQj0AMkykAeGkTP9MPaP/dT4fAFGRQP92QQ4AonPW/waKLgB85vT/CoqPADQawgC49EwAgY8pAb70E/97qnr/YoFEAHnVkwBWZR7/oWebAIxZQ//v5b4BQwu1AMbwif7uRbz/Q5fuABMqbP/lVXEBMkSH/xFqCQAyZwH/UAGoASOYHv8QqLkBOFno/2XS/AAp+kcAzKpP/w4u7/9QTe8AvdZL/xGN+QAmUEz/vlV1AFbkqgCc2NABw8+k/5ZCTP+v4RD/jVBiAUzb8gDGonIALtqYAJsr8f6boGj/M7ulAAIRrwBCVKAB9zoeACNBNf5F7L8ALYb1AaN73QAgbhT/NBelALrWRwDpsGAA8u82ATlZigBTAFT/iKBkAFyOeP5ofL4AtbE+//opVQCYgioBYPz2AJeXP/7vhT4AIDicAC2nvf+OhbMBg1bTALuzlv76qg7/0qNOACU0lwBjTRoA7pzV/9XA0QFJLlQAFEEpATbOTwDJg5L+qm8Y/7EhMv6rJsv/Tvd0ANHdmQCFgLIBOiwZAMknOwG9E/wAMeXSAXW7dQC1s7gBAHLbADBekwD1KTgAfQ3M/vStdwAs3SD+VOoUAPmgxgHsfur/L2Oo/qrimf9ms9gA4o16/3pCmf629YYA4+QZAdY56//YrTj/tefSAHeAnf+BX4j/bn4zAAKpt/8HgmL+RbBe/3QE4wHZ8pH/yq0fAWkBJ/8ur0UA5C86/9fgRf7POEX/EP6L/xfP1P/KFH7/X9Vg/wmwIQDIBc//8SqA/iMhwP/45cQBgRF4APtnl/8HNHD/jDhC/yji9f/ZRiX+rNYJ/0hDhgGSwNb/LCZwAES4S//OWvsAleuNALWqOgB09O8AXJ0CAGatYgDpiWABfzHLAAWblAAXlAn/03oMACKGGv/bzIgAhggp/+BTK/5VGfcAbX8A/qmIMADud9v/563VAM4S/v4Iugf/fgkHAW8qSABvNOz+YD+NAJO/f/7NTsD/DmrtAbvbTACv87v+aVmtAFUZWQGi85QAAnbR/iGeCQCLoy7/XUYoAGwqjv5v/I7/m9+QADPlp/9J/Jv/XnQM/5ig2v+c7iX/s+rP/8UAs/+apI0A4cRoAAojGf7R1PL/Yf3e/rhl5QDeEn8BpIiH/x7PjP6SYfMAgcAa/slUIf9vCk7/k1Gy/wQEGACh7tf/Bo0hADXXDv8ptdD/54udALPL3f//uXEAveKs/3FC1v/KPi3/ZkAI/06uEP6FdUT/"),Q(I,3264,"AQ=="),Q(I,3296,"JuiVj8KyJ7BFw/SJ8u+Y8NXfrAXTxjM5sTgCiG1T/AXHF2pwPU3YT7o8C3YNEGcPKiBT+iw5zMZOx/13kqwDeuz///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////f+3T9VwaYxJY1pz3ot753hQ="),Q(I,3487,"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"),Q(I,34460,"AQ=="),Q(I,34496,"AQ=="),Q(I,34528,"4Ot6fDtBuK4WVuP68Z/EatoJjeucMrH9hmIFFl9JuABfnJW8o1CMJLHQsVWcg+9bBERcxFgcjobYIk7d0J8RV+z///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////fw=="),Q(I,34720,"CMm882fmCWo7p8qEha5nuyv4lP5y82488TYdXzr1T6XRguatf1IOUR9sPiuMaAWba71B+6vZgx95IX4TGc3gWyKuKNeYL4pCzWXvI5FEN3EvO03sz/vAtbzbiYGl27XpOLVI81vCVjkZ0AW28RHxWZtPGa+kgj+SGIFt2tVeHKtCAgOjmKoH2L5vcEUBW4MSjLLkTr6FMSTitP/Vw30MVW+Je/J0Xb5ysZYWO/6x3oA1Esclpwbcm5Qmac908ZvB0krxnsFpm+TjJU84hke+77XVjIvGncEPZZysd8yhDCR1AitZbyzpLYPkpm6qhHRK1PtBvdypsFy1UxGD2oj5dqvfZu5SUT6YEDK0LW3GMag/IfuYyCcDsOQO777Hf1m/wo+oPfML4MYlpwqTR5Gn1W+CA+BRY8oGcG4OCmcpKRT8L9JGhQq3JybJJlw4IRsu7SrEWvxtLE3fs5WdEw04U95jr4tUcwplqLJ3PLsKanbmru1HLsnCgTs1ghSFLHKSZAPxTKHov6IBMEK8S2YaqJGX+NBwi0vCML5UBqNRbMcYUu/WGeiS0RCpZVUkBpnWKiBxV4U1DvS40bsycKBqEMjQ0rgWwaQZU6tBUQhsNx6Z647fTHdIJ6hIm+G1vLA0Y1rJxbMMHDnLikHjSqrYTnPjY3dPypxbo7iy1vNvLmj8su9d7oKPdGAvF0NvY6V4cqvwoRR4yITsOWQaCALHjCgeYyP6/76Q6b2C3utsUKQVecay96P5vitTcuPyeHHGnGEm6s4+J8oHwsAhx7iG0R7r4M3WfdrqeNFu7n9PffW6bxdyqmfwBqaYyKLFfWMKrg35vgSYPxEbRxwTNQtxG4R9BCP1d9sokyTHQHuryjK8vskVCr6ePEwNEJzEZx1DtkI+y77UxUwqfmX8nCl/Wez61jqrb8tfF1hHSowZRGyA"),Q(I,35568,"YjY0X3BvcyA8PSBiNjRfbGVuAHNvZGl1bS9jb2RlY3MuYwBzb2RpdW1fYmluMmJhc2U2NAAkYXJnb24yaWQAJGFyZ29uMmkAJHY9ACRtPQAsdD0ALHA9ACRhcmdvbjJpZCR2PQAkYXJnb24yaSR2PQAkYXJnb24yaWQkACRhcmdvbjJpJA=="),Q(I,35728,"U2lnRWQyNTUxOSBubyBFZDI1NTE5IGNvbGxpc2lvbnMBADEuMC4xOA=="),Q(I,35772,"UI5QAABAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAAN");var Xg,Vg=((Xg=[null,yI,function(A,I,g,B,Q){var C;return A|=0,h=C=h-16|0,yI(C,I|=0,g|=0,B|=0,Q|=0),A=kg(A,C),h=C+16|0,0|A},function(A,I){return IA(A|=0,I|=0),0},function(A,I,g,B){return z(A|=0,I|=0,g|=0,B|=0),0},function(A,I){return Z(A|=0,I|=0),0},function(A,I,g){A|=0,I|=0;var B,Q=0,E=0;if(h=B=h-336|0,Q=-1,!function(A){var I,g=0,B=0,Q=0,E=0;for(C[11+(I=h-16|0)|0]=0,C[I+12|0]=0,C[I+13|0]=0,C[I+14|0]=0,i[I+8>>2]=0;;){for(Q=n[A+B|0],g=0;C[0|(E=(I+8|0)+g|0)]=n[0|E]|Q^n[(34464+(g<<5)|0)+B|0],7!=(0|(g=g+1|0)););if(31==(0|(B=B+1|0)))break}for(B=127&n[A+31|0],A=0,g=0;C[0|(Q=(I+8|0)+g|0)]=n[0|Q]|B^n[34495+(g<<5)|0],7!=(0|(g=g+1|0)););for(g=0;g=n[(I+8|0)+A|0]-1|g,7!=(0|(A=A+1|0)););return g>>>8&1}(g|=0)){for(Q=0;C[A+Q|0]=n[I+Q|0],32!=(0|(Q=Q+1|0)););for(C[0|A]=248&n[0|A],C[A+31|0]=63&n[A+31|0]|64,d(B+288|0,g),wg(B+240|0),Ug(B+192|0),SA(B+144|0,B+288|0),wg(B+96|0),g=254,I=0;Q=I,E=g,AA(B+240|0,B+144|0,Q^=I=n[(g>>>3|0)+A|0]>>>(7&g)&1),AA(B+192|0,B+96|0,Q),g=g-1|0,yA(B+48|0,B+144|0,B+96|0),yA(B,B+240|0,B+192|0),sA(B+240|0,B+240|0,B+192|0),sA(B+192|0,B+144|0,B+96|0),_(B+96|0,B+48|0,B+240|0),_(B+192|0,B+192|0,B),H(B+48|0,B),H(B,B+240|0),sA(B+144|0,B+96|0,B+192|0),yA(B+192|0,B+96|0,B+192|0),_(B+240|0,B,B+48|0),yA(B,B,B+48|0),H(B+192|0,B+192|0),P(B+96|0,B),H(B+144|0,B+144|0),sA(B+48|0,B+48|0,B+96|0),_(B+96|0,B+288|0,B+192|0),_(B+192|0,B,B+48|0),E;);AA(B+240|0,B+144|0,I),AA(B+192|0,B+96|0,I),j(B+192|0,B+192|0),_(B+240|0,B+240|0,B+192|0),BA(A,B+240|0),Q=0}return h=B+336|0,0|Q},function(A,I){A|=0,I|=0;var g,B=0;for(h=g=h-208|0;C[A+B|0]=n[I+B|0],32!=(0|(B=B+1|0)););return C[0|A]=248&n[0|A],C[A+31|0]=63&n[A+31|0]|64,CA(g+48|0,A),function(A,I,g){var B;h=B=h-96|0,sA(B+48|0,g,I),yA(B,g,I),j(B,B),_(A,B+48|0,B),h=B+96|0}(g,g+88|0,g+128|0),BA(A,g),h=g+208|0,0},function(A,I,g,B,Q){A|=0,B|=0,Q|=0;var E,a=0;if(h=E=h-112|0,(I|=0)|(g|=0)){a=n[Q+28|0]|n[Q+29|0]<<8|n[Q+30|0]<<16|n[Q+31|0]<<24,i[E+24>>2]=n[Q+24|0]|n[Q+25|0]<<8|n[Q+26|0]<<16|n[Q+27|0]<<24,i[E+28>>2]=a,a=n[Q+20|0]|n[Q+21|0]<<8|n[Q+22|0]<<16|n[Q+23|0]<<24,i[E+16>>2]=n[Q+16|0]|n[Q+17|0]<<8|n[Q+18|0]<<16|n[Q+19|0]<<24,i[E+20>>2]=a,a=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,i[E>>2]=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,i[E+4>>2]=a,a=n[Q+12|0]|n[Q+13|0]<<8|n[Q+14|0]<<16|n[Q+15|0]<<24,i[E+8>>2]=n[Q+8|0]|n[Q+9|0]<<8|n[Q+10|0]<<16|n[Q+11|0]<<24,i[E+12>>2]=a,Q=n[0|B]|n[B+1|0]<<8|n[B+2|0]<<16|n[B+3|0]<<24,B=n[B+4|0]|n[B+5|0]<<8|n[B+6|0]<<16|n[B+7|0]<<24,i[E+104>>2]=0,i[E+108>>2]=0,i[E+96>>2]=Q,i[E+100>>2]=B;A:{if(!g&I>>>0>=64|g){for(;;){for(mg(A,E+96|0,E),Q=8,B=1;B=n[0|(a=(E+96|0)+Q|0)]+B|0,C[0|a]=B,B=B>>>8|0,16!=(0|(Q=Q+1|0)););if(A=A- -64|0,g=g-1|0,!(!(g=(I=I+-64|0)>>>0<4294967232?g+1|0:g)&I>>>0>63|g))break}if(!(I|g))break A}for(Q=0,mg(E+32|0,E+96|0,E);C[A+Q|0]=n[(E+32|0)+Q|0],(0|I)!=(0|(Q=Q+1|0)););}fI(E+32|0,64),fI(E,32)}return h=E+112|0,0},function(A,I,g,B,Q,E,a,r){A|=0,I|=0,Q|=0,E|=0,a|=0,r|=0;var o,e=0,t=0;if(h=o=h-112|0,(g|=0)|(B|=0)){for(e=n[r+28|0]|n[r+29|0]<<8|n[r+30|0]<<16|n[r+31|0]<<24,i[o+24>>2]=n[r+24|0]|n[r+25|0]<<8|n[r+26|0]<<16|n[r+27|0]<<24,i[o+28>>2]=e,e=n[r+20|0]|n[r+21|0]<<8|n[r+22|0]<<16|n[r+23|0]<<24,i[o+16>>2]=n[r+16|0]|n[r+17|0]<<8|n[r+18|0]<<16|n[r+19|0]<<24,i[o+20>>2]=e,e=n[r+4|0]|n[r+5|0]<<8|n[r+6|0]<<16|n[r+7|0]<<24,i[o>>2]=n[0|r]|n[r+1|0]<<8|n[r+2|0]<<16|n[r+3|0]<<24,i[o+4>>2]=e,e=8,t=n[r+12|0]|n[r+13|0]<<8|n[r+14|0]<<16|n[r+15|0]<<24,i[o+8>>2]=n[r+8|0]|n[r+9|0]<<8|n[r+10|0]<<16|n[r+11|0]<<24,i[o+12>>2]=t,r=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,i[o+96>>2]=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,i[o+100>>2]=r;C[(o+96|0)+e|0]=E,E=(255&a)<<24|E>>>8,a=a>>>8|0,16!=(0|(e=e+1|0)););if(!B&g>>>0>63|B)for(;;){for(e=0,mg(o+32|0,o+96|0,o);C[A+e|0]=n[(o+32|0)+e|0]^n[I+e|0],r=1,64!=(0|(e=e+1|0)););for(e=8;Q=n[0|(E=(o+96|0)+e|0)]+r|0,C[0|E]=Q,r=Q>>>8|0,16!=(0|(e=e+1|0)););if(I=I- -64|0,A=A- -64|0,B=B-1|0,!(!(B=(g=g+-64|0)>>>0<4294967232?B+1|0:B)&g>>>0>63|B))break}if(g|B)for(e=0,mg(o+32|0,o+96|0,o);C[A+e|0]=n[(o+32|0)+e|0]^n[I+e|0],(0|g)!=(0|(e=e+1|0)););fI(o+32|0,64),fI(o,32)}return h=o+112|0,0},function(A,I,g,B,Q){var C;return A|=0,B|=0,h=C=h+-64|0,(I|=0)|(g|=0)&&(aA(C,Q|=0),UA(C,B,0),U(C,A=EA(A,0,I),A,I,g),fI(C,64)),h=C- -64|0,0},function(A,I,g,B,Q){var C;return A|=0,B|=0,h=C=h+-64|0,(I|=0)|(g|=0)&&(aA(C,Q|=0),JA(C,B,0),U(C,A=EA(A,0,I),A,I,g),fI(C,64)),h=C- -64|0,0},function(A,I,g,B,Q,C,E,i){var n;return A|=0,I|=0,Q|=0,E|=0,i|=0,h=n=h-80|0,(g|=0)|(B|=0)&&(xI(n+8|0,C|=0),xI(n+12|0,E),aA(n+16|0,i),UA(n+16|0,Q,n+8|0),U(n+16|0,I,A,g,B),fI(n+16|0,64)),h=n+80|0,0},function(A,I,g,B,Q,C,E){var i;return A|=0,I|=0,Q|=0,E|=0,h=i=h-80|0,(g|=0)|(B|=0)&&(xI(i+12|0,C|=0),aA(i+16|0,E),JA(i+16|0,Q,i+12|0),U(i+16|0,I,A,g,B),fI(i+16|0,64)),h=i+80|0,0}]).grow=function(A){var I=this.length;return this.length=this.length+A,I},Xg.set=function(A,I){this[A]=I},Xg.get=function(A){return this[A]},Xg);function Wg(){return B.byteLength/65536|0}return{h:Vg,i:function(){},j:function(A,I,g,B,Q,C,E,i,n,a,r,o){return 0|PA(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,r|=0,o|=0)},k:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){if(!Q&B>>>0<4294967280)return PA(A,A+B|0,0,g,B,Q,C,E,n,a,r),I&&(Q=(A=B+16|0)>>>0<16?Q+1|0:Q,i[I>>2]=A,i[I+4>>2]=Q),0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,r|=0,o|=0)},l:function(A,I,g,B,Q,C,E,i,n,a,r,o){return 0|_A(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,r|=0,o|=0)},m:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){if(!Q&B>>>0<4294967280)return _A(A,A+B|0,0,g,B,Q,C,E,n,a,r),I&&(Q=(A=B+16|0)>>>0<16?Q+1|0:Q,i[I>>2]=A,i[I+4>>2]=Q),0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,r|=0,o|=0)},n:function(A,I,g,B,Q,C,E,i,n,a,r){return 0|HA(A|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,a|=0,r|=0)},o:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){var o=0;return o=-1,!Q&B>>>0>=16|Q&&(o=HA(A,g,B-16|0,Q-(B>>>0<16)|0,(g+B|0)-16|0,C,E,n,a,r)),I&&(i[I>>2]=o?0:B-16|0,i[I+4>>2]=o?0:Q-(B>>>0<16)|0),o}(A|=0,I|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},p:function(A,I,g,B,Q,C,E,i,n,a,r){return 0|GA(A|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,a|=0,r|=0)},q:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){var o=0;return o=-1,!Q&B>>>0>=16|Q&&(o=GA(A,g,B-16|0,Q-(B>>>0<16)|0,(g+B|0)-16|0,C,E,n,a,r)),I&&(i[I>>2]=o?0:B-16|0,i[I+4>>2]=o?0:Q-(B>>>0<16)|0),o}(A|=0,I|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},r:Ng,s:function(){return 12},t:Lg,u:Sg,v:dg,w:bg,x:Ng,y:xg,z:Lg,A:Sg,B:dg,C:bg,D:function(A,I,g,B,Q,C,E,i,n,a,r,o){return 0|NA(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,r|=0,o|=0)},E:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){if(!Q&B>>>0<4294967280)return NA(A,A+B|0,0,g,B,Q,C,E,n,a,r),I&&(Q=(A=B+16|0)>>>0<16?Q+1|0:Q,i[I>>2]=A,i[I+4>>2]=Q),0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,r|=0,o|=0)},F:function(A,I,g,B,Q,C,E,i,n,a,r){return 0|MA(A|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,a|=0,r|=0)},G:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){var o=0;return o=-1,!Q&B>>>0>=16|Q&&(o=MA(A,g,B-16|0,Q-(B>>>0<16)|0,(g+B|0)-16|0,C,E,n,a,r)),I&&(i[I>>2]=o?0:B-16|0,i[I+4>>2]=o?0:Q-(B>>>0<16)|0),o}(A|=0,I|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},H:Ng,I:Mg,J:Lg,K:Sg,L:dg,M:bg,N:Ng,O:Ng,P:function(A,I,g,B,Q){return 0|bI(A|=0,I|=0,g|=0,B|=0,Q|=0)},Q:function(A,I,g,B,Q){return 0|function(A,I,g,B,Q){var C;return h=C=h-32|0,bI(C,I,g,B,Q),I=Gg(A,C),g=zA(C,A,32),h=C+32|0,g|((0|A)==(0|C)?-1:I)}(A|=0,I|=0,g|=0,B|=0,Q|=0)},R:bg,S:Ng,T:Ng,U:Ng,V:Ng,W:Mg,X:Sg,Y:dg,Z:function(A,I,g){return 0|function(A,I,g){var B,Q=0;return h=B=h+-64|0,mI(B,g,32,0),g=i[B+28>>2],Q=i[B+24>>2],C[I+24|0]=Q,C[I+25|0]=Q>>>8,C[I+26|0]=Q>>>16,C[I+27|0]=Q>>>24,C[I+28|0]=g,C[I+29|0]=g>>>8,C[I+30|0]=g>>>16,C[I+31|0]=g>>>24,g=i[B+20>>2],Q=i[B+16>>2],C[I+16|0]=Q,C[I+17|0]=Q>>>8,C[I+18|0]=Q>>>16,C[I+19|0]=Q>>>24,C[I+20|0]=g,C[I+21|0]=g>>>8,C[I+22|0]=g>>>16,C[I+23|0]=g>>>24,g=i[B+12>>2],Q=i[B+8>>2],C[I+8|0]=Q,C[I+9|0]=Q>>>8,C[I+10|0]=Q>>>16,C[I+11|0]=Q>>>24,C[I+12|0]=g,C[I+13|0]=g>>>8,C[I+14|0]=g>>>16,C[I+15|0]=g>>>24,g=i[B+4>>2],Q=i[B>>2],C[0|I]=Q,C[I+1|0]=Q>>>8,C[I+2|0]=Q>>>16,C[I+3|0]=Q>>>24,C[I+4|0]=g,C[I+5|0]=g>>>8,C[I+6|0]=g>>>16,C[I+7|0]=g>>>24,fI(B,64),A=cg(A,I),h=B- -64|0,A}(A|=0,I|=0,g|=0)},_:Ig,$:jI,aa:function(A,I,g,B,Q,C,E){return 0|Qg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ba:function(A,I,g,B,Q,C,E,i){return 0|wI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0)},ca:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=4294967280|B&&(OI(),e()),Qg(A+16|0,A,I,g,B,Q,C)}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},da:function(A,I,g,B,Q,C,E){return 0|kI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ea:function(A,I,g,B,Q,C,E){return 0|Cg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},fa:function(A,I,g,B,Q,C,E,i){return 0|hI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0)},ga:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=16|B?Cg(A,I+16|0,I,g-16|0,B-(g>>>0<16)|0,Q,C):-1}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},ha:function(A,I,g,B,Q,C,E){return 0|uI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ia:function(A,I,g,B,Q){return 0|function(A,I,g,B,Q){var E,n=0;return h=E=h-96|0,n=-1,Ig(E+32|0,E)||(lI(E- -64|0,E+32|0,Q),n=kI(A+32|0,I,g,B,E- -64|0,Q,E),I=i[E+60>>2],g=i[E+56>>2],C[A+24|0]=g,C[A+25|0]=g>>>8,C[A+26|0]=g>>>16,C[A+27|0]=g>>>24,C[A+28|0]=I,C[A+29|0]=I>>>8,C[A+30|0]=I>>>16,C[A+31|0]=I>>>24,I=i[E+52>>2],g=i[E+48>>2],C[A+16|0]=g,C[A+17|0]=g>>>8,C[A+18|0]=g>>>16,C[A+19|0]=g>>>24,C[A+20|0]=I,C[A+21|0]=I>>>8,C[A+22|0]=I>>>16,C[A+23|0]=I>>>24,I=i[E+44>>2],g=i[E+40>>2],C[A+8|0]=g,C[A+9|0]=g>>>8,C[A+10|0]=g>>>16,C[A+11|0]=g>>>24,C[A+12|0]=I,C[A+13|0]=I>>>8,C[A+14|0]=I>>>16,C[A+15|0]=I>>>24,I=i[E+36>>2],g=i[E+32>>2],C[0|A]=g,C[A+1|0]=g>>>8,C[A+2|0]=g>>>16,C[A+3|0]=g>>>24,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24,fI(E,32),fI(E+32|0,32),fI(E- -64|0,24)),h=E+96|0,n}(A|=0,I|=0,g|=0,B|=0,Q|=0)},ja:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){var E,i=0;return h=E=h-32|0,i=-1,!B&g>>>0>=48|B&&(lI(E,I,Q),i=uI(A,I+32|0,g-32|0,B-(g>>>0<32)|0,E,I,C)),h=E+32|0,i}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},ka:function(){return 48},la:Sg,ma:Pg,na:Ng,oa:Sg,pa:Pg,qa:Ng,ra:function(){return 384},sa:function(A,I,g,B,Q,C,E){return 0|Eg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ta:qI,ua:function(A,I,g,B){return 0|sg(A|=0,I|=0,g|=0,B|=0)},va:TI,wa:bg,xa:Pg,ya:function(A,I,g,B){return 0|mI(A|=0,I|=0,g|=0,B|=0)},za:Sg,Aa:Pg,Ba:xg,Ca:Ng,Da:function(A,I,g,B,Q,a){return 0|function(A,I,g,B,Q,a){var r,o;return h=r=h-32|0,o=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,Q=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,i[r+24>>2]=0,i[r+28>>2]=0,i[r+16>>2]=o,i[r+20>>2]=Q,tI(r,g,B),i[r+8>>2]=0,i[r+12>>2]=0,I-16>>>0>=49?(i[8960]=28,A=-1):(g=r+16|0,A=I-1>>>0>63?-1:function(A,I,g,B,Q){var a,r=0;if(a=r=h,h=r=r-384&-64,!(!I|!A|(g-1&255)>>>0>=64))return function(A,I,g,B,Q){var a;if(h=a=h-192|0,!(!g|(I-1&255)>>>0>=64))return E[a+130>>1]=257,C[a+129|0]=32,C[a+128|0]=I,WI(a+128|4),tI(a+128|8,0,0),i[a+152>>2]=0,i[a+156>>2]=0,i[a+144>>2]=0,i[a+148>>2]=0,B?function(A,I){var g,B=0;B=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,C[A+32|0]=g,C[A+33|0]=g>>>8,C[A+34|0]=g>>>16,C[A+35|0]=g>>>24,C[A+36|0]=B,C[A+37|0]=B>>>8,C[A+38|0]=B>>>16,C[A+39|0]=B>>>24,B=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,I=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,C[A+40|0]=I,C[A+41|0]=I>>>8,C[A+42|0]=I>>>16,C[A+43|0]=I>>>24,C[A+44|0]=B,C[A+45|0]=B>>>8,C[A+46|0]=B>>>16,C[A+47|0]=B>>>24}(a+128|0,B):(i[a+168>>2]=0,i[a+172>>2]=0,i[a+160>>2]=0,i[a+164>>2]=0),Q?function(A,I){var g,B=0;B=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,C[A+48|0]=g,C[A+49|0]=g>>>8,C[A+50|0]=g>>>16,C[A+51|0]=g>>>24,C[A+52|0]=B,C[A+53|0]=B>>>8,C[A+54|0]=B>>>16,C[A+55|0]=B>>>24,B=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,I=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,C[A+56|0]=I,C[A+57|0]=I>>>8,C[A+58|0]=I>>>16,C[A+59|0]=I>>>24,C[A+60|0]=B,C[A+61|0]=B>>>8,C[A+62|0]=B>>>16,C[A+63|0]=B>>>24}(a+128|0,Q):(i[a+184>>2]=0,i[a+188>>2]=0,i[a+176>>2]=0,i[a+180>>2]=0),hA(A,a+128|0),EA(a+32|0,0,96),QA(I=A,A=X(a,g,32),128,0),fI(A,128),void(h=A+192|0);OI(),e()}(r,g,I,B,Q),QA(r,0,0,0),M(r,A,g),h=a,0;OI(),e()}(A,a,255&I,r,g)),h=r+32|0,A}(A|=0,I|=0,g|=0,B|=0,Q|=0,a|=0)},Ea:bg,Fa:function(A,I,g){return A|=0,Eg(I|=0,32,g|=0,32,0,0,0),0|ag(A,I)},Ga:function(A,I){return A|=0,cI(I|=0,32),0|ag(A,I)},Ha:function(A,I,g,B,Q){I|=0,g|=0,Q|=0;var E,i,a=0;if(i=a=h,h=a=a-512&-64,E=(A|=0)||I){if(A=-1,!ZI(a+96|0,B|=0,Q)){for(I=I||E,A=0,qI(a+128|0,0,0,64),sg(a+128|0,a+96|0,32,0),fI(a+96|0,32),sg(a+128|0,g,32,0),sg(a+128|0,Q,32,0),TI(a+128|0,a+32|0,64),fI(a+128|0,384);g=(a+32|0)+A|0,C[A+E|0]=n[0|g],C[A+I|0]=n[g+32|0],32!=(0|(A=A+1|0)););fI(a+32|0,64),A=0}return h=i,0|A}OI(),e()},Ia:function(A,I,g,B,Q){I|=0,g|=0,Q|=0;var E,i,a=0;if(i=a=h,h=a=a-512&-64,E=(A|=0)||I){if(A=-1,!ZI(a+96|0,B|=0,Q)){for(I=I||E,A=0,qI(a+128|0,0,0,64),sg(a+128|0,a+96|0,32,0),fI(a+96|0,32),sg(a+128|0,Q,32,0),sg(a+128|0,g,32,0),TI(a+128|0,a+32|0,64),fI(a+128|0,384);g=(a+32|0)+A|0,C[A+I|0]=n[0|g],C[A+E|0]=n[g+32|0],32!=(0|(A=A+1|0)););fI(a+32|0,64),A=0}return h=i,0|A}OI(),e()},Ja:Ng,Ka:Ng,La:Ng,Ma:Ng,Na:Rg,Oa:Jg,Pa:Jg,Qa:Sg,Ra:Kg,Sa:Lg,Ta:Kg,Ua:Sg,Va:function(){return 128},Wa:function(){return 35681},Xa:Rg,Ya:Kg,Za:function(){return 8192},_a:function(){return-2147483648},$a:Jg,ab:function(){return 67108864},bb:qg,cb:function(){return 268435456},db:function(){return 4},eb:function(){return 1073741824},fb:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r,o){switch(o-1|0){case 0:return function(A,I,g,B,Q,C,E,n,a,r){var o,e;e=I,o=EA(A,0,I),A=22;A:if(!g){if(!(!g&I>>>0<16)){if(C|a|r>>>0>2147483648)break A;if(!(!a&n>>>0<3|r>>>0<8192)){if(A=28,(0|B)==(0|o))break A;return pA(n,r>>>10|0,1,B,Q,E,16,o,e,0,0,1)?-1:0}}A=28}return i[8960]=A,-1}(A,I,g,B,Q,C,E,n,a,r);case 1:return function(A,I,g,B,Q,C,E,n,a,r){var o,e;e=I,o=EA(A,0,I),A=22;A:if(!g){if(!(!g&I>>>0<16)){if(C|a|r>>>0>2147483648)break A;if(!(!(n|a)|r>>>0<8192)){if(A=28,(0|B)==(0|o))break A;return pA(n,r>>>10|0,1,B,Q,E,16,o,e,0,0,2)?-1:0}}A=28}return i[8960]=A,-1}(A,I,g,B,Q,C,E,n,a,r)}return i[8960]=28,-1}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},gb:function(A,I,g,B,Q,C,E){return 0|xA(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},hb:function(A,I,g,B,Q,C,E,n){return 0|function(A,I,g,B,Q,C,E,n){switch(n-1|0){case 1:return xA(A,I,g,B,Q,C,E);default:OI(),e();case 0:}return function(A,I,g,B,Q,C,E){var n;return h=n=h-16|0,A=EA(A,0,128),E>>>0<2147483649&&!(B|C)?E>>>0>8191&&!C&Q>>>0>=3|0!=(0|C)?(cI(n,16),A=pA(Q,E>>>10|0,1,I,g,n,16,0,32,A,128,1)?-1:0):(i[8960]=28,A=-1):(i[8960]=22,A=-1),h=n+16|0,A}(A,I,g,B,Q,C,E)}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0)},ib:function(A,I,g,B){return 0|function(A,I,g,B){return XA(A,35681,10)?XA(A,35692,9)?(i[8960]=28,-1):function(A,I,g,B){A:{if(1==(0|B)|B>>>0>1)i[8960]=22;else{if(!(A=fA(A,I,g,1)))break A;-35==(0|A)&&(i[8960]=28)}A=-1}return A}(A,I,g,B):function(A,I,g,B){A:{if(1==(0|B)|B>>>0>1)i[8960]=22;else{if(!(A=fA(A,I,g,2)))break A;-35==(0|A)&&(i[8960]=28)}A=-1}return A}(A,I,g,B)}(A|=0,I|=0,g|=0,B|=0)},jb:function(A,I,g,B){return 0|function(A,I,g,B){return XA(A,35681,10)?XA(A,35692,9)?(i[8960]=28,-1):DA(A,I,g,B,1):DA(A,I,g,B,2)}(A|=0,I|=0,g|=0,B|=0)},kb:ag,lb:ZI,mb:Ng,nb:Ng,ob:Ng,pb:Mg,qb:Sg,rb:dg,sb:bg,tb:Qg,ub:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=4294967280|B&&(OI(),e()),nA(A+16|0,A,I,g,B,Q,C),0}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},vb:Cg,wb:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=16|B?rA(A,I+16|0,I,g-16|0,B-(g>>>0<16)|0,Q,C):-1}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},xb:bg,yb:function(A,I,g){return A|=0,g|=0,cI(I|=0,24),x(A,I,g),XI(A),g=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,I=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,C[A+44|0]=0,C[A+45|0]=0,C[A+46|0]=0,C[A+47|0]=0,C[A+48|0]=0,C[A+49|0]=0,C[A+50|0]=0,C[A+51|0]=0,C[A+36|0]=g,C[A+37|0]=g>>>8,C[A+38|0]=g>>>16,C[A+39|0]=g>>>24,C[A+40|0]=I,C[A+41|0]=I>>>8,C[A+42|0]=I>>>16,C[A+43|0]=I>>>24,0},zb:function(A,I,g){return x(A|=0,I|=0,g|=0),XI(A),g=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,I=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,C[A+44|0]=0,C[A+45|0]=0,C[A+46|0]=0,C[A+47|0]=0,C[A+48|0]=0,C[A+49|0]=0,C[A+50|0]=0,C[A+51|0]=0,C[A+36|0]=g,C[A+37|0]=g>>>8,C[A+38|0]=g>>>16,C[A+39|0]=g>>>24,C[A+40|0]=I,C[A+41|0]=I>>>8,C[A+42|0]=I>>>16,C[A+43|0]=I>>>24,0},Ab:L,Bb:function(A,I,g,B,Q,E,a,r,o,t){return 0|function(A,I,g,B,Q,E,a,r,o,t){var f,c=0;if(h=f=h-336|0,g&&(i[g>>2]=0,i[g+4>>2]=0),!E&Q>>>0<4294967279)return _g(f+16|0,64,c=A+32|0,A),lg(f+80|0,f+16|0),fI(f+16|0,64),yg(f+80|0,a,r,o),yg(f+80|0,35712,0-r&15,0),EA(f+16|0,0,64),C[f+16|0]=t,BI(f+16|0,f+16|0,64,0,c,1,A),yg(f+80|0,f+16|0,64,0),C[0|I]=n[f+16|0],BI(a=I+1|0,B,Q,E,c,2,A),yg(f+80|0,a,Q,E),yg(f+80|0,35712,15&Q,0),tI(f+8|0,r,o),yg(f+80|0,f+8|0,8,0),tI(f+8|0,Q- -64|0,E-((Q>>>0<4294967232)-1|0)|0),yg(f+80|0,f+8|0,8,0),Fg(f+80|0,I=Q+a|0),fI(f+80|0,256),pI(A+36|0,I),sI(c),(2&t||aI(c,4))&&L(A),g&&(E=(A=Q+17|0)>>>0<17?E+1|0:E,i[g>>2]=A,i[g+4>>2]=E),h=f+336|0,0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,a|=0,r|=0,o|=0,t|=0)},Cb:function(A,I,g,B,Q,E,a,r,o,t){return 0|function(A,I,g,B,Q,E,a,r,o,t){var f,c=0,y=0,s=0,w=0,D=0;h=f=h-352|0,g&&(i[g>>2]=0,i[g+4>>2]=0),B&&(C[0|B]=255),w=-1;A:{if(!(!a&E>>>0<17)){if(!(c=a-(E>>>0<17)|0)&(y=E-17|0)>>>0>=4294967279|c)break A;_g(f+32|0,64,s=A+32|0,A),lg(f+96|0,f+32|0),fI(f+32|0,64),yg(f+96|0,r,o,t),yg(f+96|0,35712,0-o&15,0),EA(f+32|0,0,64),C[f+32|0]=n[0|Q],BI(f+32|0,f+32|0,64,0,s,1,A),D=n[f+32|0],C[f+32|0]=n[0|Q],yg(f+96|0,f+32|0,64,0),yg(f+96|0,r=Q+1|0,y,c),yg(f+96|0,35712,E-1&15,0),tI(f+24|0,o,t),yg(f+96|0,f+24|0,8,0),tI(f+24|0,Q=E+47|0,a=Q>>>0<47?a+1|0:a),yg(f+96|0,f+24|0,8,0),Fg(f+96|0,f),fI(f+96|0,256),zA(f,r+y|0,16)?fI(f,16):(BI(I,r,y,c,s,2,A),pI(A+36|0,f),sI(s),(2&D||aI(s,4))&&L(A),g&&(i[g>>2]=y,i[g+4>>2]=c),w=0,B&&(C[0|B]=D))}return h=f+352|0,w}OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,a|=0,r|=0,o|=0,t|=0)},Db:function(){return 52},Eb:function(){return 17},Fb:Mg,Gb:Ng,Hb:function(){return-18},Ib:Lg,Jb:Rg,Kb:Jg,Lb:qg,Mb:xg,Nb:Sg,Ob:function(A,I,g,B,Q){return 0|function(A,I,g,B){var Q=0,C=0,E=0,i=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0;if(Q=1886610805^(E=n[0|B]|n[B+1|0]<<8|n[B+2|0]<<16|n[B+3|0]<<24),i=1936682341^(C=n[B+4|0]|n[B+5|0]<<8|n[B+6|0]<<16|n[B+7|0]<<24),a=1852142177^E,o=1819895653^C,E=1852075885^(t=n[B+8|0]|n[B+9|0]<<8|n[B+10|0]<<16|n[B+11|0]<<24),C=1685025377^(B=n[B+12|0]|n[B+13|0]<<8|n[B+14|0]<<16|n[B+15|0]<<24),t^=2037671283,r=1952801890^B,(0|(B=(I+g|0)-(y=7&g)|0))!=(0|I)){for(;e=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,f=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,c=Dg(E,C,13),s=p,w=1+(C=C+i|0)|0,i=C,h=Dg(C=Q+E|0,i=C>>>0>>0?w:i,32),w=p,r=Q=r^f,E=Dg(t^=e,Q,16),Q=a+t|0,a=o+r|0,t=o=(a=Q>>>0>>0?a+1|0:a)^p,o=Dg(E^=Q,o,21),r=p,c=Dg(C^=c,i^=s,17),D=p,i=a+i|0,a=Q,i=Dg(Q=Q+C|0,C=a>>>0>Q>>>0?i+1|0:i,32),a=p,s=Dg(c^=Q,C^=D,13),D=p,w=1+(Q=t+w|0)|0,t=Q,E=(Q=E+h|0)>>>0>>0?w:t,c=t=Q+c|0,C=E+C|0,C=Dg(t,h=Q>>>0>t>>>0?C+1|0:C,32),t=p,o=Dg(Q^=o,E^=r,16),E=a+E|0,E=(Q=Q+i|0)>>>0>>0?E+1|0:E,i=C+(a=Q^o)|0,C=(r=t)+(t=E^p)|0,t=Dg(a,t,21)^i,r=(w=i>>>0>>0?C+1|0:C)^p,a=C=h^D,C=Dg(o=c^s,C,17),E=E+a|0,o=(a=Q+o|0)>>>0>>0?E+1|0:E,E=C^a,C=o^p,Q=i^e,i=f^w,a=Dg(a,o,32),o=p,(0|B)!=(0|(I=I+8|0)););I=B}switch(B=g<<24,g=0,y-1|0){case 6:B|=n[I+6|0]<<16;case 5:B|=n[I+5|0]<<8;case 4:B|=n[I+4|0];case 3:e=(g=n[I+3|0])>>>8|0,g<<=24,B|=e;case 2:g|=(e=n[I+2|0])<<16,B|=f=e>>>16|0;case 1:g|=(e=n[I+1|0])<<8,B|=f=e>>>24|0;case 0:g=n[0|I]|g}return e=Dg(E,C,13),f=p,I=C+i|0,y=Dg(E=Q+E|0,C=E>>>0>>0?I+1|0:I,32),c=p,i=Q=B^r,Q=Dg(I=g^t,Q,16),i=i+o|0,o=a=(i=(r=I)>>>0>(I=I+a|0)>>>0?i+1|0:i)^p,a=Dg(Q^=I,a,21),t=p,e=Dg(E^=e,C^=f,17),f=p,C=i+C|0,r=I,C=Dg(I=I+E|0,E=r>>>0>I>>>0?C+1|0:C,32),i=p,e=Dg(r=I^e,E^=f,13),f=p,s=1+(I=o+c|0)|0,o=I,E=(Q=(I=Q+y|0)>>>0>>0?s:o)+E|0,E=Dg(r=o=I+r|0,o=I>>>0>o>>>0?E+1|0:E,32),y=p,a=Dg(I^=a,Q^=t,16),Q=i+Q|0,Q=(I=I+C|0)>>>0>>0?Q+1|0:Q,C=I^a,a=i=Q^p,i=Dg(C,i,21),t=p,f=o^=f,o=Dg(r^=e,o,17),e=p,Q=Q+f|0,s=I,r=Dg(I=I+r|0,Q=s>>>0>I>>>0?Q+1|0:Q,32),f=p,e=Dg(I^=o,o=Q^e,13),c=p,s=I,a=1+(I=a+y|0)|0,Q=I,B=o+(B^(Q=(I=E+C|0)>>>0>>0?a:Q))|0,g=Dg(C=E=s+(g^=I)|0,E=g>>>0>E>>>0?B+1|0:B,32),a=p,i=Dg(I^=i,B=Q^t,16),B=B+f|0,B=(Q=I)>>>0>(I=I+(255^r)|0)>>>0?B+1|0:B,Q=I^i,o=i=B^p,i=Dg(Q,i,21),t=p,r=E^=c,E=Dg(C^=e,E,17),e=p,B=B+r|0,r=I,C=Dg(I=I+C|0,B=r>>>0>I>>>0?B+1|0:B,32),r=p,f=Dg(E^=I,e^=B,13),y=p,o=1+(I=a+o|0)|0,B=I,Q=(B=(I=g+Q|0)>>>0>>0?o:B)+e|0,a=Q=I>>>0>(g=I+E|0)>>>0?Q+1|0:Q,Q=Dg(g,Q,32),o=p,i=Dg(I^=i,B^=t,16),B=B+r|0,r=I,E=(I=I+C|0)^i,i=C=(B=r>>>0>I>>>0?B+1|0:B)^p,C=Dg(E,C,21),t=p,r=a^=y,a=Dg(g^=f,a,17),e=p,B=B+r|0,r=I,r=Dg(I=I+g|0,g=r>>>0>I>>>0?B+1|0:B,32),f=p,y=Dg(a^=I,e^=g,13),c=p,B=1+(I=i+o|0)|0,g=I,Q=(B=(I=Q+E|0)>>>0>>0?B:g)+e|0,i=Q=I>>>0>(g=I+a|0)>>>0?Q+1|0:Q,Q=Dg(g,Q,32),a=p,C=Dg(I^=C,B^=t,16),B=B+f|0,o=I,E=(I=I+r|0)^C,o=C=(B=o>>>0>I>>>0?B+1|0:B)^p,C=Dg(E,C,21),t=p,r=i^=c,i=Dg(g^=y,i,17),e=p,B=B+r|0,r=I,B=Dg(I=I+g|0,g=r>>>0>I>>>0?B+1|0:B,32),r=p,e=g^=e,f=Dg(i^=I,g,13),y=p,o=1+(I=a+o|0)|0,g=I,a=E=t^(Q=(I=Q+E|0)>>>0>>0?o:g),E=Dg(g=I^C,E,16),C=a+r|0,r=g,E=Dg((g=g+B|0)^E,(B=r>>>0>g>>>0?C+1|0:C)^p,21),C=p,Q=Q+e|0,o=1+(B=B+(Q=((r=I)>>>0>(I=I+i|0)>>>0?Q+1|0:Q)^y)|0)|0,r=B,g=(I=g+(B=I^f)|0)>>>0>>0?o:r,B=Dg(B,Q,17)^I^E,Q=p^g^C,tI(A,Dg(I,g,32)^B,p^Q),0}(A|=0,I|=0,g|=0,Q|=0)},Pb:function(A){cI(A|=0,16)},Qb:function(){return 208},Rb:Pg,Sb:Ng,Tb:Ng,Ub:Pg,Vb:function(){return-65},Wb:function(A,I,g){return 0|N(A|=0,I|=0,g|=0)},Xb:function(A,I){return 0|function(A,I){var g;return h=g=h-32|0,cI(g,32),N(A,I,g),fI(g,32),h=g+32|0,0}(A|=0,I|=0)},Yb:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){var E,n;return h=E=h-16|0,n=g,g=B,Bg(A,E+8|0,gA(A- -64|0,n,B),B,Q,C),64!=i[E+8>>2]|i[E+12>>2]?(I&&(i[I>>2]=0,i[I+4>>2]=0),EA(A,0,g- -64|0),A=-1):(A=0,I&&(i[I>>2]=B- -64,i[I+4>>2]=Q-((B>>>0<4294967232)-1|0))),h=E+16|0,A}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},Zb:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){var E=0;A:{I:{if(!(!Q&B>>>0<64||(Q=Q-1|0,!(Q=(B=B+-64|0)>>>0<4294967232?Q+1|0:Q)&B>>>0>4294967231|Q))){if(!ng(g,E=g- -64|0,B,Q,C))break I;A&&EA(A,0,B)}if(g=-1,!I)break A;return i[I>>2]=0,i[I+4>>2]=0,-1}I&&(i[I>>2]=B,i[I+4>>2]=Q),g=0,A&&gA(A,E,B)}return g}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},_b:function(A,I,g,B,Q,C){return 0|Bg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},$b:function(A,I,g,B,Q){return 0|ng(A|=0,I|=0,g|=0,B|=0,Q|=0)},ac:function(A){return MI(A|=0),0},bc:function(A,I,g,B){return 0|V(A|=0,I|=0,g|=0,B|=0)},cc:function(A,I,g,B){return 0|function(A,I,g,B){var Q;return h=Q=h+-64|0,UI(A,Q),A=q(I,g,Q,64,0,B,1),h=Q- -64|0,A}(A|=0,I|=0,g|=0,B|=0)},dc:function(A,I,g){return 0|function(A,I,g){var B;return h=B=h+-64|0,UI(A,B),A=lA(I,B,64,0,g,1),h=B- -64|0,A}(A|=0,I|=0,g|=0)},ec:function(A,I){A|=0;var g,B=0;return h=g=h-256|0,B=-1,wA(I|=0)||cA(g+96|0,I)||function(A){var I;return h=I=h-160|0,function(A,I){var g,B=0;for(h=g=h-1760|0,FI(g+480|0,I),JI(g+320|0,I),DI(g,g+320|0),VA(g+320|0,g,g+480|0),DI(g+160|0,g+320|0),FI(I=g+640|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+800|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+960|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+1120|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+1280|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+1440|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(g+1600|0,g+160|0),zI(A),I=252;JI(g+320|0,A),B=I,(0|(I=C[I+34208|0]))>=1?(DI(g+160|0,g+320|0),VA(g+320|0,g+160|0,(g+480|0)+r((254&I)>>>1|0,160)|0)):(0|I)>-1||(DI(g+160|0,g+320|0),WA(g+320|0,g+160|0,(g+480|0)+r((0-I&254)>>>1|0,160)|0)),DI(A,g+320|0),I=B-1|0,B;);h=g+1760|0}(I,A),A=RI(I),h=I+160|0,A}(g+96|0)&&(wg(g),yA(g,g,I=g+136|0),wg(g+48|0),sA(g+48|0,g+48|0,I),j(g,g),_(g+48|0,g+48|0,g),BA(A,g+48|0),B=0),h=g+256|0,0|B},fc:function(A,I){A|=0;var g,B=0;return h=g=h+-64|0,mI(g,I|=0,32,0),C[0|g]=248&n[0|g],C[g+31|0]=63&n[g+31|0]|64,I=i[g+20>>2],B=i[g+16>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=I,C[A+21|0]=I>>>8,C[A+22|0]=I>>>16,C[A+23|0]=I>>>24,I=i[g+12>>2],B=i[g+8>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=I,C[A+13|0]=I>>>8,C[A+14|0]=I>>>16,C[A+15|0]=I>>>24,I=i[g+4>>2],B=i[g>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24,I=i[g+28>>2],B=i[g+24>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=I,C[A+29|0]=I>>>8,C[A+30|0]=I>>>16,C[A+31|0]=I>>>24,fI(g,64),h=g- -64|0,0},gc:YI,hc:PI,ic:function(A){var I=0,g=0;if((A|=0)>>>0>=2){for(g=(0-A>>>0)%(A>>>0)|0;(I=YI())>>>0>>0;);A=(I>>>0)%(A>>>0)|0}else A=0;return 0|A},jc:cI,kc:function(A,I,g){_g(A|=0,I|=0,1784,g|=0)},lc:Ng,mc:function(){var A=0,I=0;return(A=i[9097])&&(A=i[A+20>>2])&&(I=0|Vg[0|A]()),0|I},nc:function(A,I,g){!function(A,I,g){1==(0|g)|g>>>0>1&&(t(1796,1816,197,1842),e()),cI(A,I)}(A|=0,I|=0,g|=0)},oc:function(A,I,g,B){A|=0,g|=0;var Q=0,E=0,i=0;if(!((B|=0)>>>0>2147483646|B<<1>>>0>=(I|=0)>>>0)){if(I=0,B){for(;Q=I<<1,E=(i=n[I+g|0])>>>4|0,C[Q+A|0]=87+(E+(E+65526>>>8&217)|0),E=(1|Q)+A|0,Q=15&i,C[0|E]=22272+((Q<<8)+(Q+65526&55552)|0)>>>8,(0|B)!=(0|(I=I+1|0)););I=B<<1}else I=0;return C[I+A|0]=0,0|A}OI(),e()},pc:function(A,I,g,B,Q,E,a){A|=0,I|=0,g|=0,Q|=0,E|=0,a|=0;var r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0;A:if(B|=0){I:{g:{B:for(;;){for(o=r;;){Q:{if(!(255&((w=(65526+(y=(223&(c=n[g+o|0]))-55&255)^y+65520)>>>8|0)|(e=65526+(h=48^c)>>>8|0)))){if(e=1,!Q|255&f)break g;if(gg(Q,c))break Q;r=o;break A}if(I>>>0<=t>>>0){i[8960]=68,e=0;break g}if(r=y&w|e&h,255&f?(C[A+t|0]=r|D,t=t+1|0):D=r<<4,f^=-1,e=1,(r=o+1|0)>>>0>>0)continue B;break I}if(f=0,!((o=o+1|0)>>>0>>0))break}break}r=(A=r+1|0)>>>0>>0?B:A;break A}r=o}255&f?(i[8960]=28,s=-1,r=r-1|0,t=0):e||(t=0,s=-1)}return a?i[a>>2]=g+r:(0|B)!=(0|r)&&(i[8960]=28,s=-1),E&&(i[E>>2]=t),0|s},qc:function(A,I){var g;return A|=0,pg(I|=0),A=r(g=(A>>>0)/3|0,-3)+A|0,r(4-(3-A&0-(I>>>1&1))|0,1&(A|A>>>1))+(g<<2|1)|0},rc:O,sc:W,tc:function(){var A=0;return i[9104]?A=1:(i[9086]=0,function(){var A;h=A=h-16|0,VI(A),i[A>>2]&&(VI(A),EA(36348,0,40)),h=A+16|0}(),i[9085]=1,PI(),function(){var A=0;(0|(A=0|y(30)))>=1?i[8944]=A:A=i[8944],A>>>0<=15&&(OI(),e()),cI(36400,16)}(),i[9104]=1,A=0),0|A},uc:function(A,I,g,B,Q){A|=0,I|=0,g|=0,Q|=0;var E,a=0,r=0,o=0;h=E=h-16|0;A:{if(B|=0){if(o=-1,(a=(a=B-1|0)-(r=a&B?(g>>>0)%(B>>>0)|0:g&a)|0)>>>0>=(-1^g)>>>0)break A;if(!((g=g+a|0)>>>0>=Q>>>0))for(A&&(i[A>>2]=g+1),A=I+g|0,o=0,C[E+15|0]=0,I=B>>>0>1?B:1,B=0;Q=g=A-B|0,r=n[0|g]&n[E+15|0],g=(B^a)-1>>>24|0,C[0|Q]=r|128&g,C[E+15|0]=g|n[E+15|0],(0|I)!=(0|(B=B+1|0)););}else o=-1;return h=E+16|0,0|o}OI(),e()},vc:function(A,I,g,B){A|=0,I|=0,g|=0,B|=0;var Q,C=0,E=0,a=0,r=0,o=0;if(i[12+(Q=h-16|0)>>2]=0,B-1>>>0>>0){for(o=(C=g-1|0)+I|0,g=0,I=0;r=((128^(E=n[o-g|0]))-1&i[Q+12>>2]-1&a-1)>>>8&1,i[Q+12>>2]=i[Q+12>>2]|0-r&g,I|=r,a|=E,(0|B)!=(0|(g=g+1|0)););i[A>>2]=C-i[Q+12>>2],A=I-1|0}else A=-1;return 0|A},wc:function(){return 35762},xc:function(){return 10},yc:qg,zc:Rg,Ac:function(){return 35840},Bc:k,Cc:m}}(A)}(vA)},instantiate:function(A,I){return{then:function(I){var g=new u.Module(A);I({instance:new u.Instance(g)})}}},RuntimeError:Error};function p(A,I,g,B){switch("*"===(g=g||"i8").charAt(g.length-1)&&(g="i32"),g){case"i1":case"i8":_[A>>0]=I;break;case"i16":Y[A>>1]=I;break;case"i32":b[A>>2]=I;break;case"i64":nA=[I>>>0,(iA=I,+Math.abs(iA)>=1?iA>0?(0|Math.min(+Math.floor(iA/4294967296),4294967295))>>>0:~~+Math.ceil((iA-+(~~iA>>>0))/4294967296)>>>0:0)],b[A>>2]=nA[0],b[A+4>>2]=nA[1];break;case"float":m[A>>2]=I;break;case"double":v[A>>3]=I;break;default:IA("invalid type for setValue: "+g)}}function l(A,I,g){switch("*"===(I=I||"i8").charAt(I.length-1)&&(I="i32"),I){case"i1":case"i8":return _[A>>0];case"i16":return Y[A>>1];case"i32":case"i64":return b[A>>2];case"float":return m[A>>2];case"double":return v[A>>3];default:IA("invalid type for getValue: "+I)}return null}w=[],"object"!=typeof u&&IA("no native wasm support detected");var F=!1;function G(A,I){A||IA("Assertion failed: "+I)}var k,_,H,Y,b,m,v,U="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function S(A,I,g){for(var B=I+g,Q=I;A[Q]&&!(Q>=B);)++Q;if(Q-I>16&&A.subarray&&U)return U.decode(A.subarray(I,Q));for(var C="";I>10,56320|1023&a)}}else C+=String.fromCharCode((31&E)<<6|i)}else C+=String.fromCharCode(E)}return C}function N(A,I){return A?S(H,A,I):""}function M(A,I){return A%I>0&&(A+=I-A%I),A}function d(A){k=A,Q.HEAP8=_=new Int8Array(A),Q.HEAP16=Y=new Int16Array(A),Q.HEAP32=b=new Int32Array(A),Q.HEAPU8=H=new Uint8Array(A),Q.HEAPU16=new Uint16Array(A),Q.HEAPU32=new Uint32Array(A),Q.HEAPF32=m=new Float32Array(A),Q.HEAPF64=v=new Float64Array(A)}var P,R=Q.INITIAL_MEMORY||16777216;(D=Q.wasmMemory?Q.wasmMemory:new u.Memory({initial:R/65536,maximum:32768}))&&(k=D.buffer),R=k.byteLength,d(k);var J=[],x=[],L=[],K=[];function q(){if(Q.preRun)for("function"==typeof Q.preRun&&(Q.preRun=[Q.preRun]);Q.preRun.length;)T(Q.preRun.shift());fA(J)}function X(){fA(x)}function V(){fA(L)}function W(){if(Q.postRun)for("function"==typeof Q.postRun&&(Q.postRun=[Q.postRun]);Q.postRun.length;)j(Q.postRun.shift());fA(K)}function T(A){J.unshift(A)}function j(A){K.unshift(A)}x.push({func:function(){UA()}});var Z=0,O=null,z=null;function $(A){Z++,Q.monitorRunDependencies&&Q.monitorRunDependencies(Z)}function AA(A){if(Z--,Q.monitorRunDependencies&&Q.monitorRunDependencies(Z),0==Z&&(null!==O&&(clearInterval(O),O=null),z)){var I=z;z=null,I()}}function IA(A){throw Q.onAbort&&Q.onAbort(A),h(A+=""),F=!0,A="abort("+A+"). Build with -s ASSERTIONS=1 for more info.",new u.RuntimeError(A)}function gA(A,I){return String.prototype.startsWith?A.startsWith(I):0===A.indexOf(I)}Q.preloadedImages={},Q.preloadedAudios={};var BA="data:application/octet-stream;base64,";function QA(A){return gA(A,BA)}var CA="file://";function EA(A){return gA(A,CA)}var iA,nA,aA="<<< WASM_BINARY_FILE >>>";function rA(A){try{if(A==aA&&w)return new Uint8Array(w);var I=bA(A);if(I)return I;if(t)return t(A);throw"both async and sync fetching of the wasm failed"}catch(A){IA(A)}}function oA(){if(!w&&(i||n)){if("function"==typeof fetch&&!EA(aA))return fetch(aA,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at '"+aA+"'";return A.arrayBuffer()})).catch((function(){return rA(aA)}));if(e)return new Promise((function(A,I){e(aA,(function(I){A(new Uint8Array(I))}),I)}))}return Promise.resolve().then((function(){return rA(aA)}))}function eA(){var A={a:vA};function I(A,I){var g=A.exports;Q.asm=g,P=Q.asm.h,AA()}function g(A){I(A.instance)}function B(I){return oA().then((function(I){return u.instantiate(I,A)})).then(I,(function(A){h("failed to asynchronously prepare wasm: "+A),IA(A)}))}if($(),Q.instantiateWasm)try{return Q.instantiateWasm(A,I)}catch(A){return h("Module.instantiateWasm callback failed with error: "+A),!1}return w||"function"!=typeof u.instantiateStreaming||QA(aA)||EA(aA)||"function"!=typeof fetch?B(g):fetch(aA,{credentials:"same-origin"}).then((function(I){return u.instantiateStreaming(I,A).then(g,(function(A){return h("wasm streaming compile failed: "+A),h("falling back to ArrayBuffer instantiation"),B(g)}))})),{}}QA(aA)||(aA=s(aA));var tA={1024:function(){return Q.getRandomValue()},1062:function(){if(void 0===Q.getRandomValue)try{var A="object"==typeof window?window:self,I=void 0!==A.crypto?A.crypto:A.msCrypto,g=function(){var A=new Uint32Array(1);return I.getRandomValues(A),A[0]>>>0};g(),Q.getRandomValue=g}catch(A){try{var B=require("crypto"),C=function(){var A=B.randomBytes(4);return(A[0]<<24|A[1]<<16|A[2]<<8|A[3])>>>0};C(),Q.getRandomValue=C}catch(A){throw"No secure random number generator found"}}}};function fA(A){for(;A.length>0;){var I=A.shift();if("function"!=typeof I){var g=I.func;"number"==typeof g?void 0===I.arg?P.get(g)():P.get(g)(I.arg):g(void 0===I.arg?null:I.arg)}else I(Q)}}function cA(A,I,g,B){IA("Assertion failed: "+N(A)+", at: "+[I?N(I):"unknown filename",g,B?N(B):"unknown function"])}function yA(){IA()}function sA(A,I,g){var B=GA(I,g);return tA[A].apply(null,B)}function wA(A,I,g){H.copyWithin(A,I,I+g)}function hA(){return H.length}function DA(A){try{return D.grow(A-k.byteLength+65535>>>16),d(D.buffer),1}catch(A){}}function uA(A){A>>>=0;var I=hA(),g=2147483648;if(A>g)return!1;for(var B=1;B<=4;B*=2){var Q=I*(1+.2/B);if(Q=Math.min(Q,A+100663296),DA(Math.min(g,M(Math.max(16777216,A,Q),65536))))return!0}return!1}function pA(A){return b[SA()>>2]=A,A}function lA(A){switch(A){case 30:return 16384;case 85:return 131072;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return pA(28),-1}var FA=[];function GA(A,I){var g;for(FA.length=0,I>>=2;g=H[A++];){var B=g<105;B&&1&I&&I++,FA.push(B?v[I++>>1]:b[I]),++I}return FA}var kA=!1;function _A(A){for(var I=[],g=0;g255&&(kA&&G(!1,"Character code "+B+" ("+String.fromCharCode(B)+") at offset "+g+" not in 0x00-0xFF."),B&=255),I.push(String.fromCharCode(B))}return I.join("")}var HA="function"==typeof atob?atob:function(A){var I,g,B,Q,C,E,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="",a=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{I=i.indexOf(A.charAt(a++))<<2|(Q=i.indexOf(A.charAt(a++)))>>4,g=(15&Q)<<4|(C=i.indexOf(A.charAt(a++)))>>2,B=(3&C)<<6|(E=i.indexOf(A.charAt(a++))),n+=String.fromCharCode(I),64!==C&&(n+=String.fromCharCode(g)),64!==E&&(n+=String.fromCharCode(B))}while(a0||(q(),Z>0||(Q.setStatus?(Q.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Q.setStatus("")}),1),I()}),1)):I()))}if(Q._malloc=function(){return(Q._malloc=Q.asm.Bc).apply(null,arguments)},Q._free=function(){return(Q._free=Q.asm.Cc).apply(null,arguments)},Q.setValue=p,Q.getValue=l,Q.UTF8ToString=N,z=function A(){mA||NA(),mA||(z=A)},Q.run=NA,Q.preInit)for("function"==typeof Q.preInit&&(Q.preInit=[Q.preInit]);Q.preInit.length>0;)Q.preInit.pop()();NA()}))};var g,Q=void 0!==Q?Q:{},C={};for(g in Q)Q.hasOwnProperty(g)&&(C[g]=Q[g]);var E=[],i=!1,n=!1,a=!1,r=!1;i="object"==typeof window,n="function"==typeof importScripts,a="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,r=!i&&!a&&!n;var o,e,t,f,c,y="";function s(A){return Q.locateFile?Q.locateFile(A,y):y+A}a?(y=n?require("path").dirname(y)+"/":__dirname+"/",o=function(A,I){var g=HA(A);return g?I?g:g.toString():(f||(f=require("fs")),c||(c=require("path")),A=c.normalize(A),f.readFileSync(A,I?null:"utf8"))},t=function(A){var I=o(A,!0);return I.buffer||(I=new Uint8Array(I)),F(I.buffer),I},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),E=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Q),Q.inspect=function(){return"[Emscripten Module object]"}):r?("undefined"!=typeof read&&(o=function(A){var I=HA(A);return I?GA(I):read(A)}),t=function(A){var I;return(I=HA(A))?I:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(F("object"==typeof(I=read(A,"binary"))),I)},"undefined"!=typeof scriptArgs?E=scriptArgs:void 0!==arguments&&(E=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(i||n)&&(n?y=self.location.href:"undefined"!=typeof document&&document.currentScript&&(y=document.currentScript.src),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",o=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText}catch(I){var g=HA(A);if(g)return GA(g);throw I}},n&&(t=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}catch(I){var g=HA(A);if(g)return g;throw I}}),e=function(A,I,g){var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=function(){if(200==B.status||0==B.status&&B.response)I(B.response);else{var Q=HA(A);Q?I(Q.buffer):g()}},B.onerror=g,B.send(null)}),Q.print;var w,h,D=Q.printErr||void 0;for(g in C)C.hasOwnProperty(g)&&(Q[g]=C[g]);function u(A,I,g,B){switch("*"===(g=g||"i8").charAt(g.length-1)&&(g="i32"),g){case"i1":case"i8":k[A>>0]=I;break;case"i16":H[A>>1]=I;break;case"i32":Y[A>>2]=I;break;case"i64":EA=[I>>>0,(CA=I,+Math.abs(CA)>=1?CA>0?(0|Math.min(+Math.floor(CA/4294967296),4294967295))>>>0:~~+Math.ceil((CA-+(~~CA>>>0))/4294967296)>>>0:0)],Y[A>>2]=EA[0],Y[A+4>>2]=EA[1];break;case"float":b[A>>2]=I;break;case"double":m[A>>3]=I;break;default:$("invalid type for setValue: "+g)}}function p(A,I,g){switch("*"===(I=I||"i8").charAt(I.length-1)&&(I="i32"),I){case"i1":case"i8":return k[A>>0];case"i16":return H[A>>1];case"i32":case"i64":return Y[A>>2];case"float":return b[A>>2];case"double":return m[A>>3];default:$("invalid type for getValue: "+I)}return null}C=null,Q.arguments&&(E=Q.arguments),Q.thisProgram&&Q.thisProgram,Q.quit&&Q.quit,Q.wasmBinary&&(w=Q.wasmBinary),Q.noExitRuntime&&Q.noExitRuntime,"object"!=typeof WebAssembly&&$("no native wasm support detected");var l=!1;function F(A,I){A||$("Assertion failed: "+I)}var G,k,_,H,Y,b,m,v="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function U(A,I,g){for(var B=I+g,Q=I;A[Q]&&!(Q>=B);)++Q;if(Q-I>16&&A.subarray&&v)return v.decode(A.subarray(I,Q));for(var C="";I>10,56320|1023&a)}}else C+=String.fromCharCode((31&E)<<6|i)}else C+=String.fromCharCode(E)}return C}function S(A,I){return A?U(_,A,I):""}function N(A,I){return A%I>0&&(A+=I-A%I),A}function M(A){G=A,Q.HEAP8=k=new Int8Array(A),Q.HEAP16=H=new Int16Array(A),Q.HEAP32=Y=new Int32Array(A),Q.HEAPU8=_=new Uint8Array(A),Q.HEAPU16=new Uint16Array(A),Q.HEAPU32=new Uint32Array(A),Q.HEAPF32=b=new Float32Array(A),Q.HEAPF64=m=new Float64Array(A)}Q.INITIAL_MEMORY;var d,P=[],R=[],J=[],x=[];function L(){if(Q.preRun)for("function"==typeof Q.preRun&&(Q.preRun=[Q.preRun]);Q.preRun.length;)V(Q.preRun.shift());eA(P)}function K(){eA(R)}function q(){eA(J)}function X(){if(Q.postRun)for("function"==typeof Q.postRun&&(Q.postRun=[Q.postRun]);Q.postRun.length;)W(Q.postRun.shift());eA(x)}function V(A){P.unshift(A)}function W(A){x.unshift(A)}R.push({func:function(){mA()}});var T=0,j=null,Z=null;function O(A){T++,Q.monitorRunDependencies&&Q.monitorRunDependencies(T)}function z(A){if(T--,Q.monitorRunDependencies&&Q.monitorRunDependencies(T),0==T&&(null!==j&&(clearInterval(j),j=null),Z)){var I=Z;Z=null,I()}}function $(A){throw Q.onAbort&&Q.onAbort(A),D(A+=""),l=!0,A="abort("+A+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(A)}function AA(A,I){return String.prototype.startsWith?A.startsWith(I):0===A.indexOf(I)}Q.preloadedImages={},Q.preloadedAudios={};var IA="data:application/octet-stream;base64,";function gA(A){return AA(A,IA)}var BA="file://";function QA(A){return AA(A,BA)}var CA,EA,iA="data:application/octet-stream;base64,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CiASfnwgCSALfnwiEUKAgIAQfCIUQhqHfCIiQoCAgAh8IiNCGYd8IhkgGUKAgIAQfCIZQoCAgOAPg30+AgggACASIBh+IA0gDn58IAkgEH58IAwgHH58IAsgF358IBNCGod8IhMgE0KAgIAIfCITQoCAgPAPg30+AhwgACAMIBp+IAkgFX58IBAgFn58IAogD358IAsgDX58IBlCGod8IgogCkKAgIAIfCIKQoCAgPAPg30+AgwgACAQIBJ+IA0gDX58IA4gD358IAkgG358IAwgF358IAsgA6wiDX58IBNCGYd8IgsgC0KAgIAQfCILQoCAgOAPg30+AiAgACAgICFCgICA8A+DfSAeIB9CgICAYIN9IApCGYd8IgpCgICAEHwiD0IaiHw+AhQgACAKIA9CgICA4A+DfT4CECAAIA4gEH4gGCAdfnwgEiAcfnwgCSAXfnwgDCANfnwgC0Iah3wiCSAJQoCAgAh8IglCgICA8A+DfT4CJCAAICIgI0KAgIDwD4N9IBEgFEKAgIBgg30gCUIZh0ITfnwiCUKAgIAQfCIMQhqIfD4CBCAAIAkgDEKAgIDgD4N9PgIACxAAIAAzAAAgADEAAkIQhoQL8wICAn8BfgJAIAJFDQAgACACaiIDQQFrIAE6AAAgACABOgAAIAJBA0kNACADQQJrIAE6AAAgACABOgABIANBA2sgAToAACAAIAE6AAIgAkEHSQ0AIANBBGsgAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkEgayICQR9LDQALCyAACwkAIAAgATcAAAuCBAEDfyACQYAETwRAIAAgASACEAQaIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAvsAQESfyACKAIEIQMgASgCBCEEIAIoAgghBSABKAIIIQYgAigCDCEHIAEoAgwhCCACKAIQIQkgASgCECEKIAIoAhQhCyABKAIUIQwgAigCGCENIAEoAhghDiACKAIcIQ8gASgCHCEQIAIoAiAhESABKAIgIRIgAigCJCETIAEoAiQhFCAAIAIoAgAgASgCAGo2AgAgACATIBRqNgIkIAAgESASajYCICAAIA8gEGo2AhwgACANIA5qNgIYIAAgCyAMajYCFCAAIAkgCmo2AhAgACAHIAhqNgIMIAAgBSAGajYCCCAAIAMgBGo2AgQLGAEBf0HEnAIoAgAiAARAIAARDgALEAIAC0ABA38gACABIAFB+ABqIgIQCyAAQShqIAFBKGoiAyABQdAAaiIEEAsgAEHQAGogBCACEAsgAEH4AGogASADEAsL7AEBEn8gAigCBCEDIAEoAgQhBCACKAIIIQUgASgCCCEGIAIoAgwhByABKAIMIQggAigCECEJIAEoAhAhCiACKAIUIQsgASgCFCEMIAIoAhghDSABKAIYIQ4gAigCHCEPIAEoAhwhECACKAIgIREg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czYCFCABIAUgEHM2AhAgASAEIA9zNgIMIAEgAyANczYCCCABIAAgC3M2AgQgASAWIBdzNgIACykBAX8jAEGAAWsiAiQAIAJBCGogARDoAiAAIAJBCGoQOSACQYABaiQACzIBAX8gACABIAFB+ABqIgIQCyAAQShqIAFBKGogAUHQAGoiARALIABB0ABqIAEgAhALC68CARN/IAEoAgQhDCAAKAIEIQMgASgCCCENIAAoAgghBCABKAIMIQ4gACgCDCEFIAEoAhAhDyAAKAIQIQYgASgCFCEQIAAoAhQhByABKAIYIREgACgCGCEIIAEoAhwhEiAAKAIcIQkgASgCICETIAAoAiAhCiABKAIkIRQgACgCJCELIABBACACayICIAAoAgAiFSABKAIAc3EgFXM2AgAgACALIAsgFHMgAnFzNgIkIAAgCiAKIBNzIAJxczYCICAAIAkgCSAScyACcXM2AhwgACAIIAggEXMgAnFzNgIYIAAgByAHIBBzIAJxczYCFCAAIAYgBiAPcyACcXM2AhAgACAFIAUgDnMgAnFzNgIMIAAgBCAEIA1zIAJxczYCCCAAIAMgAyAMcyACcXM2AgQLJAEBfyMAQSBrIgEkACABIAAQLSABQSAQZSEAIAFBIGokACAAC6YEAgp/Dn4gACgCJCEEIAAoAiAhBSAAKAIcIQYgACgCGCEHIAAoAhQhAyACQhBaBEAgAC0AUEVBGHQhCCAAKAIEIglBBWytIRkgACgCCCIKQQVsrSEXIAAoAgwiC0EFbK0hFSAAKAIQIgxBBWytIRMgDK0hGiALrSEYIAqtIRYgCa0hFCAANQIAIRIDQCABKAADQQJ2Qf///x9xIAdqrSINIBh+IAEoAABB////H3EgA2qtIg4gGn58IAEoAAZBBHZB////H3EgBmqtIg8gFn58IAEoAAlBBnYgBWqtIhAgFH58IAQgCGogASgADEEIdmqtIhEgEn58IA0gFn4gDiAYfnwgDyAUfnwgECASfnwgESATfnwgDSAUfiAOIBZ+fCAPIBJ+fCAQIBN+fCARIBV+fCANIBJ+IA4gFH58IA8gE358IBAgFX58IBEgF358IA0gE34gDiASfnwgDyAVfnwgECAXfnwgESAZfnwiDUIaiEL/////D4N8Ig5CGohC/////w+DfCIPQhqIQv////8Pg3wiEEIaiEL/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aiAFIAYQDCAJQQhqIAYQESAJQdAAaiAJQQhqQggQDCAAIAMgBCAHIAgQogEgCUHQAGogACAEEAwgCUEIaiAEEBEgCUHQAGogCUEIakIIEAwgCUHQAGogARAjIAlB0ABqQYACEAkgAgRAIAJCEDcDAAsgCUHQAmokAEEACygAIAJCgICAgBBaBEAQFAALIAAgASACIANCASAEQfCXAigCABEVABoLFgAgAELAACABIAJB6JcCKAIAEREAGgsyACAAIAIEfyACKAAABUEACzYCMCAAIAEoAAA2AjQgACABKAAENgI4IAAgASgACDYCPAs9ACAAAn8gAgRAIAAgAigAADYCMCACKAAEDAELIABBADYCMEEACzYCNCAAIAEoAAA2AjggACABKAAENgI8CxkAIAAgASACIANCASAEQeSXAigCABEVABoLKAEBfyMAQRBrIgAkACAAQQA6AA9BpgggAEEPakEAEAEaIABBEGokAAtqAQN/IwBBEGsiAyQAIANBADoAD0F/IQUgACABIAJB2JcCKAIAEQMARQRAA0AgAyAAIARqLQAAIAMtAA9yOgAPIARBAWoiBEEgRw0AC0EAIAMtAA9BAWtBCHZBAXFrIQULIANBEGokACAFCxMAIAAgAUHAB2xBoBtqIAIQ5gILEAAgAEIANwIAIABCADcCCAsdACAAEDggAEEoahAdIABB0ABqEB0gAEH4AGoQOAuAAgEIfwNAIAAgAmogASACQQN2ai0AACACQQdxdkEBcToAACACQQFqIgJBgAJHDQALA0AgBCIBQQFqIQQCQCAAIAFqIgYtAABFDQAgBCECQQEhBSABQf4BSw0AA0ACQCAAIAJqIgMsAAAiB0UNACAHIAV0IgcgBiwAACIIaiIJQQ9MBEAgBiAJOgAAIANBADoAAAwBCyAIIAdrIgNBcUgNAiAGIAM6AAADQCAAIAJqIgMtAABFBEAgA0EBOgAADAILIANBADoAACACQf8BSSEDIAJBAWohAiADDQALCyAFQQVLDQEgBUEBaiIFIAFqIgJBgAJJDQALCyAEQYACRw0ACwuVAQEEfyMAQTBrIgUkACAAIAFBKGoiAyABEBMgAEEoaiIEIAMgARAWIABB0ABqIgMgACACQShqEAsgBCAEIAIQCyAAQfgAaiIGIAJB+ABqIAFB+ABqEAsgACABQdAAaiACQdAA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CSACQYAIaiQAC/ADAQJ/IwAiAyEEIANBwANrQUBxIgMkACAARSABRXJFBEAgA0FAa0EAQQBBwAAQPhogA0E8aiABKAIwEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIEEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIsEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIoEAogA0FAayADQTxqQgQQGBogA0E8akETEAogA0FAayADQTxqQgQQGBogA0E8aiACEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIMEAogA0FAayADQTxqQgQQGBoCQCABKAIIIgJFDQAgA0FAayACIAE1AgwQGBogAS0AOEEBcUUNACABKAIIIAEoAgwQCSABQQA2AgwLIANBPGogASgCFBAKIANBQGsgA0E8akIEEBgaIAEoAhAiAgRAIANBQGsgAiABNQIUEBgaCyADQTxqIAEoAhwQCiADQUBrIANBPGpCBBAYGgJAIAEoAhgiAkUNACADQUBrIAIgATUCHBAYGiABLQA4QQJxRQ0AIAEoAhggASgCHBAJIAFBADYCHAsgA0E8aiABKAIkEAogA0FAayADQTxqQgQQGBogASgCICICBEAgA0FAayACIAE1AiQQGBoLIANBQGsgAEHAABA9GgsgBCQAC68BAQN/IwBBEGsiAiQAQWohAwJAIABFIAFFcg0AIAFBCnQiBCABbkGACEcNACAAQQwQICIBNgIAIAFFDQAgAUIANwIAQYCYAiACQQxqIAQQsgEiATYCAAJAAkAgAQRAIAJBADYCDAwBCyACKAIMIgENAQsgACgCABAZIABBADYCAAwBCyAAKAIAIAE2AgAgACgCACABNgIEIAAoAgAgBDYCCEEAIQMLIAJBEGokACADC4cBAQJ/IwBB0ABrIgMkAEFnIQICQCAARSABRXINACAAIAAoAhRBA3QQICICNgIEIAJFBEBBaiECDAELIAAgACgCEBC8ASICBEAgACABKAI4EIMBDAELIAMgASAAKAIkELsBIANBQGtBCBAJIAMgABC6ASADQcgAEAlBACECCyADQdAAaiQAIAILkwEBBH8jAEEgayICJAACQCAARQ0AIAAoAhxFDQAgAiABNgIQQQEhBANAIAIgAzoAGEEAIQFBACEFIAQEQANAIAJBADYCHCACIAIpAxg3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ACAAIAEgAiADrSAErUIghoQgBSAGEGoLFwAgACABIAKtIAOtQiCGhCAEIAUQuwILFgAgACABKQAANwAwIAAgASkACDcAOAsYACAAIAEgAiADrSAErUIghoQgBSAGEGsLEwAgACABrSACrUIghoQgAxCSAgsTACAAIAEgAq0gA61CIIaEEJMCCyEAIAAgASACrSADrUIghoQgBK0gBa1CIIaEIAYgBxCUAgsfACAAIAEgAq0gA61CIIaEIAStIAWtQiCGhCAGEIwBCy0AIAAgAa0gAq1CIIaEIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChCVAgsXACAAIAEgAq0gA61CIIaEIAQgBRCzAgsSACAAIAEgAq0gA61CIIaEEDQLEgAgACABIAKtIAOtQiCGhBAlCxkAIAAgASACIAOtIAStQiCGhCAFIAYQlAELFgAgACABKQAANwAgIAAgASkACDcAKAsXACAAIAEgAq0gA61CIIaEIAQgBRC1AgsVACAAIAEgAq0gA61CIIaEIAQQtgILGQAgACABIAKtIAOtQiCGhCAEIAUgBhCVAQsXACAAIAEgAq0gA61CIIaEIAQgBRC4AgsbACAAIAEgAiADrSAErUIghoQgBSAGIAcQlgELGAAgACABIAIgA60gBK1CIIaEIAUgBhBoCxkAIAAgASACrSADrUIghoQgBCAFIAYQlwELFwAgACABIAKtIAOtQiCGhCAEIAUQuQILGwAgACABIAIgA60gBK1CIIaEIAUgBiAHEJgBCxgAIAAgASACIAOtIAStQiCGhCAFIAYQaQsVACAAIAEgAq0gA61CIIaEIAQQwAILFQAgACABIAKtIAOtQiCGhCAEEJoBCyUAIAAgASADIAStIAWtQiCGhCAGIAetIAitQiCGhCAJIAoQyQILJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCcAQslACAAIAEgAiADrSAErUIghoQgBSAGrSAHrUIghoQgCSAKEMsCCycAIAAgASACIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAogCxCdAQslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEM8CCyUAIAAgAiADrSAErUIghoQgBSAGIAetIAitQiCGhCAJIAoQngELJQAgACABIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChDQAgslACAAIAIgA60gBK1CIIaEIAUgBiAHrSAIrUIghoQgCSAKEJ8BCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQ0QILJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALEKABCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQ0gILJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALEKEBCwQAQQoLBgBBspcCCwsAIAAgASACEIICCw0AIAAgASACIAMQgwILCAAgABA1QQALCQAgACABEIgCCwsAIAAgASACEIoBCwUAQb9/CwUAQdABCywBAX8jAEFAaiIDJAAgACADECcgASADQsAAIAJBARCHASEAIANBQGskACAACy4BAX8jAEFAaiIEJAAgACAEECcgASACIARCwAAgA0EBEIkBIQAgBEFAayQAIAALewEBfwJAAkACQCADQsAAVA0AIANCQHwiA0K/////D1YNACACIAJBQGsiBSADIAQQhgFFDQEgAEUNACAAQQAgA6cQEBoLQX8hAiABRQ0BIAFCADcDAEF/DwsgAQRAIAEgAzcDAAtBACECIABFDQAgACAFIAOnEEcaCyACC3MBAX8jAEEQayIFJAAgACAFQQhqIABBQGsgAiADpyICEEcgAyAEEIgBGgJAIAUpAwhCwABSBEAgAQRAIAFCADcDAAsgAEEAIAJBQGsQEBpBfyEADAELQQAhACABRQ0AIAEgA0JAfTcDAAsgBUEQaiQAIAALbQEBfyMAQUBqIgIkACACIAFCIBA0GiACIAItAABB+AFxOgAAIAIgAi0AH0E/cUHAAHI6AB8gACACKQMQNwAQIAAgAikDCDcACCAAIAIpAwA3AAAgACACKQMYNwAYIAJBwAAQCSACQUBrJABBAAuGAQECfyMAQYACayICJABBfyEDAkAgARB1DQAgAkHgAGogARCuAQ0AIAJB4ABqEOUCRQ0AIAIQHSACIAIgAkGIAWoiARAWIAJBMGoQHSACQTBqIAJBMGogARATIAIgAhA6IAJBMGogAkEwaiACEAsgACACQTBqEC1BACEDCyACQYACaiQAIAMLLAEBfyMAQSBrIgIkACACQSAQHyAAIAEg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ASACQhB9IAMgBBBqBSAFCwslACACQvD///8PWgRAEBQACyAAQRBqIAAgASACIAMgBBBrGkEACwsAIAAgASACEL8CCy8AIAFCgICAgBBaBEBBACIAQYQOaiAAQZgOakHFASAAQbIOahAAAAsgACABpxAfCzMBAn8jAEEgayIDJABBfyEEIAMgAiABEKgBRQRAIABB4JUCIAMQbSEECyADQSBqJAAgBAtWAQF/IwBBQGoiAyQAIAMgAkIgEDQaIAEgAykDGDcAGCABIAMpAxA3ABAgASADKQMINwAIIAEgAykDADcAACADQcAAEAkgACABEHIhACADQUBrJAAgAAtAAQF/IwBBIGsiBCQAIAQgASACIAMQmgEaIAAgBBCAASEBIAQgAEEgEEUhAyAEQSBqJAAgA0F/IAEgACAERhtyC0MBAX8jAEFAaiICJAAgACACEMICIAEgAikDGDcAGCABIAIpAxA3ABAgASACKQMINwAIIAEgAikDADcAACACQUBrJAALNwEBfyMAQUBqIgIkACAAIAIQJyAAQdABaiIAIAJCwAAQHBogACABECcgAkHAABAJIAJBQGskAAvhAQEDfyMAQcABayICJAAgABA1IAJBQGtBNkGAARAQGiACIAEtAABBNnM6AEBBASEDA0AgAkFAayADaiIEIAQtAAAgASADai0AAHM6AAAgA0EBaiIDQSBHDQALIAAgAkFAa0KAARAcGiAAQdABaiIAEDUgAkFAa0HcAEGAARAQGiACIAEtAABB3ABzOgBAQQEhAwNAIAJBQGsgA2oiBCAELQAAIAEgA2otAABzOgAAIANBAWoiA0EgRw0ACyAAIAJBQGtCgAEQHBogAkFAa0GAARAJIAJBwAAQCSACQcABaiQAC2YBAX4gACkAACIBQjiGIAFCKIZCgICAgICAwP8Ag4QgAUIYhkKAgICAgOA/gyABQgiGQoCAgIDwH4OEhCABQgiIQoCAgPgPgyABQhiIQoCA/AeDhCABQiiIQoD+A4MgAUI4iISEhAsmAQJ/AkBBpJwCKAIAIgBFDQAgACgCFCIARQ0AIAARAQAhAQsgAQtkACAAIAFCKIZCgICAgICAwP8AgyABQjiGhCABQhiGQoCAgICA4D+DIAFCCIZCgICAgPAfg4SEIAFCCIhCgICA+A+DIAFCGIhCgID8B4OEIAFCKIhCgP4DgyABQjiIhISENwAAC4YBAQJ/AkAgACgCSEEDdkH/AHEiAkHvAE0EQCAAIAJqQdAAakHglAJB8AAgAmsQEhoMAQsgAEHQAGoiAyACakHglAJBgAEgAmsQEhogACADIAEgAUGABWoQSCADQQBB8AAQEBoLIABBwAFqIABBQGtBEBCbASAAIABB0ABqIAEgAUGABWoQSAsoAQJ/A0AgACACQQN0IgNqIAEgA2oQxAI3AwAgAkEBaiICQRBHDQALC0UBAX9BfyEIIANCEFoEQCAAIAIgA0IQfSACIAOnakEQayAEIAUgBiAHEJwBIQgLIAEEQCABQgAgA0IQfSAIGzcDAAsgCAv/AQEBfyMAQeACayIIJAAgCEEgakLAACAGIAcQcCAIQeAAaiAIQSBqECQgCEEgakHAABAJIAhB4ABqIAQgBRAMIAhB4ABqQZCPAiIEQgAgBX1CD4MQDCAIQeAAaiABIAIQDCAIQeAAaiAEQgAgAn1CD4MQDCAIQRhqIAUQESAIQeAAaiAIQRhqQggQDCAIQRhqIAIQESAIQeAAaiAIQRhqQggQDCAIQeAAaiAIECMgCEHgAGpBgAIQCSAIIAMQOyEDIAhBEBAJAkAgAEUNACADBEAgAEEAIAKnEBAaQX8hAwwBCyAAIAEgAiAGQQEgBxBvQQAhAwsgCEHgAmokACADCz0AIANC8P///w9UBEAgACAAIAOnakEAIAIgAyAEIAUgBiAHEJ0BGiABBEAgASADQhB8NwMAC0EADwsQFAAL2gEBAX8jAEHQAmsiCSQAIAlBEGpCwAAgByAIEHAgCUHQAGogCUEQahAkIAlBEGpBwAAQCSAJQdAAaiAFIAYQDCAJQdAAakGQjwIiBUIAIAZ9Qg+DEAwgACADIAQgB0EBIAgQbyAJQdAAaiAAIAQQDCAJQdAAaiAFQgAgBH1CD4MQDCAJQQhqIAYQESAJQdAAaiAJQQhqQggQDCAJQQhqIAQQESAJQdAAaiAJQQhqQggQDCAJQdAAaiABECMgCUHQAGpBgAIQCSACBEAgAkIQNwMACyAJQdACaiQACw4AIAAgAa1B+A0gAhA3CwQAQQwLRQEBf0F/IQggA0IQWgRAIAAgAiADQhB9IAIgA6dqQRBrIAQgBSAGIAcQngEhCAsgAQRAIAFCACADQhB9IAgbNwMACyAIC0UBAX9BfyEIIANCEFoEQCAAIAIgA0IQfSACIAOnakEQayAEIAUgBiAHEJ8BIQgLIAEEQCABQgAgA0IQfSAIGzcDAAsgCAs9ACADQvD///8PVARAIAAgACADp2pBACACIAMgBCAFIAYgBxCgARogAQRAIAEgA0IQfDcDAAtBAA8LEBQACz0AIANC8P///w9UBEAgACAAIAOnakEAIAIgAyAEIAUgBiAHEKEBGiABBEAgASADQhB8NwMAC0EADwsQFAALVwEBfyMAQdAAayIGJAAgAlBFBEAgBkEMaiAEEAogBkEQaiAFEEwgBkEQaiADIAZBDGoQpAEgBkEQaiABIAAgAhBLIAZBEGpBwAAQCQsgBkHQAGokAEEAC2UBAX8jAEHQAGsiBiQAIAJQRQRAIAZBCGogBKcQCiAGQQxqIARCIIinEAogBkEQaiAFEEwgBkEQaiADIAZBCGoQpQEgBkEQaiABIAAgAhBLIAZBEGpBwAAQCQsgBkHQAGokAEEAC0YBAX8jAEFAaiIEJAAgAVBFBEAgBCADEEwgBCACQQAQpAEgBCAAQQAgAacQECIAIAAgARBLIARBwAAQCQsgBEFAayQAQQALKgECfyAAQQJPBH9BACAAayAAcCEBA0AQcyICIAFJDQALIAIgAHAFIAELC0YBAX8jAEFAaiIEJAAgAVBFBEAgBCADEEwgBCACQQAQpQEgBCAAQQAgAacQECIAIAAgARBLIARBwAAQCQsgBEFAayQAQQALNQBBwJwCKAIABH9BAQVB+JsCQQA2AgAQ6gJB9JsCQQE2AgAQpwEQpwJBwJwCQQE2AgBBAAsL7QIBAn8jAEHwAGsiByQAIAJQRQRAIAcgBSkAGDcDGCAHIAUpABA3AxAgByAFKQAANwMAQQghBiAHIAUpAAg3AwggByADKQAANwNgA0AgB0HgAGogBmogBDwAACAEQgiIIQQgBkEBaiIGQRBHDQALIAJCP1YEQANAQQAhBiAHQSBqIAdB4ABqIAcQTQNAIAAgBmogB0EgaiAGai0AACABIAZqLQAAczoAAEEBIQUgBkEBaiIGQcAARw0AC0EIIQYDQCAHQeAAaiAGaiIDIAUgAy0AAGoiAzoAACADQQh2IQUgBkEBaiIGQRBHDQALIAFBQGshASAAQUBrIQAgAkJAfCICQj9WDQALCyACUEUEQEEAIQYgB0EgaiAHQeAAaiAHEE0gAqchAwNAIAAgBmogB0EgaiAGai0AACABIAZqLQAAczoAACAGQQFqIgYgA0cNAAsLIAdBIGpBwAAQCSAHQSAQCQsgB0HwAGokAEEAC5ECAgJ/AX4jAEHwAGsiBCQAIAFQRQRAIAQgAykAGDcDGCAEIAMpABA3AxAgBCADKQAANwMAIAQgAykACDcDCCACKQAAIQYgBEIANwNoIAQgBjcDYAJAIAFCwABaBEADQCAAIARB4ABqIAQQTUEIIQNBASECA0AgBEHgAGogA2oiBSACIAUtAABqIgI6AAAgAkEIdiECIANBAWoiA0EQRw0ACyAAQUBrIQAgAUJAfCIBQj9WDQALIAFQDQELQQAhAyAEQSBqIARB4ABqIAQQTSABpyECA0AgACADaiAEQSBqIANqLQAAOgAAIANBAWoiAyACRw0ACwsgBEEgakHAABAJIARBIBAJCyAEQfAAaiQAQQALmgYBIX8gAigAACESIAIoAAQhEyACKAAIIRQgAigADCEVIAIoABAhFiACKAAUIRcgAigAGCEYIAIoABwhGUHl8MGLBiECIBIhByATIQggFCERIBUhCUHuyIGZAyEOIAEoAAAiGyEKIAEoAAQiHCELIAEoAAgiHSEMIAEoAAwiHiEPQbLaiMsHIQEgFiEEQfTKgdkGIQUgGSENIBghBiAXIQMDQCACIANqQQcQCCAJcyIJIAJqQQkQCCAMcyIMIAlqQQ0QCCADcyIfIAxqQRIQCCEgIAcgDmpBBxAIIA9zIgMgDmpBCRAIIAZzIhAgA2pBDRAIIAdzIgcgEGpBEhAIIQ8gASAKakEHEAggDXMiDSABakEJEAggCHMiCCANakENEAggCnMiCiAIakESEAghISAEIAVqQQcQCCARcyIGIAVqQQkQCCALcyILIAZqQQ0QCCAEcyIiIAtqQRIQCCEjIAYgAiAgcyICakEHEAggB3MiByACakEJEAggCHMiCCAHakENEAggBnMiESAIakESEAggAnMhAiAOIA9zIgQgCWpBBxAIIApzIgogBGpBCRAIIAtzIgsgCmpBDRAIIAlzIgkgC2pBEhAIIARzIQ4gASAhcyIBIANqQQcQCCAicyIEIAFqQQkQCCAMcyIMIARqQQ0QCCADcyIPIAxqQRIQCCABcyEBIAUgI3MiBSANakEHEAggH3MiAyAFakEJEAggEHMiBiADakENEAggDXMiDSAGakESEAggBXMhBSAaQRJJIRAgGkECaiEaIBANAAsgACACQeXwwYsGahAKIABBBGogByASahAKIABBCGogCCATahAKIABBDGogESAUahAKIABBEGogCSAVahAKIABBFGogDkHuyIGZA2oQCiAAQRhqIAogG2oQCiAAQRxqIAsgHGoQCiAAQSBqIAwgHWoQCiAAQSRqIA8gHmoQCiAAQShqIAFBstqIywdqEAogAEEsaiAEIBZqEAogAEEwaiADIBdqEAogAEE0aiAGIBhqEAogAEE4aiANIBlqEAogAEE8aiAFQfTKgdkGahAKCzoBAX8jAEHgAGsiAyQAIANBMGogAiABEBMgAyACIAEQFiADIAMQOiAAIANBMGogAxALIANB4ABqJAALdgECfyMAQdABayICJAADQCAAIANqIAEgA2otAAA6AAAgA0EBaiIDQSBHDQALIAAgAC0AAEH4AXE6AAAgACAALQAfQT9xQcAAcjoAHyACQTBqIAAQdiACIAJB2ABqIAJBgAFqENwCIAAgAhAtIAJB0AFqJABBAAu9AwEMfiABNAIEIQIgATQCCCEDIAE0AgwhBCABNAIQIQUgATQCFCEGIAE0AhghByABNAIAIQsgACABNAIkQsK2B34iCCAIQoCAgAh8IghCgICA8A+DfSABNAIgQsK2B34gATQCHELCtgd+IglCgICACHwiCkIZh3wiDEKAgIAQfCINQhqIfD4CJCAAIAwgDUKAgIDgD4N9PgIgIAAgCSAKQoCAgPAPg30gB0LCtgd+IAZCwrYHfiIGQoCAgAh8IgdCGYd8IglCgICAEHwiCkIaiHw+AhwgACAJIApCgICA4A+DfT4CGCAAIAYgB0KAgIDwD4N9IAVCwrYHfiAEQsK2B34iBEKAgIAIfCIFQhmHfCIGQoCAgBB8IgdCGoh8PgIUIAAgBiAHQoCAgOAPg30+AhAgACAEIAVCgICA8A+DfSADQsK2B34gAkLCtgd+IgJCgICACHwiA0IZh3wiBEKAgIAQfCIFQhqIfD4CDCAAIAQgBUKAgIDgD4N9PgIIIAAgAiADQoCAgPAPg30gCEIZh0ITfiALQsK2B358IgJCgICAEHwiA0IaiHw+AgQgACACIANCgICA4A+DfT4CAAvcAQEFfyMAQRBrIgNBADYACyADQQA2AggDQCAAIAJqLQAAIQRBACEBA0AgA0EIaiABaiIFIAUtAAAgAUEFdEGgjQJqIAJqLQAAIARzcjoAACABQQFqIgFBB0cNAAsgAkEBaiICQR9HDQALIAAtAB9B/wBxIQJBACEAQQAhAQNAIANBCGogAWoiBCAELQAAIAIgAUEFdEG/jQJqLQAAc3I6AAAgAUEBaiIBQQdHDQALQQAhAQNAIANBCGogAGotAABBAWsgAXIhASAAQQFqIgBBB0cNAAsgAUEIdkEBcQvcBAEDfyMAQdACayIDJABBfyEEIAIQ3wJFBEBBACEEA0AgACAEaiABIARqLQAAOgAAIARBAWoiBEEgRw0ACyAAIAAtAABB+AFxOgAAIAAgAC0AH0E/cUHAAHI6AB8gA0GgAmogAhB7IANB8AFqEB0gA0HAAWoQOCADQZABaiADQaACahAsIANB4ABqEB1B/gEhAkEAIQQDQCADQfABaiADQZABaiAAIAIiBUEDdmotAAAgAkEHcXZBAXEiASAEcyIEEE4gA0HAAWogA0HgAGogBBBOIAJBAWshAiADQTBqIANBkAFqIANB4ABqEBYgAyADQfABaiADQcABahAWIANB8AFqIANB8AFqIANBwAFqEBMgA0HAAWogA0GQAWogA0HgAGoQEyADQeAAaiADQTBqIANB8AFqEAsgA0HAAWogA0HAAWogAxALIANBMGogAxAOIAMgA0HwAWoQDiADQZABaiADQeAAaiADQcABahATIANBwAFqIANB4ABqIANBwAFqEBYgA0HwAWogAyADQTBqEAsgAyADIANBMGoQFiADQcABaiADQcABahAOIANB4ABqIAMQ3gIgA0GQAWogA0GQAWoQDiADQTBqIANBMGogA0HgAGoQEyADQeAAaiADQaACaiADQcABahALIANBwAFqIAMgA0EwahALIAEhBCAFDQALIANB8AFqIANBkAFqIAEQTiADQcABaiADQeAAaiABEE4gA0HAAWogA0HAAWoQOiADQfABaiADQfABaiADQcABahALIAAgA0HwAWoQLUEAIQQLIANB0AJqJAAgBAtUAQV/QSAhAUEBIQIDQCAAIAFBAWsiAWotAAAiBCABQYAbai0AACIFa0EIdSACcSADQf8BcXIhAyAEIAVzQf//A2pBCHYgAnEhAiABDQALIANBAEcL6B4BOn4gARAPIRIg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CiAAIAtC////AIMgBEIVh3wiBkIKiDwAESAAIAZCAog8ABAgACAEQv///wCDIgdCAYYgBUIUiIQ8AA0gACAMQv///wCDIAZCFYd8IgRCDYg8ABQgACAEQgWIPAATIAAgBkL///8AgyIFQgaGIAdCD4iEPAAPIAAgDkL///8AgyAEQhWHfCIGPAAVIAAgBEIDhiAFQhKIhDwAEiAAIAZCCIg8ABYgACAPQv///wCDIAZCFYd8IgRCC4g8ABkgACAEQgOIPAAYIAAgEEL///8AgyAEQhWHfCIFQgaIPAAbIAAgBkIQiEIfgyAEQv///wCDIgRCBYaEPAAXIAAgDUL///8AgyAFQhWHfCIGQhGIPAAfIAAgBkIJiDwAHiAAIAZCAYg8AB0gACAFQv///wCDIgVCAoYgBEITiIQ8ABogACAGQgeGIAVCDoiEPAAcC1IBA38gAC0AH0F/c0H/AHEhAUEeIQIDQCABIAAgAmotAABBf3NyIQEgAkEBayIDIQIgAw0ACyABQf8BcUEBa0HsASAALQAAa3FBCHZBf3NBAXELjAQBAn8jAEHgDWsiAiQAIAJB4ANqIAEQGyACQcACaiABEE8gAiACQcACahAVIAJBwAJqIAIgAkHgA2oQGiACQaABaiACQcACahAVIAJBgAVqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBoAZqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBwAdqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJB4AhqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBgApqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBoAtqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBwAxqIAJBoAFqEBsgABCrAUH8ASEBA0AgAkHAAmogABBPAkAgASIDQaCLAmosAAAiAUEBTgRAIAJBoAFqIAJBwAJqEBUgAkHAAmogAkGgAWogAkHgA2ogAUH+AXFBAXZBoAFsahAaDAELIAFBf0oNACACQaABaiACQcACahAVIAJBwAJqIAJBoAFqIAJB4ANqQQAgAWtB/gFx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/////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/7dP1XBpjEljWnPei3vneFABBnxsL/PABEIU7jAG98ST/+CXDAWDcNwC3TD7/w0I9ADJMpAHhpEz/TD2j/3U+HwBRkUD/dkEOAKJz1v8Gii4AfOb0/wqKjwA0GsIAuPRMAIGPKQG+9BP/e6p6/2KBRAB51ZMAVmUe/6FnmwCMWUP/7+W+AUMLtQDG8In+7kW8/+pxPP8l/zn/RbK2/oDQswB2Gn3+AwfW//EyTf9Vy8X/04f6/xkwZP+71bT+EVhpAFPRngEFc2IABK48/qs3bv/ZtRH/FLyqAJKcZv5X1q7/cnqbAeksqgB/CO8B1uzqAK8F2wAxaj3/BkLQ/wJqbv9R6hP/12vA/0OX7gATKmz/5VVxATJEh/8RagkAMmcB/1ABqAEjmB7/EKi5AThZ6P9l0vwAKfpHAMyqT/8OLu//UE3vAL3WS/8RjfkAJlBM/75VdQBW5KoAnNjQAcPPpP+WQkz/r+EQ/41QYgFM2/IAxqJyAC7amACbK/H+m6Bo/7IJ/P5kbtQADgWnAOnvo/8cl50BZZIK//6eRv5H+eQAWB4yAEQ6oP+/GGgBgUKB/8AyVf8Is4r/JvrJAHNQoACD5nEAfViTAFpExwD9TJ4AHP92AHH6/gBCSy4A5torAOV4ugGURCsAiHzuAbtrxf9UNfb/M3T+/zO7pQACEa8AQlSgAfc6HgAjQTX+Rey/AC2G9QGje90AIG4U/zQXpQC61kcA6bBgAPLvNgE5WYoAUwBU/4igZABcjnj+aHy+ALWxPv/6KVUAmIIqAWD89gCXlz/+74U+ACA4nAAtp73/joWzAYNW0wC7s5b++qoO/0RxFf/eujv/QgfxAUUGSABWnGz+N6dZAG002/4NsBf/xCxq/++VR/+kjH3/n60BADMp5wCRPiEAim9dAblTRQCQcy4AYZcQ/xjkGgAx2eIAcUvq/sGZDP+2MGD/Dg0aAIDD+f5FwTsAhCVR/n1qPADW8KkBpONCANKjTgAlNJcAY00aAO6c1f/VwNEBSS5UABRBKQE2zk8AyYOS/qpvGP+xITL+qybL/073dADR3ZkAhYCyATosGQDJJzsBvRP8ADHl0gF1u3UAtbO4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ANW7ff/oLjz/vnQq/peyE/8zPu3+zOzBAMLoPACsIp3/vRC4/mcDX/+N6ST+KRkL/xXDpgB29S0AQ9WV/58MEv+7pOMBoBkFAAxOwwErxeEAMI4p/sSbPP/fxxIBkYicAPx1qf6R4u4A7xdrAG21vP/mcDH+Sart/+e34/9Q3BQAwmt/AX/NZQAuNMUB0qsk/1gDWv84l40AYLv//ypOyAD+RkYB9H2oAMxEigF810YAZkLI/hE05AB13I/+y/h7ADgSrv+6l6T/M+jQAaDkK//5HRkBRL4/AA0AAAAA/wAAAAD1AAAAAAAA+wAAAAAAAP0AAAAA8wAAAAAHAAAAAAADAAAAAPMAAAAABQAAAAAAAAAACwAAAAAACwAAAADzAAAAAAAA/QAAAAAA/wAAAAADAAAAAPUAAAAAAAAADwAAAAAA/wAAAAD/AAAAAAcAAAAABQBBnI0CCwEBAEHAjQILAQEAQeCNAgugAeDrenw7QbiuFlbj+vGfxGraCY3rnDKx/YZiBRZfSbgAX5yVvKNQjCSx0LFVnIPvWwREXMRYHI6G2CJO3dCfEVfs////////////////////////////////////////f+3///////////////////////////////////////9/7v///////////////////////////////////////38AQaCPAgvBBQjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FsirijXmC+KQs1l7yORRDdxLztN7M/7wLW824mBpdu16Ti1SPNbwlY5GdAFtvER8VmbTxmvpII/khiBbdrVXhyrQgIDo5iqB9i+b3BFAVuDEoyy5E6+hTEk4rT/1cN9DFVviXvydF2+crGWFjv+sd6ANRLHJacG3JuUJmnPdPGbwdJK8Z7BaZvk4yVPOIZHvu+11YyLxp3BD2WcrHfMoQwkdQIrWW8s6S2D5KZuqoR0StT7Qb3cqbBctVMRg9qI+Xar32buUlE+mBAytC1txjGoPyH7mMgnA7DkDu++x39Zv8KPqD3zC+DGJacKk0eRp9VvggPgUWPKBnBuDgpnKSkU/C/SRoUKtycmySZcOCEbLu0qxFr8bSxN37OVnRMNOFPeY6+LVHMKZaiydzy7Cmp25q7tRy7JwoE7NYIUhSxykmQD8Uyh6L+iATBCvEtmGqiRl/jQcItLwjC+VAajUWzHGFLv1hnoktEQqWVVJAaZ1iogcVeFNQ70uNG7MnCgahDI0NK4FsGkGVOrQVEIbDcemeuO30x3SCeoSJvhtbywNGNaycWzDBw5y4pB40qq2E5z42N3T8qcW6O4stbzby5o/LLvXe6Cj3RgLxdDb2OleHKr8KEUeMiE7DlkGggCx4woHmMj+v++kOm9gt7rbFCkFXnGsvej+b4rU3Lj8nhxxpxhJurOPifKB8LAIce4htEe6+DN1n3a6njRbu5/T331um8Xcqpn8AammMiixX1jCq4N+b4EmD8RG0ccEzULcRuEfQQj9XfbKJMkx0B7q8oyvL7JFQq+njxMDRCcxGcdQ7ZCPsu+1MVMKn5l/Jwpf1ns+tY6q2/LXxdYR0qMGURsgABB8JUCC4UBYjY0X3BvcyA8PSBiNjRfbGVuAHNvZGl1bS9jb2RlY3MuYwBzb2RpdW1fYmluMmJhc2U2NAAkYXJnb24yaWQAJGFyZ29uMmkAJHY9ACRtPQAsdD0ALHA9ACRhcmdvbjJpZCR2PQAkYXJnb24yaSR2PQAkYXJnb24yaWQkACRhcmdvbjJpJABBkJcCCyhTaWdFZDI1NTE5IG5vIEVkMjU1MTkgY29sbGlzaW9ucwEAMS4wLjE4AEG8lwILOVCOUAAAQAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQ==";function nA(A){try{if(A==iA&&w)return new Uint8Array(w);var I=HA(A);if(I)return I;if(t)return t(A);throw"both async and sync fetching of the wasm failed"}catch(A){$(A)}}function aA(){if(!w&&(i||n)){if("function"==typeof fetch&&!QA(iA))return fetch(iA,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at '"+iA+"'";return A.arrayBuffer()})).catch((function(){return nA(iA)}));if(e)return new Promise((function(A,I){e(iA,(function(I){A(new Uint8Array(I))}),I)}))}return Promise.resolve().then((function(){return nA(iA)}))}function rA(){var A={a:bA};function I(A,I){var g=A.exports;Q.asm=g,M((h=Q.asm.g).buffer),d=Q.asm.h,z()}function g(A){I(A.instance)}function B(I){return aA().then((function(I){return WebAssembly.instantiate(I,A)})).then(I,(function(A){D("failed to asynchronously prepare wasm: "+A),$(A)}))}if(O(),Q.instantiateWasm)try{return Q.instantiateWasm(A,I)}catch(A){return D("Module.instantiateWasm callback failed with error: "+A),!1}return w||"function"!=typeof WebAssembly.instantiateStreaming||gA(iA)||QA(iA)||"function"!=typeof fetch?B(g):fetch(iA,{credentials:"same-origin"}).then((function(I){return WebAssembly.instantiateStreaming(I,A).then(g,(function(A){return D("wasm streaming compile failed: "+A),D("falling back to ArrayBuffer instantiation"),B(g)}))})),{}}gA(iA)||(iA=s(iA));var oA={1024:function(){return Q.getRandomValue()},1062:function(){if(void 0===Q.getRandomValue)try{var A="object"==typeof window?window:self,I=void 0!==A.crypto?A.crypto:A.msCrypto,g=function(){var A=new Uint32Array(1);return I.getRandomValues(A),A[0]>>>0};g(),Q.getRandomValue=g}catch(A){try{var B=require("crypto"),C=function(){var A=B.randomBytes(4);return(A[0]<<24|A[1]<<16|A[2]<<8|A[3])>>>0};C(),Q.getRandomValue=C}catch(A){throw"No secure random number generator found"}}}};function eA(A){for(;A.length>0;){var I=A.shift();if("function"!=typeof I){var g=I.func;"number"==typeof g?void 0===I.arg?d.get(g)():d.get(g)(I.arg):g(void 0===I.arg?null:I.arg)}else I(Q)}}function tA(A,I,g,B){$("Assertion failed: "+S(A)+", at: "+[I?S(I):"unknown filename",g,B?S(B):"unknown function"])}function fA(){$()}function cA(A,I,g){var B=lA(I,g);return oA[A].apply(null,B)}function yA(A,I,g){_.copyWithin(A,I,I+g)}function sA(){return _.length}function wA(A){try{return h.grow(A-G.byteLength+65535>>>16),M(h.buffer),1}catch(A){}}function hA(A){A>>>=0;var I=sA(),g=2147483648;if(A>g)return!1;for(var B=1;B<=4;B*=2){var Q=I*(1+.2/B);if(Q=Math.min(Q,A+100663296),wA(Math.min(g,N(Math.max(16777216,A,Q),65536))))return!0}return!1}function DA(A){return Y[vA()>>2]=A,A}function uA(A){switch(A){case 30:return 16384;case 85:return 131072;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return DA(28),-1}var pA=[];function lA(A,I){var g;for(pA.length=0,I>>=2;g=_[A++];){var B=g<105;B&&1&I&&I++,pA.push(B?m[I++>>1]:Y[I]),++I}return pA}var FA=!1;function GA(A){for(var I=[],g=0;g255&&(FA&&F(!1,"Character code "+B+" ("+String.fromCharCode(B)+") at offset "+g+" not in 0x00-0xFF."),B&=255),I.push(String.fromCharCode(B))}return I.join("")}var kA="function"==typeof atob?atob:function(A){var I,g,B,Q,C,E,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="",a=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{I=i.indexOf(A.charAt(a++))<<2|(Q=i.indexOf(A.charAt(a++)))>>4,g=(15&Q)<<4|(C=i.indexOf(A.charAt(a++)))>>2,B=(3&C)<<6|(E=i.indexOf(A.charAt(a++))),n+=String.fromCharCode(I),64!==C&&(n+=String.fromCharCode(g)),64!==E&&(n+=String.fromCharCode(B))}while(a0||(L(),T>0||(Q.setStatus?(Q.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Q.setStatus("")}),1),I()}),1)):I()))}if(Q._malloc=function(){return(Q._malloc=Q.asm.Bc).apply(null,arguments)},Q._free=function(){return(Q._free=Q.asm.Cc).apply(null,arguments)},Q.setValue=u,Q.getValue=p,Q.UTF8ToString=S,Z=function A(){YA||UA(),YA||(Z=A)},Q.run=UA,Q.preInit)for("function"==typeof Q.preInit&&(Q.preInit=[Q.preInit]);Q.preInit.length>0;)Q.preInit.pop()();UA()})).catch((function(){return B.useBackupModule()})),I}"function"==typeof define&&define.amd?define(["exports"],I):"object"==typeof exports&&"string"!=typeof exports.nodeName?I(exports):A.libsodium=I(A.libsodium_mod||(A.commonJsStrict={}))}(this); + +}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/libsodium/dist/modules") + +},{"_process":390,"buffer":69,"crypto":81,"fs":24,"path":382}],211:[function(require,module,exports){ +(function (global){(function (){ +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** `Object#toString` result references. */ +var funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** Built-in value references. */ +var Symbol = root.Symbol, + splice = arrayProto.splice; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function(string) { + string = toString(string); + + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; + +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],212:[function(require,module,exports){ +(function (global){(function (){ +/** + * Lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined, + Symbol = root.Symbol, + Uint8Array = root.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeMax = Math.max, + nativeNow = Date.now; + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'), + nativeCreate = getNative(Object, 'create'); + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache; + this.size = 0; +} + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + stack || (stack = new Stack); + if (isObject(srcValue)) { + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; -module.exports = function isValidDomain (value, opts) { - if (typeof value !== 'string') return false - if (!(opts instanceof Object)) opts = {} - value = value.toLowerCase() + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); +} - if (value.endsWith('.')) { - value = value.slice(0, value.length - 1) - } +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); - if (opts.allowUnicode) { - value = punycode.toASCII(value) + if (stacked) { + assignMergeValue(object, key, stacked); + return; } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; - if (value.length > 253) { - return false - } + var isCommon = newValue === undefined; - const validChars = /^([a-z0-9-._*]+)$/g - if (!validChars.test(value)) { - return false - } + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); - const sldRegex = /(.*)\.(([a-z0-9]+)(\.[a-z0-9]+))/ - const matches = value.match(sldRegex) - var tld = null - var labels = null - if (matches && matches.length > 2) { - if (sldMap[matches[2]]) { - tld = matches[2] - labels = matches[1].split('.') + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; } } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); +} - if (!labels) { - labels = value.split('.') - if (labels.length <= 1) return false +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); +} - tld = labels.pop() - const tldRegex = /^(?:xn--)?(?!^\d+$)[a-z0-9]+$/gi +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); +}; - if (!tldRegex.test(tld)) return false +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - if (opts.subdomain === false && labels.length > 1) return false + buffer.copy(result); + return result; +} - const isValid = labels.every(function (label, index) { - if (opts.wildcard && index === 0 && label === '*' && labels.length > 1) { - return true - } +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; +} - let validLabelChars = /^([a-zA-Z0-9-_]+)$/g - if (index === labels.length - 1) { - validLabelChars = /^([a-zA-Z0-9-]+)$/g - } +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} - const doubleDashCount = (label.match(/--/g) || []).length - const xnDashCount = (label.match(/xn--/g) || []).length - if (doubleDashCount !== xnDashCount) { - return false - } +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; - const isValid = ( - validLabelChars.test(label) && - label.length < 64 && - !label.startsWith('-') && - !label.endsWith('-') - ) + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} - return isValid - }) +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); - return isValid -} + var index = -1, + length = props.length; -},{"./data/sldMap.json":204,"punycode":445}],206:[function(require,module,exports){ -var hasExcape = /~/ -var escapeMatcher = /~[01]/g -function escapeReplacer (m) { - switch (m) { - case '~1': return '/' - case '~0': return '~' - } - throw new Error('Invalid tilde escape: ' + m) -} + while (++index < length) { + var key = props[index]; -function untilde (str) { - if (!hasExcape.test(str)) return str - return str.replace(escapeMatcher, escapeReplacer) -} + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; -function setter (obj, pointer, value) { - var part - var hasNextPart + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; +} - if (pointer[1] === 'constructor' && pointer[2] === 'prototype') return obj - if (pointer[1] === '__proto__') return obj +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; - for (var p = 1, len = pointer.length; p < len;) { - part = untilde(pointer[p++]) - hasNextPart = len > p + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; - if (typeof obj[part] === 'undefined') { - // support setting of /- - if (Array.isArray(obj) && part === '-') { - part = obj.length + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); } + } + return object; + }); +} - // support nested objects/array when setting values - if (hasNextPart) { - if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = [] - else obj[part] = {} +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; } } + return object; + }; +} - if (!hasNextPart) break - obj = obj[part] - } +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} - var oldValue = obj[part] - if (value === undefined) delete obj[part] - else obj[part] = value - return oldValue +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; } -function compilePointer (pointer) { - if (typeof pointer === 'string') { - pointer = pointer.split('/') - if (pointer[0] === '') return pointer - throw new Error('Invalid JSON pointer.') - } else if (Array.isArray(pointer)) { - return pointer +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } } + return result; +} - throw new Error('Invalid JSON pointer.') +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; } -function get (obj, pointer) { - if (typeof obj !== 'object') throw new Error('Invalid input object.') - pointer = compilePointer(pointer) - var len = pointer.length - if (len === 1) return obj +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; - for (var p = 1; p < len;) { - obj = obj[untilde(pointer[p++])] - if (len === p) return obj - if (typeof obj !== 'object') return undefined + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; } -function set (obj, pointer, value) { - if (typeof obj !== 'object') throw new Error('Invalid input object.') - pointer = compilePointer(pointer) - if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.') - return setter(obj, pointer, value) +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); } -function compile (pointer) { - var compiled = compilePointer(pointer) - return { - get: function (object) { - return get(object, compiled) - }, - set: function (object, value) { - return set(object, compiled, value) +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; +} + +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); } } + return result; } -exports.get = get -exports.set = set -exports.compile = compile - -},{}],207:[function(require,module,exports){ -/// keymage.js - Javascript keyboard bindings handling -/// http://github.com/piranha/keymage -/// -/// (c) 2012-2016 Alexander Solovyov under terms of ISC License +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} -(function(define, undefined) { -define(function() { - var VERSION = '1.1.3'; - var isOsx = typeof navigator !== 'undefined' && - ~navigator.userAgent.indexOf('Mac OS X'); +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); - // Defining all keys - var MODPROPS = ['shiftKey', 'ctrlKey', 'altKey', 'metaKey']; - var MODS = { - 'shift': 'shift', - 'ctrl': 'ctrl', 'control': 'ctrl', - 'alt': 'alt', 'option': 'alt', - 'win': 'meta', 'cmd': 'meta', 'super': 'meta', - 'meta': 'meta', - // default modifier for os x is cmd and for others is ctrl - 'defmod': isOsx ? 'meta' : 'ctrl' - }; - var MODORDER = ['shift', 'ctrl', 'alt', 'meta']; - var MODNUMS = [16, 17, 18, 91]; + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; +} - var KEYS = { - 'backspace': 8, - 'tab': 9, - 'enter': 13, 'return': 13, - 'pause': 19, - 'caps': 20, 'capslock': 20, - 'escape': 27, 'esc': 27, - 'space': 32, - 'pgup': 33, 'pageup': 33, - 'pgdown': 34, 'pagedown': 34, - 'end': 35, - 'home': 36, - 'ins': 45, 'insert': 45, - 'del': 46, 'delete': 46, +/** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } - 'left': 37, - 'up': 38, - 'right': 39, - 'down': 40, + if (key == '__proto__') { + return; + } - '*': 106, - '+': 107, 'plus': 107, - 'minus': 109, - ';': 186, - '=': 187, - ',': 188, - '-': 189, - '.': 190, - '/': 191, - '`': 192, - '[': 219, - '\\': 220, - ']': 221, - "'": 222 - }; + return object[key]; +} - var i; - // numpad - for (i = 0; i < 10; i++) { - KEYS['num-' + i] = i + 95; - } - // top row 0-9 - for (i = 0; i < 10; i++) { - KEYS[i.toString()] = i + 48; - } - // f1-f24 - for (i = 1; i < 25; i++) { - KEYS['f' + i] = i + 111; - } - // alphabet - for (i = 65; i < 91; i++) { - KEYS[String.fromCharCode(i).toLowerCase()] = i; - } +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = shortOut(baseSetToString); - // Reverse key codes - var KEYREV = {}; - for (var k in KEYS) { - var val = KEYS[k]; - if (!KEYREV[val] || KEYREV[val].length < k.length) { - KEYREV[val] = k; - } - } +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; - // ----------------------- - // Actual work is done here + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); - var currentScope = ''; - var allChains = {}; + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} - function parseKeyString(keystring) { - var bits = keystring.split(/-(?!$)/); - var button = bits[bits.length - 1]; - var key = {code: KEYS[button]}; +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} - if (!key.code) { - throw 'Unknown key "' + button + '" in keystring "' + - keystring + '"'; - } +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} - var mod; - for (var i = 0; i < bits.length - 1; i++) { - button = bits[i]; - mod = MODS[button]; - if (!mod) { - throw 'Unknown modifier "' + button + '" in keystring "' + - keystring + '"'; - } - key[mod] = true; - } +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; - return key; - } +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; - function stringifyKey(key) { - var s = ''; - for (var i = 0; i < MODORDER.length; i++) { - if (key[MODORDER[i]]) { - s += MODORDER[i] + '-'; - } - } - s += KEYREV[key.code]; - return s; - } +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} - function normalizeKeyChain(keychainString) { - var keychain = []; - var keys = keychainString.split(' '); +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} - for (var i = 0; i < keys.length; i++) { - var key = parseKeyString(keys[i]); - key = stringifyKey(key); - keychain.push(key); - } +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; - keychain.original = keychainString; - return keychain; - } +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} - function eventKeyString(e) { - var key = {code: e.keyCode}; - for (var i = 0; i < MODPROPS.length; i++) { - var mod = MODPROPS[i]; - if (e[mod]) { - key[mod.slice(0, mod.length - 3)] = true; - } - } - return stringifyKey(key); - } +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} - function getNestedChains(chains, scope) { - for (var i = 0; i < scope.length; i++) { - var bit = scope[i]; +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} - if (bit) { - chains = chains[bit]; - } +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} - if (!chains) { - break; - } - } - return chains; - } +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} - var sequence = []; - function dispatch(e) { - // Skip all modifiers - if (~MODNUMS.indexOf(e.keyCode)) { - return; - } +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - var seq = sequence.slice(); - seq.push(eventKeyString(e)); - var scope = currentScope.split('.'); - var matched, chains, key; +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return copyObject(value, keysIn(value)); +} - for (var i = scope.length; i >= 0; i--) { - chains = getNestedChains(allChains, scope.slice(0, i)); - if (!chains) { - continue; - } - matched = true; - for (var j = 0; j < seq.length; j++) { - key = seq[j]; - if (!chains[key]) { - matched = false; - break; - } - chains = chains[key]; - } +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +} - if (matched) { - break; - } - } +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); +}); - var definitionScope = scope.slice(0, i).join('.'); - var preventDefault = chains.preventDefault; +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} - // partial match, save the sequence - if (matched && !chains.handlers) { - sequence = seq; - if (preventDefault) { - e.preventDefault(); - } - return; - } +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} - if (matched) { - for (i = 0; i < chains.handlers.length; i++) { - var handler = chains.handlers[i]; - var options = handler._keymage; +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} - var res = handler.call(options.context, e, { - shortcut: options.original, - scope: currentScope, - definitionScope: definitionScope - }); +module.exports = merge; - if (res === false || preventDefault) { - e.preventDefault(); - } - } - } +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - // either matched or not, drop the sequence - sequence = []; - } +},{}],213:[function(require,module,exports){ +(function (global){(function (){ +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ - function getHandlers(scope, keychain, fn) { - var bits = scope.split('.'); - var chains = allChains; - bits = bits.concat(keychain); +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; - for (var i = 0, l = bits.length; i < l; i++) { - var bit = bits[i]; - if (!bit) continue; +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + symbolTag = '[object Symbol]'; - chains = chains[bit] || (chains[bit] = {}); - if (fn && fn._keymage.preventDefault) { - chains.preventDefault = true; - } +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - if (i === l - 1) { - var handlers = chains.handlers || (chains.handlers = []); - return handlers; - } - } - } +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - function assignKey(scope, keychain, fn) { - var handlers = getHandlers(scope, keychain, fn); - handlers.push(fn); - } +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); - function unassignKey(scope, keychain, fn) { - var handlers = getHandlers(scope, keychain); - var idx = handlers.indexOf(fn); - if (~idx) { - handlers.splice(idx, 1); - } - } +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} - function parsed(scope, keychain, fn, options) { - if (keychain === undefined && fn === undefined) { - return function(keychain, fn) { - return keymage(scope, keychain, fn); - }; - } +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array ? array.length : 0, + result = Array(length); - if (typeof keychain === 'function') { - options = fn; - fn = keychain; - keychain = scope; - scope = ''; - } + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} - var normalized = normalizeKeyChain(keychain); +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; - return [scope, normalized, fn, options]; - } + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} - // optional arguments: scope, options. - function keymage(scope, keychain, fn, options) { - var args = parsed(scope, keychain, fn, options); - fn = args[2]; - options = args[3]; - fn._keymage = options || {}; - fn._keymage.original = keychain; - assignKey.apply(null, args); +/** Used for built-in method references. */ +var objectProto = Object.prototype; - return function () { - unassignKey.apply(null, args); - }; - } +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; - keymage.unbind = function(scope, keychain, fn) { - var args = parsed(scope, keychain, fn); - unassignKey.apply(null, args); - }; +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; - keymage.parse = parseKeyString; - keymage.stringify = stringifyKey; +/** Built-in value references. */ +var Symbol = root.Symbol, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; - keymage.bindings = allChains; +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; - keymage.setScope = function(scope) { - currentScope = scope ? scope : ''; - }; +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; - keymage.getScope = function() { return currentScope; }; + predicate || (predicate = isFlattenable); + result || (result = []); - keymage.pushScope = function(scope) { - currentScope = (currentScope ? currentScope + '.' : '') + scope; - return currentScope; - }; + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} - keymage.popScope = function(scope) { - var i; +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property identifiers to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, props) { + object = Object(object); + return basePickBy(object, props, function(value, key) { + return key in object; + }); +} - if (!scope) { - i = currentScope.lastIndexOf('.'); - scope = currentScope.slice(i + 1); - currentScope = i == -1 ? '' : currentScope.slice(0, i); - return scope; - } +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} props The property identifiers to pick from. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, props, predicate) { + var index = -1, + length = props.length, + result = {}; - currentScope = currentScope.replace( - new RegExp('(^|\\.)' + scope + '(\\.|$).*'), ''); - return scope; - }; + while (++index < length) { + var key = props[index], + value = object[key]; - keymage.version = VERSION; + if (predicate(value, key)) { + result[key] = value; + } + } + return result; +} - window.addEventListener('keydown', dispatch, false); +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); - return keymage; -}); -})(typeof define !== 'undefined' ? define : function(factory) { - if (typeof module !== 'undefined') { - module.exports = factory(); - } else { - window.keymage = factory(); + while (++index < length) { + array[index] = args[start + index]; } -}); - -},{}],208:[function(require,module,exports){ -function isObject (o, allowArray) { - return o && 'object' === typeof o && (allowArray || !Array.isArray(o)) + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = array; + return apply(func, this, otherArgs); + }; } -function isBasic (b) { - return 'string' === typeof b || 'number' === typeof b +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); } -function get (obj, path, dft) { - if(!isObject(obj, true)) return dft - if(isBasic(path)) return obj[path] - for(var i = 0; i < path.length; i++) { - if(null == (obj = obj[path[i]])) return dft +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; } - return obj + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } -function isNonNegativeInteger (i) { - return Number.isInteger(i) && i >= 0 +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); } -function set (obj, path, value) { - if(!obj) throw new Error('libnested.set: first arg must be an object') - if(isBasic(path)) return obj[path] = value - for(var i = 0; i < path.length; i++) - if(i === path.length - 1) - obj[path[i]] = value - else if(null == obj[path[i]]) - obj = (obj[path[i]] = isNonNegativeInteger(path[i+1]) ? [] : {}) - else - obj = obj[path[i]] - return value +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); } -function each (obj, iter, includeArrays, path) { - path = path || [] - //handle array separately, so that arrays can have integer keys - if(Array.isArray(obj)) { - if(!includeArrays) return false - for(var k = 0; k < obj.length; k++) { - //loop content is duplicated, so that return works - var v = obj[k] - if(isObject(v, includeArrays)) { - if(false === each(v, iter, includeArrays, path.concat(k))) - return false - } else { - if(false === iter(v, path.concat(k))) return false - } - } - } - else { - for(var k in obj) { - //loop content is duplicated, so that return works - var v = obj[k] - if(isObject(v, includeArrays)) { - if(false === each(v, iter, includeArrays, path.concat(k))) - return false - } else { - if(false === iter(v, path.concat(k))) return false - } - } - } - return true +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); } -function map (obj, iter, out, includeArrays) { - var out = out || Array.isArray(obj) ? [] : {} - each(obj, function (val, path) { - set(out, path, iter(val, path)) - }, includeArrays) - return out +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; } -function paths (obj, incluedArrays) { - var out = [] - each(obj, function (_, path) { - out.push(path) - }, incluedArrays) - return out +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } -function id (e) { return e } +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} -//note, cyclic objects are not supported. -//will cause an stack overflow. -function clone (obj) { - if(!isObject(obj, true)) return obj - var _obj - _obj = Array.isArray(obj) ? [] : {} - for(var k in obj) _obj[k] = clone(obj[k]) - return _obj +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; } -exports.get = get -exports.set = set -exports.each = each -exports.map = map -exports.paths = paths -exports.clone = clone -exports.copy = clone +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} -},{}],209:[function(require,module,exports){ -!function(e){function r(e,r){"use strict";var t,a=r.ready.then((function(){function a(){if(0!==t._sodium_init())throw new Error("libsodium was not correctly initialized.");for(var r=["crypto_aead_chacha20poly1305_decrypt","crypto_aead_chacha20poly1305_decrypt_detached","crypto_aead_chacha20poly1305_encrypt","crypto_aead_chacha20poly1305_encrypt_detached","crypto_aead_chacha20poly1305_ietf_decrypt","crypto_aead_chacha20poly1305_ietf_decrypt_detached","crypto_aead_chacha20poly1305_ietf_encrypt","crypto_aead_chacha20poly1305_ietf_encrypt_detached","crypto_aead_chacha20poly1305_ietf_keygen","crypto_aead_chacha20poly1305_keygen","crypto_aead_xchacha20poly1305_ietf_decrypt","crypto_aead_xchacha20poly1305_ietf_decrypt_detached","crypto_aead_xchacha20poly1305_ietf_encrypt","crypto_aead_xchacha20poly1305_ietf_encrypt_detached","crypto_aead_xchacha20poly1305_ietf_keygen","crypto_auth","crypto_auth_hmacsha256","crypto_auth_hmacsha256_keygen","crypto_auth_hmacsha256_verify","crypto_auth_hmacsha512","crypto_auth_hmacsha512_keygen","crypto_auth_hmacsha512_verify","crypto_auth_keygen","crypto_auth_verify","crypto_box_beforenm","crypto_box_curve25519xchacha20poly1305_keypair","crypto_box_curve25519xchacha20poly1305_seal","crypto_box_curve25519xchacha20poly1305_seal_open","crypto_box_detached","crypto_box_easy","crypto_box_easy_afternm","crypto_box_keypair","crypto_box_open_detached","crypto_box_open_easy","crypto_box_open_easy_afternm","crypto_box_seal","crypto_box_seal_open","crypto_box_seed_keypair","crypto_core_ed25519_add","crypto_core_ed25519_from_hash","crypto_core_ed25519_from_uniform","crypto_core_ed25519_is_valid_point","crypto_core_ed25519_random","crypto_core_ed25519_scalar_add","crypto_core_ed25519_scalar_complement","crypto_core_ed25519_scalar_invert","crypto_core_ed25519_scalar_mul","crypto_core_ed25519_scalar_negate","crypto_core_ed25519_scalar_random","crypto_core_ed25519_scalar_reduce","crypto_core_ed25519_scalar_sub","crypto_core_ed25519_sub","crypto_core_ristretto255_add","crypto_core_ristretto255_from_hash","crypto_core_ristretto255_is_valid_point","crypto_core_ristretto255_random","crypto_core_ristretto255_scalar_add","crypto_core_ristretto255_scalar_complement","crypto_core_ristretto255_scalar_invert","crypto_core_ristretto255_scalar_mul","crypto_core_ristretto255_scalar_negate","crypto_core_ristretto255_scalar_random","crypto_core_ristretto255_scalar_reduce","crypto_core_ristretto255_scalar_sub","crypto_core_ristretto255_sub","crypto_generichash","crypto_generichash_blake2b_salt_personal","crypto_generichash_final","crypto_generichash_init","crypto_generichash_keygen","crypto_generichash_update","crypto_hash","crypto_hash_sha256","crypto_hash_sha256_final","crypto_hash_sha256_init","crypto_hash_sha256_update","crypto_hash_sha512","crypto_hash_sha512_final","crypto_hash_sha512_init","crypto_hash_sha512_update","crypto_kdf_derive_from_key","crypto_kdf_keygen","crypto_kx_client_session_keys","crypto_kx_keypair","crypto_kx_seed_keypair","crypto_kx_server_session_keys","crypto_onetimeauth","crypto_onetimeauth_final","crypto_onetimeauth_init","crypto_onetimeauth_keygen","crypto_onetimeauth_update","crypto_onetimeauth_verify","crypto_pwhash","crypto_pwhash_scryptsalsa208sha256","crypto_pwhash_scryptsalsa208sha256_ll","crypto_pwhash_scryptsalsa208sha256_str","crypto_pwhash_scryptsalsa208sha256_str_verify","crypto_pwhash_str","crypto_pwhash_str_needs_rehash","crypto_pwhash_str_verify","crypto_scalarmult","crypto_scalarmult_base","crypto_scalarmult_ed25519","crypto_scalarmult_ed25519_base","crypto_scalarmult_ed25519_base_noclamp","crypto_scalarmult_ed25519_noclamp","crypto_scalarmult_ristretto255","crypto_scalarmult_ristretto255_base","crypto_secretbox_detached","crypto_secretbox_easy","crypto_secretbox_keygen","crypto_secretbox_open_detached","crypto_secretbox_open_easy","crypto_secretstream_xchacha20poly1305_init_pull","crypto_secretstream_xchacha20poly1305_init_push","crypto_secretstream_xchacha20poly1305_keygen","crypto_secretstream_xchacha20poly1305_pull","crypto_secretstream_xchacha20poly1305_push","crypto_secretstream_xchacha20poly1305_rekey","crypto_shorthash","crypto_shorthash_keygen","crypto_shorthash_siphashx24","crypto_sign","crypto_sign_detached","crypto_sign_ed25519_pk_to_curve25519","crypto_sign_ed25519_sk_to_curve25519","crypto_sign_ed25519_sk_to_pk","crypto_sign_ed25519_sk_to_seed","crypto_sign_final_create","crypto_sign_final_verify","crypto_sign_init","crypto_sign_keypair","crypto_sign_open","crypto_sign_seed_keypair","crypto_sign_update","crypto_sign_verify_detached","crypto_stream_chacha20","crypto_stream_chacha20_ietf_xor","crypto_stream_chacha20_ietf_xor_ic","crypto_stream_chacha20_keygen","crypto_stream_chacha20_xor","crypto_stream_chacha20_xor_ic","crypto_stream_keygen","crypto_stream_xchacha20_keygen","crypto_stream_xchacha20_xor","crypto_stream_xchacha20_xor_ic","randombytes_buf","randombytes_buf_deterministic","randombytes_close","randombytes_random","randombytes_set_implementation","randombytes_stir","randombytes_uniform","sodium_version_string"],a=[E,x,k,S,T,w,Y,B,A,K,M,I,N,L,U,O,C,R,P,G,X,D,F,V,H,q,j,z,W,J,Q,Z,$,ee,re,te,ae,_e,se,ne,ce,oe,he,pe,ye,ie,le,ue,de,ve,ge,be,fe,me,Ee,xe,ke,Se,Te,we,Ye,Be,Ae,Ke,Me,Ie,Ne,Le,Ue,Oe,Ce,Re,Pe,Ge,Xe,De,Fe,Ve,He,qe,je,ze,We,Je,Qe,Ze,$e,er,rr,tr,ar,_r,sr,nr,cr,or,hr,pr,yr,ir,lr,ur,dr,vr,gr,br,fr,mr,Er,xr,kr,Sr,Tr,wr,Yr,Br,Ar,Kr,Mr,Ir,Nr,Lr,Ur,Or,Cr,Rr,Pr,Gr,Xr,Dr,Fr,Vr,Hr,qr,jr,zr,Wr,Jr,Qr,Zr,$r,et,rt,tt,at,_t,st,nt,ct,ot,ht,pt,yt,it],_=0;_=240?(p=4,o=!0):y>=224?(p=3,o=!0):y>=192?(p=2,o=!0):y<128&&(p=1,o=!0)}while(!o);for(var i=p-(c.length-h),l=0;l>8&-39)<<8|87+(r=e[s]>>>4)+(r-10>>8&-39),_+=String.fromCharCode(255&a)+String.fromCharCode(a>>>8);return _}var c={ORIGINAL:1,ORIGINAL_NO_PADDING:3,URLSAFE:5,URLSAFE_NO_PADDING:7};function o(e){if(null==e)return c.URLSAFE_NO_PADDING;if(e!==c.ORIGINAL&&e!==c.ORIGINAL_NO_PADDING&&e!==c.URLSAFE&&e!=c.URLSAFE_NO_PADDING)throw new Error("unsupported base64 variant");return e}function h(e,r){r=o(r),e=m(_,e,"input");var a,_=[],n=0|Math.floor(e.length/3),c=e.length-3*n,h=4*n+(0!==c?0==(2&r)?4:2+(c>>>1):0),p=new l(h+1),y=u(e);return _.push(y),_.push(p.address),0===t._sodium_bin2base64(p.address,p.length,y,e.length,r)&&g(_,"conversion failed"),p.length=h,a=s(p.to_Uint8Array()),v(_),a}function p(e,r){var t=r||"uint8array";if(!y(t))throw new Error(t+" output format is not available");if(e instanceof l){if("uint8array"===t)return e.to_Uint8Array();if("text"===t)return s(e.to_Uint8Array());if("hex"===t)return n(e.to_Uint8Array());if("base64"===t)return h(e.to_Uint8Array(),c.URLSAFE_NO_PADDING);throw new Error('What is output format "'+t+'"?')}if("object"==typeof e){for(var a=Object.keys(e),_={},o=0;o>>24>>>8,o,y);var x=p(g,n);return v(c),x}function ze(e){var r=[];i(e);var a=new l(0|t._crypto_kdf_keybytes()),_=a.address;r.push(_),t._crypto_kdf_keygen(_);var s=p(a,e);return v(r),s}function We(e,r,a,_){var s=[];i(_),e=m(s,e,"clientPublicKey");var n,c=0|t._crypto_kx_publickeybytes();e.length!==c&&b(s,"invalid clientPublicKey length"),n=u(e),s.push(n),r=m(s,r,"clientSecretKey");var o,h=0|t._crypto_kx_secretkeybytes();r.length!==h&&b(s,"invalid clientSecretKey length"),o=u(r),s.push(o),a=m(s,a,"serverPublicKey");var y,d=0|t._crypto_kx_publickeybytes();a.length!==d&&b(s,"invalid serverPublicKey length"),y=u(a),s.push(y);var f=new l(0|t._crypto_kx_sessionkeybytes()),E=f.address;s.push(E);var x=new l(0|t._crypto_kx_sessionkeybytes()),k=x.address;if(s.push(k),0==(0|t._crypto_kx_client_session_keys(E,k,n,o,y))){var S=p({sharedRx:f,sharedTx:x},_);return v(s),S}g(s,"invalid usage")}function Je(e){var r=[];i(e);var a=new l(0|t._crypto_kx_publickeybytes()),_=a.address;r.push(_);var s=new l(0|t._crypto_kx_secretkeybytes()),n=s.address;if(r.push(n),0==(0|t._crypto_kx_keypair(_,n))){var c={publicKey:p(a,e),privateKey:p(s,e),keyType:"x25519"};return v(r),c}g(r,"internal error")}function Qe(e,r){var a=[];i(r),e=m(a,e,"seed");var _,s=0|t._crypto_kx_seedbytes();e.length!==s&&b(a,"invalid seed length"),_=u(e),a.push(_);var n=new l(0|t._crypto_kx_publickeybytes()),c=n.address;a.push(c);var o=new l(0|t._crypto_kx_secretkeybytes()),h=o.address;if(a.push(h),0==(0|t._crypto_kx_seed_keypair(c,h,_))){var y={publicKey:p(n,r),privateKey:p(o,r),keyType:"x25519"};return v(a),y}g(a,"internal error")}function Ze(e,r,a,_){var s=[];i(_),e=m(s,e,"serverPublicKey");var n,c=0|t._crypto_kx_publickeybytes();e.length!==c&&b(s,"invalid serverPublicKey length"),n=u(e),s.push(n),r=m(s,r,"serverSecretKey");var o,h=0|t._crypto_kx_secretkeybytes();r.length!==h&&b(s,"invalid serverSecretKey length"),o=u(r),s.push(o),a=m(s,a,"clientPublicKey");var y,d=0|t._crypto_kx_publickeybytes();a.length!==d&&b(s,"invalid clientPublicKey length"),y=u(a),s.push(y);var f=new l(0|t._crypto_kx_sessionkeybytes()),E=f.address;s.push(E);var x=new l(0|t._crypto_kx_sessionkeybytes()),k=x.address;if(s.push(k),0==(0|t._crypto_kx_server_session_keys(E,k,n,o,y))){var S=p({sharedRx:f,sharedTx:x},_);return v(s),S}g(s,"invalid usage")}function $e(e,r,a){var _=[];i(a);var s=u(e=m(_,e,"message")),n=e.length;_.push(s),r=m(_,r,"key");var c,o=0|t._crypto_onetimeauth_keybytes();r.length!==o&&b(_,"invalid key length"),c=u(r),_.push(c);var h=new l(0|t._crypto_onetimeauth_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_onetimeauth(y,s,n,0,c))){var d=p(h,a);return v(_),d}g(_,"invalid usage")}function er(e,r){var a=[];i(r),f(a,e,"state_address");var _=new l(0|t._crypto_onetimeauth_bytes()),s=_.address;if(a.push(s),0==(0|t._crypto_onetimeauth_final(e,s))){var n=(t._free(e),p(_,r));return v(a),n}g(a,"invalid usage")}function rr(e,r){var a=[];i(r);var _=null;null!=e&&(_=u(e=m(a,e,"key")),e.length,a.push(_));var s=new l(144).address;if(0==(0|t._crypto_onetimeauth_init(s,_))){var n=s;return v(a),n}g(a,"invalid usage")}function tr(e){var r=[];i(e);var a=new l(0|t._crypto_onetimeauth_keybytes()),_=a.address;r.push(_),t._crypto_onetimeauth_keygen(_);var s=p(a,e);return v(r),s}function ar(e,r,a){var _=[];i(a),f(_,e,"state_address");var s=u(r=m(_,r,"message_chunk")),n=r.length;_.push(s),0!=(0|t._crypto_onetimeauth_update(e,s,n))&&g(_,"invalid usage"),v(_)}function _r(e,r,a){var _=[];e=m(_,e,"hash");var s,n=0|t._crypto_onetimeauth_bytes();e.length!==n&&b(_,"invalid hash length"),s=u(e),_.push(s);var c=u(r=m(_,r,"message")),o=r.length;_.push(c),a=m(_,a,"key");var h,p=0|t._crypto_onetimeauth_keybytes();a.length!==p&&b(_,"invalid key length"),h=u(a),_.push(h);var y=0==(0|t._crypto_onetimeauth_verify(s,c,o,0,h));return v(_),y}function sr(e,r,a,_,s,n,c){var o=[];i(c),f(o,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&b(o,"keyLength must be an unsigned integer");var h=u(r=m(o,r,"password")),y=r.length;o.push(h),a=m(o,a,"salt");var d,E=0|t._crypto_pwhash_saltbytes();a.length!==E&&b(o,"invalid salt length"),d=u(a),o.push(d),f(o,_,"opsLimit"),("number"!=typeof _||(0|_)!==_||_<0)&&b(o,"opsLimit must be an unsigned integer"),f(o,s,"memLimit"),("number"!=typeof s||(0|s)!==s||s<0)&&b(o,"memLimit must be an unsigned integer"),f(o,n,"algorithm"),("number"!=typeof n||(0|n)!==n||n<0)&&b(o,"algorithm must be an unsigned integer");var x=new l(0|e),k=x.address;if(o.push(k),0==(0|t._crypto_pwhash(k,e,0,h,y,0,d,_,0,s,n))){var S=p(x,c);return v(o),S}g(o,"invalid usage")}function nr(e,r,a,_,s,n){var c=[];i(n),f(c,e,"keyLength"),("number"!=typeof e||(0|e)!==e||e<0)&&b(c,"keyLength must be an unsigned integer");var o=u(r=m(c,r,"password")),h=r.length;c.push(o),a=m(c,a,"salt");var y,d=0|t._crypto_pwhash_scryptsalsa208sha256_saltbytes();a.length!==d&&b(c,"invalid salt length"),y=u(a),c.push(y),f(c,_,"opsLimit"),("number"!=typeof _||(0|_)!==_||_<0)&&b(c,"opsLimit must be an unsigned integer"),f(c,s,"memLimit"),("number"!=typeof s||(0|s)!==s||s<0)&&b(c,"memLimit must be an unsigned integer");var E=new l(0|e),x=E.address;if(c.push(x),0==(0|t._crypto_pwhash_scryptsalsa208sha256(x,e,0,o,h,0,y,_,0,s))){var k=p(E,n);return v(c),k}g(c,"invalid usage")}function cr(e,r,a,_,s,n,c){var o=[];i(c);var h=u(e=m(o,e,"password")),y=e.length;o.push(h);var d=u(r=m(o,r,"salt")),E=r.length;o.push(d),f(o,a,"opsLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(o,"opsLimit must be an unsigned integer"),f(o,_,"r"),("number"!=typeof _||(0|_)!==_||_<0)&&b(o,"r must be an unsigned integer"),f(o,s,"p"),("number"!=typeof s||(0|s)!==s||s<0)&&b(o,"p must be an unsigned integer"),f(o,n,"keyLength"),("number"!=typeof n||(0|n)!==n||n<0)&&b(o,"keyLength must be an unsigned integer");var x=new l(0|n),k=x.address;if(o.push(k),0==(0|t._crypto_pwhash_scryptsalsa208sha256_ll(h,y,d,E,a,0,_,s,k,n))){var S=p(x,c);return v(o),S}g(o,"invalid usage")}function or(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"password")),c=e.length;s.push(n),f(s,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(s,"opsLimit must be an unsigned integer"),f(s,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(s,"memLimit must be an unsigned integer");var o=new l(0|t._crypto_pwhash_scryptsalsa208sha256_strbytes()).address;if(s.push(o),0==(0|t._crypto_pwhash_scryptsalsa208sha256_str(o,n,c,0,r,0,a))){var h=t.UTF8ToString(o);return v(s),h}g(s,"invalid usage")}function hr(e,r,a){var s=[];i(a),"string"!=typeof e&&b(s,"hashed_password must be a string"),e=_(e+"\0"),null!=c&&e.length-1!==c&&b(s,"invalid hashed_password length");var n=u(e),c=e.length-1;s.push(n);var o=u(r=m(s,r,"password")),h=r.length;s.push(o);var p=0==(0|t._crypto_pwhash_scryptsalsa208sha256_str_verify(n,o,h,0));return v(s),p}function pr(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"password")),c=e.length;s.push(n),f(s,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(s,"opsLimit must be an unsigned integer"),f(s,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(s,"memLimit must be an unsigned integer");var o=new l(0|t._crypto_pwhash_strbytes()).address;if(s.push(o),0==(0|t._crypto_pwhash_str(o,n,c,0,r,0,a))){var h=t.UTF8ToString(o);return v(s),h}g(s,"invalid usage")}function yr(e,r,a,s){var n=[];i(s),"string"!=typeof e&&b(n,"hashed_password must be a string"),e=_(e+"\0"),null!=o&&e.length-1!==o&&b(n,"invalid hashed_password length");var c=u(e),o=e.length-1;n.push(c),f(n,r,"opsLimit"),("number"!=typeof r||(0|r)!==r||r<0)&&b(n,"opsLimit must be an unsigned integer"),f(n,a,"memLimit"),("number"!=typeof a||(0|a)!==a||a<0)&&b(n,"memLimit must be an unsigned integer");var h=0!=(0|t._crypto_pwhash_str_needs_rehash(c,r,0,a));return v(n),h}function ir(e,r,a){var s=[];i(a),"string"!=typeof e&&b(s,"hashed_password must be a string"),e=_(e+"\0"),null!=c&&e.length-1!==c&&b(s,"invalid hashed_password length");var n=u(e),c=e.length-1;s.push(n);var o=u(r=m(s,r,"password")),h=r.length;s.push(o);var p=0==(0|t._crypto_pwhash_str_verify(n,o,h,0));return v(s),p}function lr(e,r,a){var _=[];i(a),e=m(_,e,"privateKey");var s,n=0|t._crypto_scalarmult_scalarbytes();e.length!==n&&b(_,"invalid privateKey length"),s=u(e),_.push(s),r=m(_,r,"publicKey");var c,o=0|t._crypto_scalarmult_bytes();r.length!==o&&b(_,"invalid publicKey length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult(y,s,c))){var d=p(h,a);return v(_),d}g(_,"weak public key")}function ur(e,r){var a=[];i(r),e=m(a,e,"privateKey");var _,s=0|t._crypto_scalarmult_scalarbytes();e.length!==s&&b(a,"invalid privateKey length"),_=u(e),a.push(_);var n=new l(0|t._crypto_scalarmult_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_base(c,_))){var o=p(n,r);return v(a),o}g(a,"unknown error")}function dr(e,r,a){var _=[];i(a),e=m(_,e,"n");var s,n=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==n&&b(_,"invalid n length"),s=u(e),_.push(s),r=m(_,r,"p");var c,o=0|t._crypto_scalarmult_ed25519_bytes();r.length!==o&&b(_,"invalid p length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_ed25519_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult_ed25519(y,s,c))){var d=p(h,a);return v(_),d}g(_,"invalid point or scalar is 0")}function vr(e,r){var a=[];i(r),e=m(a,e,"scalar");var _,s=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==s&&b(a,"invalid scalar length"),_=u(e),a.push(_);var n=new l(0|t._crypto_scalarmult_ed25519_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_ed25519_base(c,_))){var o=p(n,r);return v(a),o}g(a,"scalar is 0")}function gr(e,r){var a=[];i(r),e=m(a,e,"scalar");var _,s=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==s&&b(a,"invalid scalar length"),_=u(e),a.push(_);var n=new l(0|t._crypto_scalarmult_ed25519_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_ed25519_base_noclamp(c,_))){var o=p(n,r);return v(a),o}g(a,"scalar is 0")}function br(e,r,a){var _=[];i(a),e=m(_,e,"n");var s,n=0|t._crypto_scalarmult_ed25519_scalarbytes();e.length!==n&&b(_,"invalid n length"),s=u(e),_.push(s),r=m(_,r,"p");var c,o=0|t._crypto_scalarmult_ed25519_bytes();r.length!==o&&b(_,"invalid p length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_ed25519_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult_ed25519_noclamp(y,s,c))){var d=p(h,a);return v(_),d}g(_,"invalid point or scalar is 0")}function fr(e,r,a){var _=[];i(a),e=m(_,e,"scalar");var s,n=0|t._crypto_scalarmult_ristretto255_scalarbytes();e.length!==n&&b(_,"invalid scalar length"),s=u(e),_.push(s),r=m(_,r,"element");var c,o=0|t._crypto_scalarmult_ristretto255_bytes();r.length!==o&&b(_,"invalid element length"),c=u(r),_.push(c);var h=new l(0|t._crypto_scalarmult_ristretto255_bytes()),y=h.address;if(_.push(y),0==(0|t._crypto_scalarmult_ristretto255(y,s,c))){var d=p(h,a);return v(_),d}g(_,"result is identity element")}function mr(e,r){var a=[];i(r),e=m(a,e,"scalar");var _,s=0|t._crypto_core_ristretto255_scalarbytes();e.length!==s&&b(a,"invalid scalar length"),_=u(e),a.push(_);var n=new l(0|t._crypto_core_ristretto255_bytes()),c=n.address;if(a.push(c),0==(0|t._crypto_scalarmult_ristretto255_base(c,_))){var o=p(n,r);return v(a),o}g(a,"scalar is 0")}function Er(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"message")),c=e.length;s.push(n),r=m(s,r,"nonce");var o,h=0|t._crypto_secretbox_noncebytes();r.length!==h&&b(s,"invalid nonce length"),o=u(r),s.push(o),a=m(s,a,"key");var y,d=0|t._crypto_secretbox_keybytes();a.length!==d&&b(s,"invalid key length"),y=u(a),s.push(y);var f=new l(0|c),E=f.address;s.push(E);var x=new l(0|t._crypto_secretbox_macbytes()),k=x.address;if(s.push(k),0==(0|t._crypto_secretbox_detached(E,k,n,c,0,o,y))){var S=p({mac:x,cipher:f},_);return v(s),S}g(s,"invalid usage")}function xr(e,r,a,_){var s=[];i(_);var n=u(e=m(s,e,"message")),c=e.length;s.push(n),r=m(s,r,"nonce");var o,h=0|t._crypto_secretbox_noncebytes();r.length!==h&&b(s,"invalid nonce length"),o=u(r),s.push(o),a=m(s,a,"key");var y,d=0|t._crypto_secretbox_keybytes();a.length!==d&&b(s,"invalid key length"),y=u(a),s.push(y);var f=new l(c+t._crypto_secretbox_macbytes()|0),E=f.address;if(s.push(E),0==(0|t._crypto_secretbox_easy(E,n,c,0,o,y))){var x=p(f,_);return v(s),x}g(s,"invalid usage")}function kr(e){var r=[];i(e);var a=new l(0|t._crypto_secretbox_keybytes()),_=a.address;r.push(_),t._crypto_secretbox_keygen(_);var s=p(a,e);return v(r),s}function Sr(e,r,a,_,s){var n=[];i(s);var c=u(e=m(n,e,"ciphertext")),o=e.length;n.push(c),r=m(n,r,"mac");var h,y=0|t._crypto_secretbox_macbytes();r.length!==y&&b(n,"invalid mac length"),h=u(r),n.push(h),a=m(n,a,"nonce");var d,f=0|t._crypto_secretbox_noncebytes();a.length!==f&&b(n,"invalid nonce length"),d=u(a),n.push(d),_=m(n,_,"key");var E,x=0|t._crypto_secretbox_keybytes();_.length!==x&&b(n,"invalid key length"),E=u(_),n.push(E);var k=new l(0|o),S=k.address;if(n.push(S),0==(0|t._crypto_secretbox_open_detached(S,c,h,o,0,d,E))){var T=p(k,s);return v(n),T}g(n,"wrong secret key for the given ciphertext")}function Tr(e,r,a,_){var s=[];i(_),e=m(s,e,"ciphertext");var n,c=t._crypto_secretbox_macbytes(),o=e.length;o>>0;return v([]),r}function ht(e,r){var a=[];i(r);for(var _=t._malloc(24),s=0;s<6;s++)t.setValue(_+4*s,t.Runtime.addFunction(e[["implementation_name","random","stir","uniform","buf","close"][s]]),"i32");0!=(0|t._randombytes_set_implementation(_))&&g(a,"unsupported implementation"),v(a)}function pt(e){i(e),t._randombytes_stir()}function yt(e,r){var a=[];i(r),f(a,e,"upper_bound"),("number"!=typeof e||(0|e)!==e||e<0)&&b(a,"upper_bound must be an unsigned integer");var _=t._randombytes_uniform(e)>>>0;return v(a),_}function it(){var e=t._sodium_version_string(),r=t.UTF8ToString(e);return v([]),r}return l.prototype.to_Uint8Array=function(){var e=new Uint8Array(this.length);return e.set(t.HEAPU8.subarray(this.address,this.address+this.length)),e},e.add=function(e,r){if(!(e instanceof Uint8Array&&r instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can added");var t=e.length,a=0,_=0;if(r.length!=e.length)throw new TypeError("Arguments must have the same length");for(_=0;_>=8,a+=e[_]+r[_],e[_]=255&a},e.base64_variants=c,e.compare=function(e,r){if(!(e instanceof Uint8Array&&r instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be compared");if(e.length!==r.length)throw new TypeError("Only instances of identical length can be compared");for(var t=0,a=1,_=e.length;_-- >0;)t|=r[_]-e[_]>>8&a,a&=(r[_]^e[_])-1>>8;return t+t+a-1},e.from_base64=function(e,r){r=o(r);var a,_=[],s=new l(3*(e=m(_,e,"input")).length/4),n=u(e),c=d(4),h=d(4);return _.push(n),_.push(s.address),_.push(s.result_bin_len_p),_.push(s.b64_end_p),0!==t._sodium_base642bin(s.address,s.length,n,e.length,0,c,h,r)&&g(_,"invalid input"),t.getValue(h,"i32")-n!==e.length&&g(_,"incomplete input"),s.length=t.getValue(c,"i32"),a=s.to_Uint8Array(),v(_),a},e.from_hex=function(e){var r,a=[],_=new l((e=m(a,e,"input")).length/2),s=u(e),n=d(4);return a.push(s),a.push(_.address),a.push(_.hex_end_p),0!==t._sodium_hex2bin(_.address,_.length,s,e.length,0,0,n)&&g(a,"invalid input"),t.getValue(n,"i32")-s!==e.length&&g(a,"incomplete input"),r=_.to_Uint8Array(),v(a),r},e.from_string=_,e.increment=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be incremented");for(var r=256,t=0,a=e.length;t>=8,r+=e[t],e[t]=255&r},e.is_zero=function(e){if(!(e instanceof Uint8Array))throw new TypeError("Only Uint8Array instances can be checked");for(var r=0,t=0,a=e.length;t 0");var a,_=[],s=d(4),n=1,c=0,o=0|e.length,h=new l(o+r);_.push(s),_.push(h.address);for(var p=h.address,y=h.address+o+r;p>>48|o>>>32|o>>>16|o))-1>>16);return 0!==t._sodium_pad(s,h.address,e.length,r,h.length)&&g(_,"internal error"),h.length=t.getValue(s,"i32"),a=h.to_Uint8Array(),v(_),a},e.unpad=function(e,r){if(!(e instanceof Uint8Array))throw new TypeError("buffer must be a Uint8Array");if((r|=0)<=0)throw new Error("block size must be > 0");var a=[],_=u(e),s=d(4);return a.push(_),a.push(s),0!==t._sodium_unpad(s,_,e.length,r)&&g(a,"unsupported/invalid padding"),e=(e=new Uint8Array(e)).subarray(0,t.getValue(s,"i32")),v(a),e},e.ready=a,e.symbols=function(){return Object.keys(e).sort()},e.to_base64=h,e.to_hex=n,e.to_string=s,e}var t="object"==typeof e.sodium&&"function"==typeof e.sodium.onload?e.sodium.onload:null;"function"==typeof define&&define.amd?define(["exports","libsodium"],r):"object"==typeof exports&&"string"!=typeof exports.nodeName?r(exports,require("libsodium")):e.sodium=r(e.commonJsStrict={},e.libsodium),t&&e.sodium.ready.then((function(){t(e.sodium)}))}(this); +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [props] The property identifiers to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = baseRest(function(object, props) { + return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey)); +}); -},{"libsodium":210}],210:[function(require,module,exports){ -(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__dirname){(function (){ -!function(A){function I(A){"use strict";var I;void 0===(I=A)&&(I={});var g=I;"object"!=typeof g.sodium&&("object"==typeof global?g=global:"object"==typeof window&&(g=window)),"object"==typeof g.sodium&&"number"==typeof g.sodium.totalMemory&&(I.TOTAL_MEMORY=g.sodium.totalMemory);var B=I;return I.ready=new Promise((function(A,I){(Q=B).onAbort=I,Q.print=function(A){},Q.printErr=function(A){},Q.onRuntimeInitialized=function(){try{Q._crypto_secretbox_keybytes(),A()}catch(A){I(A)}},Q.useBackupModule=function(){return new Promise((function(A,I){(Q={}).onAbort=I,Q.onRuntimeInitialized=function(){Object.keys(B).forEach((function(A){"getRandomValue"!==A&&delete B[A]})),Object.keys(Q).forEach((function(A){B[A]=Q[A]})),A()};var g,Q=void 0!==Q?Q:{},C={};for(g in Q)Q.hasOwnProperty(g)&&(C[g]=Q[g]);var E=[],i=!1,n=!1,a=!1,r=!1;i="object"==typeof window,n="function"==typeof importScripts,a="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,r=!i&&!a&&!n;var o,e,t,f,c,y="";function s(A){return Q.locateFile?Q.locateFile(A,y):y+A}a?(y=n?require("path").dirname(y)+"/":__dirname+"/",o=function(A,I){var g=bA(A);return g?I?g:g.toString():(f||(f=require("fs")),c||(c=require("path")),A=c.normalize(A),f.readFileSync(A,I?null:"utf8"))},t=function(A){var I=o(A,!0);return I.buffer||(I=new Uint8Array(I)),G(I.buffer),I},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),E=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Q),Q.inspect=function(){return"[Emscripten Module object]"}):r?("undefined"!=typeof read&&(o=function(A){var I=bA(A);return I?_A(I):read(A)}),t=function(A){var I;return(I=bA(A))?I:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(G("object"==typeof(I=read(A,"binary"))),I)},"undefined"!=typeof scriptArgs?E=scriptArgs:void 0!==arguments&&(E=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(i||n)&&(n?y=self.location.href:"undefined"!=typeof document&&document.currentScript&&(y=document.currentScript.src),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",o=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText}catch(I){var g=bA(A);if(g)return _A(g);throw I}},n&&(t=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}catch(I){var g=bA(A);if(g)return g;throw I}}),e=function(A,I,g){var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=function(){if(200==B.status||0==B.status&&B.response)I(B.response);else{var Q=bA(A);Q?I(Q.buffer):g()}},B.onerror=g,B.send(null)}),Q.print;var w,h=Q.printErr||void 0;for(g in C)C.hasOwnProperty(g)&&(Q[g]=C[g]);C=null,Q.arguments&&(E=Q.arguments),Q.thisProgram&&Q.thisProgram,Q.quit&&Q.quit,Q.wasmBinary&&(w=Q.wasmBinary),Q.noExitRuntime&&Q.noExitRuntime;var D,u={Memory:function(A){this.buffer=new ArrayBuffer(65536*A.initial)},Module:function(A){},Instance:function(A,I){this.exports=function(A){for(var I,g=new Uint8Array(123),B=25;B>=0;--B)g[48+B]=52+B,g[65+B]=B,g[97+B]=26+B;function Q(A,I,B){for(var Q,C,E=0,i=I,n=B.length,a=I+(3*n>>2)-("="==B[n-2])-("="==B[n-1]);E>4,i>2),i>2]=n[0|K]|n[K+1|0]<<8|n[K+2|0]<<16|n[K+3|0]<<24,i[V+4>>2]=QA,16!=(0|(Z=Z+1|0)););for(g=X(W,A,64),K=i[(I=g)>>2],Z=i[I+4>>2],a=K,K=(QA=i[I+32>>2])+(W=i[I+128>>2])|0,I=($=i[I+36>>2])+i[I+132>>2]|0,I=K>>>0>>0?I+1|0:I,W=K,I=I+Z|0,W=I=(K=a+K|0)>>>0>>0?I+1|0:I,x=ug((Z=K)^(n[0|(K=A- -64|0)]|n[K+1|0]<<8|n[K+2|0]<<16|n[K+3|0]<<24)^-1377402159,I^(n[K+4|0]|n[K+5|0]<<8|n[K+6|0]<<16|n[K+7|0]<<24)^1359893119,32),K=I=p,I=I+1779033703|0,a=QA^(V=x-205731576|0),QA=I=V>>>0<4089235720?I+1|0:I,b=ug(a,$^I,24),m=I=p,j=K,a=x,I=I+W|0,I=(I=(x=b+Z|0)>>>0>>0?I+1|0:I)+(t=B=i[g+140>>2])|0,a=ug(a^(o=Z=(K=i[g+136>>2])+x|0),(G=x>>>0>o>>>0?I+1|0:I)^j,16),I=QA+(d=p)|0,t=ug((l=Z=V+a|0)^b,(W=V>>>0>l>>>0?I+1|0:I)^m,63),f=p,V=i[g+12>>2],Z=(b=i[g+144>>2])+($=QA=i[g+40>>2])|0,I=(T=i[g+148>>2])+(j=i[g+44>>2])|0,I=Z>>>0<$>>>0?I+1|0:I,$=Z,I=I+V|0,I=(Z=Z+i[g+8>>2]|0)>>>0<$>>>0?I+1|0:I,x=ug(Z^(n[A+72|0]|n[A+73|0]<<8|n[A+74|0]<<16|n[A+75|0]<<24)^725511199,(n[A+76|0]|n[A+77|0]<<8|n[A+78|0]<<16|n[A+79|0]<<24)^I^-1694144372,32),j=ug(r=(V=x-2067093701|0)^QA,j^(m=(QA=p)-((x>>>0<2067093701)+1150833018|0)|0),24),c=i[g+156>>2],r=j,I=I+($=p)|0,I=(I=(j=j+Z|0)>>>0>>0?I+1|0:I)+c|0,eA=ug((u=Z=j+i[g+152>>2]|0)^x,(k=j>>>0>u>>>0?I+1|0:I)^QA,16),I=m+(H=p)|0,cA=Z=V+eA|0,x=ug(r^Z,(V=V>>>0>Z>>>0?I+1|0:I)^$,63),m=p,QA=i[g+20>>2],Z=(U=i[g+160>>2])+(j=i[g+48>>2])|0,I=(iA=i[g+164>>2])+(y=i[g+52>>2])|0,$=Z,I=(I=Z>>>0>>0?I+1|0:I)+QA|0,rA=Z=Z+i[g+16>>2]|0,Z=Z>>>0<$>>>0?I+1|0:I,s=ug(rA^(n[A+80|0]|n[A+81|0]<<8|n[A+82|0]<<16|n[A+83|0]<<24)^-79577749,Z^(n[A+84|0]|n[A+85|0]<<8|n[A+86|0]<<16|n[A+87|0]<<24)^528734635,32),QA=I=p,I=I+1013904242|0,r=j^($=s-23791573|0),j=I=$>>>0<4271175723?I+1|0:I,I=ug(r,y^I,24),c=QA,Q=i[g+172>>2],r=I,e=s,s=I,rA=I+rA|0,I=(y=p)+Z|0,I=(I=s>>>0>rA>>>0?I+1|0:I)+(J=Q)|0,AA=ug(e^(F=Z=(QA=i[g+168>>2])+(s=rA)|0),(J=s>>>0>F>>>0?I+1|0:I)^c,16),I=j+(M=p)|0,y=ug(r^(_=Z=$+AA|0),(j=_>>>0<$>>>0?I+1|0:I)^y,63),c=p,s=i[g+28>>2],$=(Z=i[g+176>>2])+(D=rA=i[g+56>>2])|0,I=(yA=i[g+180>>2])+(w=i[g+60>>2])|0,I=(I=D>>>0>$>>>0?I+1|0:I)+s|0,I=(D=$)>>>0>(v=$=D+i[g+24>>2]|0)>>>0?I+1|0:I,S=ug(v^(n[A+88|0]|n[A+89|0]<<8|n[A+90|0]<<16|n[A+91|0]<<24)^327033209,I^(n[A+92|0]|n[A+93|0]<<8|n[A+94|0]<<16|n[A+95|0]<<24)^1541459225,32),s=ug(e=(r=(s=S)+1595750129|0)^rA,w^(rA=($=p)-((s>>>0<2699217167)+1521486533|0)|0),24),w=rA,Y=$,rA=i[g+188>>2],e=s,P=r,I=(D=p)+I|0,I=(I=(v=s+v|0)>>>0>>0?I+1|0:I)+(N=rA)|0,O=s=($=i[g+184>>2])+v|0,r=ug(s^S,(r=Y)^(Y=s>>>0>>0?I+1|0:I),16),I=(I=w)+(w=p)|0,v=s=P+r|0,S=D,D=I=s>>>0>>0?I+1|0:I,e=ug(e^s,S^I,63),s=p,S=m,P=x,L=_,I=m+G|0,m=o=o+x|0,I=(I=o>>>0>>0?I+1|0:I)+(N=q=i[g+196>>2])|0,_=ug((o=x=(IA=i[g+192>>2])+o|0)^r,(x=m>>>0>o>>>0?I+1|0:I)^w,32),I=(I=j)+(j=p)|0,G=I=(m=L+(G=_)|0)>>>0>>0?I+1|0:I,I=ug(P^m,I^S,24),fA=i[g+204>>2],P=I,r=_,w=o,o=I,_=w+I|0,I=(w=p)+x|0,I=(I=o>>>0>_>>>0?I+1|0:I)+(N=fA)|0,CA=x=(S=i[g+200>>2])+(o=_)|0,tA=ug(r^x,(o=o>>>0>x>>>0?I+1|0:I)^j,16),I=G+(_=p)|0,N=ug(P^(r=j=m+tA|0),(G=w)^(w=m>>>0>r>>>0?I+1|0:I),63),G=p,j=c,L=y,I=c+k|0,I=(I=(m=y+u|0)>>>0>>0?I+1|0:I)+(P=oA=i[g+212>>2])|0,u=ug((R=a)^(a=m=(x=i[g+208>>2])+(y=m)|0),(y=y>>>0>a>>>0?I+1|0:I)^d,32),I=D+(m=p)|0,j=ug(L^(c=v+u|0),(I=c>>>0>>0?I+1|0:I)^j,24),d=I,k=m,z=i[g+220>>2],L=j,R=c,I=(c=p)+y|0,I=(I=(D=a+j|0)>>>0>>0?I+1|0:I)+(P=z)|0,k=ug((D=j=(m=i[g+216>>2])+(y=D)|0)^u,(v=y>>>0>D>>>0?I+1|0:I)^k,16),I=(a=p)+d|0,aA=j=R+(y=k)|0,P=ug(L^j,(y=y>>>0>j>>>0?I+1|0:I)^c,63),c=p,d=s,L=e,I=s+J|0,I=(I=(e=e+F|0)>>>0>>0?I+1|0:I)+(u=E=i[g+228>>2])|0,e=ug((J=s=(j=i[g+224>>2])+e|0)^eA,(s=s>>>0>>0?I+1|0:I)^H,32),I=(H=p)+W|0,l=F=l+e|0,W=ug(L^F,(I=F>>>0>>0?I+1|0:I)^d,24),F=I,L=i[g+236>>2],u=W,I=(d=p)+s|0,I=(I=(J=J+W|0)>>>0>>0?I+1|0:I)+L|0,nA=ug((J=W=(BA=i[g+232>>2])+(s=J)|0)^e,(W=H)^(H=s>>>0>J>>>0?I+1|0:I),16),I=(I=F)+(F=p)|0,s=ug(u^(e=W=(s=nA)+l|0),(l=s>>>0>e>>>0?I+1|0:I)^d,63),d=p,u=f,gA=t,EA=cA,I=f+Y|0,I=(I=(cA=t+O|0)>>>0>>0?I+1|0:I)+(R=eA=i[g+244>>2])|0,f=I=(t=(W=i[g+240>>2])+(f=cA)|0)>>>0>>0?I+1|0:I,AA=ug(t^AA,I^M,32),I=(I=V)+(V=p)|0,O=M=EA+(Y=AA)|0,u=ug(gA^M,(I=Y>>>0>M>>>0?I+1|0:I)^u,24),gA=EA=p,M=I,Y=V,sA=u,I=f+EA|0,I=(I=(u=t+u|0)>>>0>>0?I+1|0:I)+(cA=i[g+252>>2])|0,u=t=(V=i[g+248>>2])+(f=u)|0,R=ug(t^AA,(R=Y)^(Y=t>>>0>>0?I+1|0:I),16),I=(I=M)+(M=p)|0,AA=ug(sA^(EA=t=(f=R)+O|0),(t=t>>>0>>0?I+1|0:I)^gA,63),gA=I=p,f=I,sA=k,I=o+eA|0,I=(I=(k=W)>>>0>(O=k+CA|0)>>>0?I+1|0:I)+f|0,O=ug(sA^(f=k=(o=O)+AA|0),(k=o>>>0>f>>>0?I+1|0:I)^a,32),I=l+(o=p)|0,e=I=(a=e+O|0)>>>0>>0?I+1|0:I,CA=AA=ug(AA^a,gA^I,24),gA=I=p,l=I,wA=AA,I=k+oA|0,I=(I=(AA=f+x|0)>>>0>>0?I+1|0:I)+l|0,CA=f=CA+(k=AA)|0,sA=ug(f^O,(l=o)^(o=f>>>0>>0?I+1|0:I),16),I=e+(l=p)|0,e=I=(f=a+sA|0)>>>0>>0?I+1|0:I,AA=ug(wA^(a=f),I^gA,63),k=p,O=N,I=iA+(f=G)|0,I=(I=(N=U+N|0)>>>0>>0?I+1|0:I)+v|0,U=I=(G=D+N|0)>>>0>>0?I+1|0:I,v=ug(G^nA,I^F,32),I=(I=t)+(t=p)|0,I=(F=(D=v)+EA|0)>>>0>>0?I+1|0:I,D=f,f=I,N=ug(O^F,D^I,24),iA=I=p,D=I,O=v,I=U+q|0,I=(I=(v=G+IA|0)>>>0>>0?I+1|0:I)+D|0,I=(G=(U=v)+N|0)>>>0>>0?I+1|0:I,U=G,D=I,nA=ug(O^G,I^t,16),I=f+(v=p)|0,EA=t=F+nA|0,N=ug(t^N,(f=t>>>0>>0?I+1|0:I)^iA,63),t=p,G=c,I=c+fA|0,I=(I=(F=S+P|0)>>>0>>0?I+1|0:I)+H|0,M=ug((S=c=F+J|0)^R,(c=c>>>0>>0?I+1|0:I)^M,32),I=w+(H=p)|0,I=r>>>0>(F=r+M|0)>>>0?I+1|0:I,r=G,G=I,r=w=ug(F^P,r^I,24),P=I=p,J=I,O=M,I=c+cA|0,I=(I=(w=(M=V)+S|0)>>>0>>0?I+1|0:I)+J|0,R=c=r+w|0,gA=ug(O^c,(M=H)^(H=c>>>0>>0?I+1|0:I),16),I=G+(J=p)|0,P=ug((S=c=F+gA|0)^r,(c=c>>>0>>0?I+1|0:I)^P,63),G=p,r=s,I=(F=d)+L|0,I=(I=(M=s+BA|0)>>>0>>0?I+1|0:I)+Y|0,w=ug((M=s=u+M|0)^tA,(s=s>>>0>>0?I+1|0:I)^_,32),I=(I=y)+(y=p)|0,_=ug(r^(Y=d=w+aA|0),(I=d>>>0>>0?I+1|0:I)^F,24),u=d=p,F=I,O=Y,Y=w,w=(I=M)+(M=Z)|0,I=s+yA|0,I=(I=w>>>0>>0?I+1|0:I)+d|0,M=s=w+(r=_)|0,w=I=s>>>0>>0?I+1|0:I,Y=ug(Y^s,I^y,16),I=(d=p)+F|0,O=ug(_^(r=y=O+(s=Y)|0),(s=r>>>0>>0?I+1|0:I)^u,63),y=p,F=t,_=S,u=Y,I=o+B|0,I=(I=(Y=K)>>>0>(S=Y+CA|0)>>>0?I+1|0:I)+t|0,S=ug(u^(t=Y=S+N|0),(o=d)^(d=t>>>0>>0?I+1|0:I),32),I=(I=c)+(c=p)|0,I=(o=S)>>>0>(Y=_+o|0)>>>0?I+1|0:I,u=_=ug((o=Y)^N,I^F,24),N=F=p,Y=I,CA=S,I=d+E|0,I=(I=(S=t+j|0)>>>0>>0?I+1|0:I)+F|0,F=t=(d=S)+_|0,tA=ug(CA^t,(S=t>>>0>>0?I+1|0:I)^c,16),I=(I=Y)+(Y=p)|0,o=t=(c=tA)+o|0,iA=ug(t^u,(_=t>>>0>>0?I+1|0:I)^N,63),c=p,N=r,I=D+(t=G)|0,I=(I=(d=U+P|0)>>>0>>0?I+1|0:I)+(u=aA=i[g+132>>2])|0,d=I=(G=(r=i[g+128>>2])+d|0)>>>0>>0?I+1|0:I,D=ug(G^sA,I^l,32),I=(I=s)+(s=p)|0,l=U=N+D|0,N=u=ug(U^P,(I=U>>>0>>0?I+1|0:I)^t,24),P=t=p,U=I,CA=D,I=d+T|0,d=D=b+G|0,I=(I=D>>>0>>0?I+1|0:I)+t|0,t=ug(CA^(D=G=D+u|0),(t=s)^(s=D>>>0>>0?I+1|0:I),16),I=(I=U)+(U=p)|0,l=G=t+l|0,fA=ug(G^N,(u=G>>>0>>0?I+1|0:I)^P,63),G=p,d=y,I=H+z|0,I=(I=(P=m+R|0)>>>0>>0?I+1|0:I)+y|0,I=(H=(N=P)+O|0)>>>0>>0?I+1|0:I,N=H,y=I,P=ug(H^nA,I^v,32),I=e+(H=p)|0,I=a>>>0>(v=a+P|0)>>>0?I+1|0:I,O=e=ug((a=v)^O,I^d,24),CA=d=p,v=I,R=a,I=y+rA|0,I=(a=$)>>>0>(e=a+N|0)>>>0?I+1|0:I,a=e,I=I+d|0,e=H,H=I=a>>>0>(y=O+a|0)>>>0?I+1|0:I,nA=ug((a=y)^P,e^I,16),I=(y=p)+v|0,O=ug((v=d=R+(e=nA)|0)^O,(I=e>>>0>v>>>0?I+1|0:I)^CA,63),d=p,N=I,P=t,R=AA,I=Q+(e=k)|0,I=(I=(t=QA)>>>0>(AA=t+AA|0)>>>0?I+1|0:I)+w|0,k=t=M+AA|0,w=ug(t^gA,(w=J)^(J=t>>>0>>0?I+1|0:I),32),I=(t=p)+f|0,CA=M=w+EA|0,e=ug(R^M,(I=M>>>0>>0?I+1|0:I)^e,24),gA=EA=p,f=I,M=t,EA=e,R=w,I=J+gA|0,I=(I=(w=e+k|0)>>>0>>0?I+1|0:I)+(AA=i[g+156>>2])|0,J=k=(t=i[g+152>>2])+w|0,e=M,M=I=k>>>0>>0?I+1|0:I,R=ug(R^k,e^I,16),I=(I=f)+(f=p)|0,e=I=(w=R)>>>0>(k=w+CA|0)>>>0?I+1|0:I,CA=ug(EA^(w=k),I^gA,63),EA=I=p,k=I,gA=v,I=S+z|0,I=(I=(v=F+m|0)>>>0>>0?I+1|0:I)+k|0,k=F=v+CA|0,P=ug(F^P,(S=U)^(U=F>>>0>>0?I+1|0:I),32),I=(F=p)+N|0,S=I=(v=gA+(S=P)|0)>>>0>>0?I+1|0:I,EA=CA=ug(CA^v,EA^I,24),gA=I=p,N=I,sA=P,I=U+q|0,I=(I=(P=k+IA|0)>>>0>>0?I+1|0:I)+N|0,I=(k=(U=P)+CA|0)>>>0>>0?I+1|0:I,U=k,N=F,F=I,CA=ug(sA^k,N^I,16),I=S+(N=p)|0,I=(k=v+CA|0)>>>0>>0?I+1|0:I,v=k,S=I,IA=ug(k^EA,I^gA,63),k=p,P=c,gA=iA,I=c+E|0,I=s+(j>>>0>(iA=j+iA|0)>>>0?I+1|0:I)|0,q=c=D+iA|0,iA=ug(c^nA,(s=y)^(y=c>>>0>>0?I+1|0:I),32),I=e+(c=p)|0,D=I=(s=w+iA|0)>>>0>>0?I+1|0:I,P=e=ug(gA^s,I^P,24),nA=I=p,w=I,I=y+aA|0,I=(I=(e=r+q|0)>>>0>>0?I+1|0:I)+w|0,q=y=P+(r=e)|0,iA=ug(y^iA,(w=y>>>0>>0?I+1|0:I)^c,16),I=D+(r=p)|0,aA=y=s+iA|0,e=ug(y^P,(s=y>>>0>>0?I+1|0:I)^nA,63),y=p,I=Q+(c=G)|0,I=H+((D=QA)>>>0>(P=D+fA|0)>>>0?I+1|0:I)|0,D=f,f=I=a>>>0>(G=a+P|0)>>>0?I+1|0:I,P=ug((a=G)^R,D^I,32),I=_+(G=p)|0,I=o>>>0>(H=o+P|0)>>>0?I+1|0:I,o=c,c=I,o=ug(H^fA,o^I,24),fA=I=p,D=I,gA=o,I=f+T|0,I=(I=(o=b)>>>0>(_=o+a|0)>>>0?I+1|0:I)+D|0,nA=f=gA+(o=_)|0,R=ug(f^P,(D=f>>>0>>0?I+1|0:I)^G,16),I=c+(o=p)|0,P=f=H+R|0,_=ug(gA^f,(G=f>>>0>>0?I+1|0:I)^fA,63),f=p,I=cA+(c=d)|0,I=M+((a=(H=V)+O|0)>>>0>>0?I+1|0:I)|0,H=I=(d=J+a|0)>>>0>>0?I+1|0:I,a=ug(d^tA,I^Y,32),I=u+(J=p)|0,Y=c,c=I=l>>>0>(M=l+a|0)>>>0?I+1|0:I,l=ug(M^O,Y^I,24),O=I=p,Y=I,gA=a,I=H+L|0,I=(I=(a=d+BA|0)>>>0>>0?I+1|0:I)+Y|0,a=ug(gA^(Y=d=a+(u=l)|0),(u=J)^(J=a>>>0>Y>>>0?I+1|0:I),16),I=c+(H=p)|0,l=ug(l^(u=d=M+a|0),(d=u>>>0>>0?I+1|0:I)^O,63),c=p,M=y,O=e,gA=a,I=F+oA|0,F=a=U+x|0,I=(I=a>>>0>>0?I+1|0:I)+y|0,e=ug(gA^(a=U=a+e|0),(y=F>>>0>a>>>0?I+1|0:I)^H,32),I=(I=G)+(G=p)|0,U=I=(H=e+P|0)>>>0>>0?I+1|0:I,P=M=ug(O^H,I^M,24),O=I=p,F=I,I=y+eA|0,I=(I=(a=(M=W)+a|0)>>>0>>0?I+1|0:I)+F|0,fA=y=P+a|0,tA=ug(y^e,(F=y>>>0>>0?I+1|0:I)^G,16),I=U+(M=p)|0,P=ug((EA=y=H+tA|0)^P,(y=y>>>0>>0?I+1|0:I)^O,63),G=p,H=f,e=_,I=w+AA|0,I=(I=(_=t+q|0)>>>0>>0?I+1|0:I)+f|0,f=I=(w=_)>>>0>(U=e+w|0)>>>0?I+1|0:I,_=ug((w=U)^CA,I^N,32),I=(I=d)+(d=p)|0,I=(a=_)>>>0>(U=a+u|0)>>>0?I+1|0:I,u=e=ug(e^(a=U),I^H,24),U=I,N=a,a=_,_=(I=w)+(w=Z)|0,I=f+yA|0,I=(I=w>>>0>_>>>0?I+1|0:I)+(H=p)|0,I=(f=(w=_)+e|0)>>>0>>0?I+1|0:I,w=f,_=I,a=ug(a^f,I^d,16),I=(e=p)+U|0,d=ug((CA=f=N+a|0)^u,(f=f>>>0>>0?I+1|0:I)^H,63),H=p,U=c,N=l,I=D+rA|0,I=(I=(u=(l=$)+nA|0)>>>0>>0?I+1|0:I)+c|0,l=D=N+u|0,c=I=D>>>0>>0?I+1|0:I,u=ug(D^iA,I^r,32),I=S+(D=p)|0,S=r=v+u|0,N=r=ug(N^r,(I=r>>>0>>0?I+1|0:I)^U,24),q=U=p,v=I,O=S,I=c+B|0,I=(I=(r=(S=K)+l|0)>>>0>>0?I+1|0:I)+U|0,I=(c=N+r|0)>>>0>>0?I+1|0:I,S=c,r=D,D=I,nA=ug(c^u,r^I,16),I=(I=v)+(v=p)|0,N=ug((c=O+(U=nA)|0)^N,(I=c>>>0>>0?I+1|0:I)^q,63),U=p,l=c,u=I,I=J+(r=k)|0,k=c=Y+IA|0,I=(I=c>>>0>>0?I+1|0:I)+(q=i[g+204>>2])|0,k=I=(c=(O=i[g+200>>2])+c|0)>>>0>>0?I+1|0:I,Y=ug(c^R,I^o,32),I=(I=s)+(s=p)|0,I=(o=Y)>>>0>(J=o+aA|0)>>>0?I+1|0:I,r=ug((o=J)^IA,I^r,24),R=aA=p,J=I,gA=o,aA=Y,I=k+R|0,I=(I=(Y=c+r|0)>>>0>>0?I+1|0:I)+(IA=i[g+164>>2])|0,Y=c=(iA=i[g+160>>2])+(k=Y)|0,aA=ug(aA^c,(o=c>>>0>>0?I+1|0:I)^s,16),I=(I=J)+(J=p)|0,r=ug(r^(gA=c=gA+(s=aA)|0),(c=c>>>0>>0?I+1|0:I)^R,63),R=I=p,s=I,sA=a,I=F+rA|0,I=(I=(a=(k=$)+fA|0)>>>0>>0?I+1|0:I)+s|0,e=ug(sA^(s=k=a+r|0),(k=a>>>0>s>>>0?I+1|0:I)^e,32),I=(F=p)+u|0,l=a=l+e|0,u=ug(r^a,(I=a>>>0>>0?I+1|0:I)^R,24),R=r=p,a=I,fA=l,sA=e,I=k+q|0,I=(I=(e=s+O|0)>>>0>>0?I+1|0:I)+r|0,l=s=e+u|0,sA=ug(sA^s,(r=F)^(F=s>>>0>>0?I+1|0:I),16),I=(r=p)+a|0,fA=ug((wA=s=fA+(k=sA)|0)^u,(s=s>>>0>>0?I+1|0:I)^R,63),k=p,I=AA+(a=G)|0,I=(I=(e=t+P|0)>>>0>>0?I+1|0:I)+_|0,e=ug((_=t=e+w|0)^nA,(t=t>>>0>>0?I+1|0:I)^v,32),I=(I=c)+(c=p)|0,w=I=e>>>0>(G=e+gA|0)>>>0?I+1|0:I,u=a=ug(G^P,I^a,24),P=I=p,v=I,a=(I=_)+(_=K)|0,I=t+B|0,I=(I=a>>>0<_>>>0?I+1|0:I)+v|0,AA=t=u+a|0,nA=ug(t^e,(v=t>>>0>>0?I+1|0:I)^c,16),I=w+(_=p)|0,R=t=G+nA|0,a=ug(t^u,(c=t>>>0>>0?I+1|0:I)^P,63),t=p,e=d,I=(G=H)+L|0,I=(I=(w=d+BA|0)>>>0>>0?I+1|0:I)+D|0,H=I=(d=w+S|0)>>>0>>0?I+1|0:I,D=ug(d^aA,I^J,32),I=(I=y)+(y=p)|0,I=(w=D)>>>0>(J=w+EA|0)>>>0?I+1|0:I,S=ug(e^(w=J),I^G,24),u=G=p,J=I,P=w,L=D,I=H+E|0,H=D=d+j|0,I=(I=D>>>0>>0?I+1|0:I)+G|0,aA=ug(L^(D=d=D+(e=S)|0),(w=H>>>0>D>>>0?I+1|0:I)^y,16),I=(I=J)+(J=p)|0,u=ug(S^(e=y=P+(G=aA)|0),(G=e>>>0>>0?I+1|0:I)^u,63),y=p,d=U,I=U+z|0,I=(I=(S=m+N|0)>>>0>>0?I+1|0:I)+o|0,I=(H=Y+S|0)>>>0>>0?I+1|0:I,Y=H,H=I,S=ug(Y^tA,I^M,32),I=(I=f)+(f=p)|0,o=d,d=I=(U=(M=S)+CA|0)>>>0>>0?I+1|0:I,N=o=ug(U^N,o^I,24),P=I=p,M=I,L=S,S=(I=Y)+(Y=W)|0,I=H+eA|0,I=(I=Y>>>0>S>>>0?I+1|0:I)+M|0,M=H=(Y=S)+o|0,o=ug(L^H,(Y=H>>>0>>0?I+1|0:I)^f,16),I=d+(H=p)|0,I=(f=U+o|0)>>>0>>0?I+1|0:I,U=f,S=I,N=ug(f^N,I^P,63),f=p,d=t,P=a,L=o,I=F+T|0,I=(I=(a=(o=b)+l|0)>>>0>>0?I+1|0:I)+t|0,t=I=a>>>0>(F=P+a|0)>>>0?I+1|0:I,o=ug(L^F,I^H,32),I=(I=G)+(G=p)|0,I=(a=o)>>>0>(H=a+e|0)>>>0?I+1|0:I,l=e=ug(P^(a=H),I^d,24),H=I,P=o,o=(I=F)+(F=Z)|0,I=t+yA|0,I=(I=o>>>0>>0?I+1|0:I)+(d=p)|0,F=t=o+e|0,o=I=t>>>0>>0?I+1|0:I,t=(G=tA=ug(P^t,I^G,16))+a|0,I=(a=p)+H|0,e=t,L=ug(H=t^l,(l=t>>>0>>0?I+1|0:I)^d,63),d=p,I=v+Q|0,I=(I=(G=QA)>>>0>(H=G+AA|0)>>>0?I+1|0:I)+(t=y)|0,v=G=H+u|0,r=ug(G^sA,(y=G>>>0>>0?I+1|0:I)^r,32),I=S+(G=p)|0,I=(H=U+r|0)>>>0>>0?I+1|0:I,U=H,S=ug(H^u,I^t,24),P=t=p,H=I,AA=U,I=y+oA|0,I=(U=x)>>>0>(v=U+v|0)>>>0?I+1|0:I,U=v,I=I+t|0,v=y=v+(u=S)|0,y=ug(y^r,(S=y>>>0>>0?I+1|0:I)^G,16),I=(U=p)+H|0,EA=t=AA+y|0,BA=ug(t^u,(G=t>>>0>>0?I+1|0:I)^P,63),H=p,P=N,I=w+IA|0,I=(I=(r=D+iA|0)>>>0>>0?I+1|0:I)+(t=f)|0,u=ug((f=D=r+N|0)^nA,(D=r>>>0>f>>>0?I+1|0:I)^_,32),I=(I=s)+(s=p)|0,N=w=(_=u)+wA|0,r=ug(P^w,(I=w>>>0<_>>>0?I+1|0:I)^t,24),w=t=p,_=I,P=r,I=D+t|0,I=(I=(r=f+r|0)>>>0>>0?I+1|0:I)+(AA=i[g+132>>2])|0,D=f=(t=i[g+128>>2])+r|0,r=I=f>>>0>>0?I+1|0:I,nA=ug(f^u,I^s,16),I=(I=_)+(_=p)|0,CA=ug(P^(f=(s=nA)+N|0),(I=f>>>0>>0?I+1|0:I)^w,63),s=p,u=f,N=I,P=y,I=cA+(w=k)|0,I=(I=(f=(y=V)+fA|0)>>>0>>0?I+1|0:I)+Y|0,M=ug((f=y=f+M|0)^aA,(k=f>>>0>>0?I+1|0:I)^J,32),I=(y=p)+c|0,I=(Y=M)>>>0>(J=Y+R|0)>>>0?I+1|0:I,w=ug((Y=J)^fA,I^w,24),gA=R=p,c=I,J=y,aA=M,I=k+R|0,I=(I=(M=f+w|0)>>>0>>0?I+1|0:I)+(fA=i[g+196>>2])|0,M=f=(y=i[g+192>>2])+(k=M)|0,aA=ug(aA^f,(R=J)^(J=f>>>0>>0?I+1|0:I),16),I=(I=c)+(c=p)|0,w=ug(w^(R=f=(k=aA)+Y|0),(f=f>>>0>>0?I+1|0:I)^gA,63),gA=I=p,k=I,I=o+q|0,I=(I=(Y=F+O|0)>>>0>>0?I+1|0:I)+k|0,I=(F=Y+w|0)>>>0>>0?I+1|0:I,Y=F,k=I,o=ug(F^P,I^U,32),I=(U=p)+N|0,u=F=u+o|0,N=ug(w^F,(I=F>>>0>>0?I+1|0:I)^gA,24),q=F=p,w=I,P=o,I=k+AA|0,I=(I=(o=t+Y|0)>>>0>>0?I+1|0:I)+F|0,O=k=o+N|0,gA=ug(P^k,(F=k>>>0>>0?I+1|0:I)^U,16),I=(I=w)+(w=p)|0,Y=k=(U=gA)+u|0,q=ug(k^N,(o=k>>>0>>0?I+1|0:I)^q,63),U=p,I=Q+(k=d)|0,I=S+((u=QA)>>>0>(N=u+L|0)>>>0?I+1|0:I)|0,v=I=(d=v+N|0)>>>0>>0?I+1|0:I,u=ug(d^nA,I^_,32),I=(I=f)+(f=p)|0,I=(_=u)>>>0>(S=_+R|0)>>>0?I+1|0:I,_=k,k=I,N=ug(S^L,_^I,24),L=I=p,_=I,P=u,I=v+rA|0,I=(I=(u=d+$|0)>>>0>>0?I+1|0:I)+_|0,_=I=(d=(v=u)+N|0)>>>0>>0?I+1|0:I,nA=ug(P^(v=d),I^f,16),I=k+(u=p)|0,R=f=S+nA|0,N=ug(f^N,(d=f>>>0>>0?I+1|0:I)^L,63),f=p,k=H,I=H+T|0,I=r+(b>>>0>(P=b+BA|0)>>>0?I+1|0:I)|0,r=c,c=I=D>>>0>(H=D+P|0)>>>0?I+1|0:I,P=ug(H^aA,r^I,32),I=l+(D=p)|0,r=k,k=I=e>>>0>(S=e+P|0)>>>0?I+1|0:I,l=e=ug(S^BA,r^I,24),r=I=p,I=c+IA|0,I=(I=(e=H+iA|0)>>>0>>0?I+1|0:I)+r|0,IA=c=l+e|0,iA=ug(c^P,(H=c>>>0>>0?I+1|0:I)^D,16),I=k+(D=p)|0,BA=c=S+iA|0,e=ug(c^l,(k=c>>>0>>0?I+1|0:I)^r,63),c=p,S=s,I=s+oA|0,I=J+((r=x)>>>0>(l=r+CA|0)>>>0?I+1|0:I)|0,a=ug((r=s=M+l|0)^tA,(s=r>>>0>>0?I+1|0:I)^a,32),I=(I=G)+(G=p)|0,P=S=ug((l=J=a+EA|0)^CA,(I=a>>>0>l>>>0?I+1|0:I)^S,24),L=J=p,M=I,I=s+cA|0,I=(I=(r=(S=V)+r|0)>>>0>>0?I+1|0:I)+J|0,J=s=P+r|0,a=ug(s^a,(S=s>>>0>>0?I+1|0:I)^G,16),I=(I=M)+(M=p)|0,CA=s=a+l|0,P=ug(s^P,(G=s>>>0>>0?I+1|0:I)^L,63),s=p,L=N,aA=a,I=F+eA|0,I=(I=(a=W)>>>0>(l=a+O|0)>>>0?I+1|0:I)+(r=f)|0,f=I=(a=l)>>>0>(F=a+N|0)>>>0?I+1|0:I,l=ug(aA^(a=F),I^M,32),I=(I=k)+(k=p)|0,N=F=(M=l)+BA|0,L=r=ug(L^F,(I=F>>>0>>0?I+1|0:I)^r,24),BA=F=p,M=I,I=f+B|0,I=(I=(a=(r=K)+a|0)>>>0>>0?I+1|0:I)+F|0,tA=f=L+a|0,aA=ug(f^l,(r=k)^(k=f>>>0>>0?I+1|0:I),16),I=(F=p)+M|0,M=f=(r=aA)+N|0,L=ug(f^L,(r=f>>>0>>0?I+1|0:I)^BA,63),f=p,N=e,I=_+z|0,_=e=m+v|0,I=(I=e>>>0>>0?I+1|0:I)+(a=c)|0,l=ug((e=v=N+e|0)^gA,(c=e>>>0<_>>>0?I+1|0:I)^w,32),I=(I=G)+(G=p)|0,v=I=(w=(v=l)+CA|0)>>>0>>0?I+1|0:I,N=a=ug(N^w,I^a,24),BA=I=p,_=I,I=c+E|0,I=(I=(a=j)>>>0>(e=a+e|0)>>>0?I+1|0:I)+_|0,_=c=N+(a=e)|0,G=ug(c^l,(a=c>>>0>>0?I+1|0:I)^G,16),I=v+(e=p)|0,I=(c=w+G|0)>>>0>>0?I+1|0:I,w=c,v=I,BA=ug(c^N,I^BA,63),c=p,l=s,O=P,I=H+yA|0,I=(I=(N=Z)>>>0>(P=N+IA|0)>>>0?I+1|0:I)+s|0,I=(H=O+(N=P)|0)>>>0>>0?I+1|0:I,N=H,s=I,P=ug(H^nA,I^u,32),I=o+(H=p)|0,o=I=(u=Y+P|0)>>>0>>0?I+1|0:I,u=ug(O^(Y=u),I^l,24),O=I=p,l=I,I=s+fA|0,I=(I=(N=y+N|0)>>>0>>0?I+1|0:I)+l|0,l=s=(IA=u)+(u=N)|0,CA=ug(s^P,(N=H)^(H=s>>>0>>0?I+1|0:I),16),I=o+(u=p)|0,I=(s=Y+CA|0)>>>0>>0?I+1|0:I,Y=s,IA=ug(s^IA,I^O,63),s=p,N=I,gA=q,I=S+(o=U)|0,I=(I=(q=J+q|0)>>>0>>0?I+1|0:I)+(O=nA=i[g+156>>2])|0,J=I=(U=(P=i[g+152>>2])+(J=q)|0)>>>0>>0?I+1|0:I,S=ug(U^iA,I^D,32),I=(I=d)+(d=p)|0,q=D=S+R|0,O=o=ug(gA^D,(I=D>>>0>>0?I+1|0:I)^o,24),R=iA=p,D=I,gA=EA=i[g+236>>2],EA=q,q=S,I=J+R|0,I=(I=(o=o+U|0)>>>0>>0?I+1|0:I)+gA|0,I=(U=(S=i[g+232>>2])+o|0)>>>0>>0?I+1|0:I,o=d,d=I,iA=ug(q^U,o^I,16),I=(J=p)+D|0,O=ug((D=o=EA+(q=iA)|0)^O,(o=o>>>0>>0?I+1|0:I)^R,63),R=I=p,q=I,EA=G,I=k+T|0,I=(I=(G=b+tA|0)>>>0>>0?I+1|0:I)+q|0,e=ug(EA^(q=b=G+O|0),(b=b>>>0>>0?I+1|0:I)^e,32),I=(G=p)+N|0,N=k=Y+e|0,T=ug(O^k,R^(I=k>>>0>>0?I+1|0:I),24),tA=k=p,Y=I,O=N,R=e,I=b+E|0,I=(I=(e=j)>>>0>(N=e+q|0)>>>0?I+1|0:I)+k|0,R=ug(R^(k=b=(e=N)+T|0),(e=e>>>0>k>>>0?I+1|0:I)^G,16),I=(I=Y)+(Y=p)|0,N=b=O+(G=R)|0,O=ug(b^T,(q=b>>>0>>0?I+1|0:I)^tA,63),G=p,b=f,EA=L,I=f+yA|0,I=a+(Z>>>0>(L=Z+L|0)>>>0?I+1|0:I)|0,u=ug((T=f=_+L|0)^CA,(f=f>>>0<_>>>0?I+1|0:I)^u,32),I=o+(_=p)|0,I=(a=D+u|0)>>>0>>0?I+1|0:I,D=a,o=b,b=I,L=a=ug(EA^a,o^I,24),CA=I=p,o=I,EA=a,tA=u,I=f+oA|0,I=(I=(a=x)>>>0>(u=a+T|0)>>>0?I+1|0:I)+o|0,L=f=L+(a=u)|0,tA=ug(tA^f,(o=f>>>0>>0?I+1|0:I)^_,16),I=b+(_=p)|0,I=(f=D+tA|0)>>>0>>0?I+1|0:I,D=f,a=I,u=ug(EA^f,I^CA,63),f=p,b=c,I=c+AA|0,I=(I=(T=t+BA|0)>>>0>>0?I+1|0:I)+H|0,I=(t=l+T|0)>>>0>>0?I+1|0:I,l=t,t=I,T=ug(l^iA,I^J,32),I=r+(c=p)|0,r=b,b=I=(H=M+T|0)>>>0>>0?I+1|0:I,r=M=ug(H^BA,r^I,24),BA=I=p,J=I,I=t+z|0,I=(I=(M=m+l|0)>>>0>>0?I+1|0:I)+J|0,l=m=r+(t=M)|0,T=ug(m^T,(M=c)^(c=t>>>0>m>>>0?I+1|0:I),16),I=b+(J=p)|0,z=m=H+T|0,M=ug(m^r,(t=m>>>0>>0?I+1|0:I)^BA,63),b=p,m=s,I=s+fA|0,I=(I=(H=y+IA|0)>>>0>>0?I+1|0:I)+d|0,I=(y=H+U|0)>>>0>>0?I+1|0:I,U=y,y=I,F=ug(U^aA,I^F,32),I=v+(s=p)|0,r=m,m=I=w>>>0>(d=w+F|0)>>>0?I+1|0:I,v=w=ug(d^IA,r^I,24),r=I=p,I=y+nA|0,I=(I=(U=U+P|0)>>>0

>>0?I+1|0:I)+r|0,H=y=U+w|0,F=ug(y^F,(w=s)^(s=y>>>0>>0?I+1|0:I),16),I=m+(U=p)|0,r=ug((w=y=d+F|0)^v,(y=y>>>0>>0?I+1|0:I)^r,63),m=p,d=f,P=F,I=f+e|0,I=(F=k+u|0)>>>0>>0?I+1|0:I,k=F,I=I+(v=i[g+164>>2])|0,v=ug(P^(F=f=F+i[g+160>>2]|0),(f=f>>>0>>0?I+1|0:I)^U,32),I=(I=t)+(t=p)|0,e=d,d=I=(k=(U=v)+z|0)>>>0>>0?I+1|0:I,e=ug(k^u,e^I,24),P=I=p,U=I,I=f+gA|0,I=(I=(F=F+S|0)>>>0>>0?I+1|0:I)+U|0,BA=ug((z=f=F+e|0)^v,(f=f>>>0>>0?I+1|0:I)^t,16),I=d+(U=p)|0,d=t=k+BA|0,u=ug(t^e,(k=t>>>0>>0?I+1|0:I)^P,63),t=p,e=M,S=w,I=o+rA|0,I=(I=(w=(M=$)+L|0)>>>0>>0?I+1|0:I)+(F=b)|0,Y=ug((v=M=e+w|0)^R,(b=w>>>0>v>>>0?I+1|0:I)^Y,32),I=(I=y)+(y=p)|0,o=F,F=I=(w=Y)>>>0>(M=S+w|0)>>>0?I+1|0:I,o=S=ug(e^M,o^I,24),e=I=p,S=Y,I=b+Q|0,I=(I=(Y=QA)>>>0>(v=Y+v|0)>>>0?I+1|0:I)+e|0,v=ug(S^(w=b=v+o|0),(Y=w>>>0>>0?I+1|0:I)^y,16),I=F+(S=p)|0,P=ug((F=b=M+v|0)^o,(M=F>>>0>>0?I+1|0:I)^e,63),b=p,L=r,I=c+cA|0,I=(o=V)>>>0>(r=o+l|0)>>>0?I+1|0:I,o=r,I=I+(y=m)|0,e=ug((r=c=L+r|0)^tA,(m=r>>>0>>0?I+1|0:I)^_,32),I=q+(c=p)|0,_=y,y=I=(o=N+e|0)>>>0>>0?I+1|0:I,l=ug(L^o,_^I,24),q=I=p,_=I,N=e,e=(I=r)+(r=W)|0,I=m+eA|0,I=(I=r>>>0>e>>>0?I+1|0:I)+_|0,_=I=(r=e)>>>0>(m=r+l|0)>>>0?I+1|0:I,L=ug(N^m,I^c,16),I=y+(r=p)|0,N=ug((c=o+L|0)^l,(I=c>>>0>>0?I+1|0:I)^q,63),y=p,e=I,I=B+(o=G)|0,I=s+((l=K)>>>0>(q=l+O|0)>>>0?I+1|0:I)|0,l=G=H+q|0,q=ug(G^T,(s=G>>>0>>0?I+1|0:I)^J,32),I=a+(G=p)|0,J=I=D>>>0>(H=D+q|0)>>>0?I+1|0:I,T=I=ug(H^O,I^o,24),D=I,o=I+l|0,I=(a=p)+s|0,I=(I=o>>>0>>0?I+1|0:I)+(IA=i[g+204>>2])|0,I=(s=o+i[g+200>>2]|0)>>>0>>0?I+1|0:I,o=G,G=I,IA=ug(s^q,o^I,16),I=J+(D=p)|0,I=(o=H+IA|0)>>>0>>0?I+1|0:I,H=o,J=I,a=ug(T^o,I^a,63),o=I=p,l=c,T=v,I=f+E|0,I=(I=(c=j)>>>0>(v=c+z|0)>>>0?I+1|0:I)+o|0,T=ug(T^(q=f=(c=v)+a|0),(f=f>>>0>>0?I+1|0:I)^S,32),I=(c=p)+e|0,S=I=(v=l+(S=T)|0)>>>0>>0?I+1|0:I,a=ug(a^v,o^I,24),l=I=p,o=I,R=a,I=f+Q|0,I=(I=(a=QA)>>>0>(e=a+q|0)>>>0?I+1|0:I)+o|0,T=ug((o=f=R+(a=e)|0)^T,(a=o>>>0>>0?I+1|0:I)^c,16),I=S+(e=p)|0,I=(f=v+T|0)>>>0>>0?I+1|0:I,v=f,S=I,f=ug(R^f,I^l,63),c=p,l=t,R=u,I=t+B|0,I=Y+((u=K)>>>0>(q=R+u|0)>>>0?I+1|0:I)|0,r=ug((u=t=w+q|0)^L,(t=t>>>0>>0?I+1|0:I)^r,32),I=J+(w=p)|0,J=I=H>>>0>(Y=H+r|0)>>>0?I+1|0:I,q=l=ug(R^(H=Y),I^l,24),z=I=p,Y=I,R=l,L=r,I=t+cA|0,I=(I=(r=V)>>>0>(l=r+u|0)>>>0?I+1|0:I)+Y|0,q=t=q+(r=l)|0,L=ug(L^t,(Y=w)^(w=t>>>0>>0?I+1|0:I),16),I=J+(Y=p)|0,I=(t=H+L|0)>>>0>>0?I+1|0:I,H=t,J=I,u=ug(R^t,I^z,63),t=p,R=P,I=eA+(r=b)|0,I=_+((l=W)>>>0>(P=l+P|0)>>>0?I+1|0:I)|0,l=ug((_=b=m+P|0)^IA,(b=m>>>0>_>>>0?I+1|0:I)^D,32),I=k+(m=p)|0,I=(D=d+l|0)>>>0>>0?I+1|0:I,d=D,k=I,I=ug(R^D,I^r,24),z=i[g+236>>2],R=I,r=_,_=I,r=r+I|0,I=(D=p)+b|0,I=(I=r>>>0<_>>>0?I+1|0:I)+z|0,r=I=(b=r+i[g+232>>2]|0)>>>0>>0?I+1|0:I,z=ug((_=b)^l,I^m,16),I=k+(l=p)|0,P=b=d+z|0,D=ug(R^b,(m=b>>>0>>0?I+1|0:I)^D,63),b=p,d=y,R=N,I=y+G|0,I=(I=(k=s+N|0)>>>0>>0?I+1|0:I)+(IA=i[g+164>>2])|0,U=ug((N=y=(s=k)+i[g+160>>2]|0)^BA,(y=y>>>0>>0?I+1|0:I)^U,32),I=M+(s=p)|0,M=d,d=I=F>>>0>(G=F+U|0)>>>0?I+1|0:I,M=F=ug(R^G,M^I,24),BA=I=p,k=I,R=U,I=y+oA|0,I=(I=(F=(U=x)+N|0)>>>0>>0?I+1|0:I)+k|0,IA=y=M+F|0,F=ug(R^y,(k=s)^(s=y>>>0>>0?I+1|0:I),16),I=d+(k=p)|0,I=(y=G+F|0)>>>0>>0?I+1|0:I,G=y,d=I,N=ug(y^M,I^BA,63),y=p,U=t,R=F,I=t+a|0,I=(I=(F=o+u|0)>>>0>>0?I+1|0:I)+(M=i[g+132>>2])|0,o=ug(R^(M=t=F+i[g+128>>2]|0),(t=t>>>0>>0?I+1|0:I)^k,32),I=(I=m)+(m=p)|0,a=U,U=I=o>>>0>(k=o+P|0)>>>0?I+1|0:I,a=ug(k^u,a^I,24),P=I=p,F=I,u=o,o=(I=M)+(M=$)|0,I=t+rA|0,I=(I=o>>>0>>0?I+1|0:I)+F|0,BA=t=o+a|0,AA=ug(u^t,(F=t>>>0>>0?I+1|0:I)^m,16),I=U+(M=p)|0,U=I=(m=k+AA|0)>>>0>>0?I+1|0:I,u=ug((k=m)^a,I^P,63),m=p,P=D,I=w+yA|0,w=o=(D=Z)+q|0,I=(I=o>>>0>>0?I+1|0:I)+(t=b)|0,a=ug((o=D=P+o|0)^T,(b=w>>>0>o>>>0?I+1|0:I)^e,32),I=d+(D=p)|0,I=(w=G+a|0)>>>0>>0?I+1|0:I,G=w,e=t,t=I,I=ug(P^w,e^I,24),P=i[g+156>>2],e=I,w=I,o=I+o|0,I=(d=p)+b|0,I=(I=o>>>0>>0?I+1|0:I)+P|0,I=o>>>0>(b=o+i[g+152>>2]|0)>>>0?I+1|0:I,o=D,D=I,q=ug((w=b)^a,o^I,16),I=t+(o=p)|0,a=d,d=I=(b=G+q|0)>>>0>>0?I+1|0:I,P=ug(e^(G=b),a^I,63),t=p,b=y,I=y+r|0,I=(I=(a=_+N|0)>>>0<_>>>0?I+1|0:I)+(e=i[g+204>>2])|0,I=(y=a+i[g+200>>2]|0)>>>0>>0?I+1|0:I,a=Y,Y=I,a=ug(y^L,a^I,32),I=S+(_=p)|0,I=(r=v+a|0)>>>0>>0?I+1|0:I,v=r,e=b,b=I,r=ug(r^N,e^I,24),e=I=p,L=r,I=I+Y|0,I=(I=(r=y+r|0)>>>0>>0?I+1|0:I)+(N=i[g+148>>2])|0,I=(y=r+i[g+144>>2]|0)>>>0>>0?I+1|0:I,Y=y,r=_,_=I,T=ug(y^a,r^I,16),I=b+(r=p)|0,I=(y=v+T|0)>>>0>>0?I+1|0:I,v=y,S=I,N=ug(L^y,e^I,63),y=p,b=c,L=f,I=c+s|0,c=a=f+IA|0,I=(I=a>>>0>>0?I+1|0:I)+(e=i[g+196>>2])|0,e=ug((a=f=a+i[g+192>>2]|0)^z,(f=a>>>0>>0?I+1|0:I)^l,32),I=J+(c=p)|0,b=ug(L^(s=H+e|0),(I=s>>>0>>0?I+1|0:I)^b,24),H=I,z=i[g+220>>2],l=b,R=s,I=(s=p)+f|0,f=a=a+b|0,I=(I=a>>>0>>0?I+1|0:I)+(L=z)|0,L=ug(b=(a=b=(J=i[g+216>>2])+a|0)^e,(e=f>>>0>a>>>0?I+1|0:I)^c,16),I=(I=H)+(H=p)|0,I=(f=L)>>>0>(b=R+f|0)>>>0?I+1|0:I,f=s,s=I,I=ug(l^b,f^I,63),O=i[g+236>>2],R=I,c=I,l=I+BA|0,I=(f=p)+F|0,I=(I=c>>>0>l>>>0?I+1|0:I)+O|0,q=ug((l=c=(F=l)+i[g+232>>2]|0)^q,(c=c>>>0>>0?I+1|0:I)^o,32),I=S+(F=p)|0,I=(o=v+q|0)>>>0>>0?I+1|0:I,v=o,S=f,f=I,I=ug(R^o,S^I,24),R=q,o=I,l=I+l|0,I=(S=p)+c|0,I=z+(o>>>0>l>>>0?I+1|0:I)|0,q=c=l+J|0,z=ug(R^c,(l=F)^(F=c>>>0>>0?I+1|0:I),16),I=f+(J=p)|0,I=(c=v+z|0)>>>0>>0?I+1|0:I,v=c,f=S,S=I,f=ug(o^c,f^I,63),c=p,R=u,I=rA+(o=m)|0,I=D+((u=(l=$)+u|0)>>>0>>0?I+1|0:I)|0,r=ug((l=m=w+u|0)^T,(m=w>>>0>m>>>0?I+1|0:I)^r,32),I=s+(D=p)|0,I=(w=b+r|0)>>>0>>0?I+1|0:I,b=w,s=I,u=o=ug(R^w,I^o,24),T=I=p,w=I,R=r,I=m+eA|0,I=(I=(o=W)>>>0>(r=o+l|0)>>>0?I+1|0:I)+w|0,BA=m=u+(o=r)|0,IA=ug(R^m,(r=D)^(D=o>>>0>m>>>0?I+1|0:I),16),I=s+(w=p)|0,l=ug((s=m=b+IA|0)^u,(o=s>>>0>>0?I+1|0:I)^T,63),b=p,m=t,I=t+E|0,I=_+((r=j)>>>0>(u=r+P|0)>>>0?I+1|0:I)|0,r=ug((_=t=Y+u|0)^L,(t=t>>>0>>0?I+1|0:I)^H,32),I=U+(H=p)|0,I=k>>>0>(Y=k+r|0)>>>0?I+1|0:I,k=Y,Y=m,m=I,u=Y=ug(k^P,Y^I,24),P=I=p,U=I,I=t+B|0,I=(I=(Y=K)>>>0>(_=Y+_|0)>>>0?I+1|0:I)+U|0,U=t=u+_|0,T=ug(t^r,(Y=H)^(H=t>>>0<_>>>0?I+1|0:I),16),I=m+(Y=p)|0,I=(t=k+T|0)>>>0>>0?I+1|0:I,k=t,_=I,u=ug(t^u,I^P,63),m=p,I=e+(t=y)|0,I=(I=(r=a+N|0)>>>0>>0?I+1|0:I)+(P=i[g+156>>2])|0,a=M,M=I=(y=r+i[g+152>>2]|0)>>>0>>0?I+1|0:I,e=ug(y^AA,a^I,32),I=d+(r=p)|0,I=(a=G+e|0)>>>0>>0?I+1|0:I,G=a,d=t,t=I,a=ug(a^N,d^I,24),N=I=p,R=a,I=M+I|0,I=(I=(a=a+y|0)>>>0>>0?I+1|0:I)+(P=i[g+204>>2])|0,L=y=a+i[g+200>>2]|0,a=ug(y^e,(M=y>>>0>>0?I+1|0:I)^r,16),I=t+(y=p)|0,I=(r=G+a|0)>>>0>>0?I+1|0:I,G=r,d=I,N=ug(R^r,N^I,63),t=p,P=a,I=F+Q|0,I=(I=(a=QA)>>>0>(e=a+q|0)>>>0?I+1|0:I)+(r=b)|0,b=F=(a=e)+l|0,e=ug(P^F,(e=y)^(y=a>>>0>F>>>0?I+1|0:I),32),I=_+(F=p)|0,I=(a=k+e|0)>>>0>>0?I+1|0:I,k=a,_=I,a=ug(a^l,I^r,24),r=I=p,l=a,I=y+I|0,I=(I=(a=a+b|0)>>>0>>0?I+1|0:I)+(P=i[g+132>>2])|0,q=b=a+i[g+128>>2]|0,AA=ug(b^e,(y=F)^(F=a>>>0>b>>>0?I+1|0:I),16),I=_+(a=p)|0,_=I=(b=k+AA|0)>>>0>>0?I+1|0:I,P=ug(l^(k=b),I^r,63),b=p,I=D+cA|0,I=(I=(r=V)>>>0>(e=r+BA|0)>>>0?I+1|0:I)+(y=m)|0,m=I=(r=e)>>>0>(D=r+u|0)>>>0?I+1|0:I,e=ug((r=D)^z,I^J,32),I=d+(J=p)|0,I=G>>>0>(D=G+e|0)>>>0?I+1|0:I,G=D,l=y,y=I,I=ug(D^u,l^I,24),u=i[g+164>>2],l=I,D=I,r=I+r|0,I=(d=p)+m|0,I=(I=r>>>0>>0?I+1|0:I)+u|0,I=(m=r+i[g+160>>2]|0)>>>0>>0?I+1|0:I,r=J,J=I,r=ug((D=m)^e,r^I,16),I=y+(e=p)|0,y=d,d=I=(m=G+r|0)>>>0>>0?I+1|0:I,m=ug(l^(G=m),y^I,63),y=p,l=t,R=N,I=t+H|0,I=(I=(u=U+N|0)>>>0>>0?I+1|0:I)+(z=i[g+196>>2])|0,N=ug((u=t=(H=u)+i[g+192>>2]|0)^IA,(t=t>>>0>>0?I+1|0:I)^w,32),I=S+(H=p)|0,w=I=(U=v+N|0)>>>0>>0?I+1|0:I,S=ug(R^U,I^l,24),z=I=p,v=I,R=S,I=t+yA|0,I=(I=(l=(S=Z)+u|0)>>>0>>0?I+1|0:I)+v|0,BA=t=R+(S=l)|0,IA=ug(t^N,(l=H)^(H=t>>>0>>0?I+1|0:I),16),I=w+(v=p)|0,I=(t=U+IA|0)>>>0>>0?I+1|0:I,U=t,l=ug(R^t,I^z,63),t=p,w=c,S=I,R=f,I=c+M|0,I=(I=(u=f+L|0)>>>0>>0?I+1|0:I)+(N=i[g+148>>2])|0,Y=ug((u=f=(c=u)+i[g+144>>2]|0)^T,(f=f>>>0>>0?I+1|0:I)^Y,32),I=o+(c=p)|0,I=s>>>0>(M=s+Y|0)>>>0?I+1|0:I,s=M,M=I,N=o=ug(R^s,I^w,24),T=I=p,w=I,L=Y,I=f+oA|0,I=(I=(o=(Y=x)+u|0)>>>0>>0?I+1|0:I)+w|0,w=f=N+o|0,z=ug(L^f,(Y=f>>>0>>0?I+1|0:I)^c,16),I=M+(c=p)|0,I=(f=s+z|0)>>>0>>0?I+1|0:I,s=f,M=I,o=ug(f^N,I^T,63),u=I=p,f=I,N=U,T=r,I=F+yA|0,F=r=(U=Z)+q|0,I=(I=r>>>0>>0?I+1|0:I)+f|0,e=ug(T^(r=U=r+o|0),(f=F>>>0>r>>>0?I+1|0:I)^e,32),I=(U=p)+S|0,S=I=(F=N+e|0)>>>0>>0?I+1|0:I,u=ug(o^F,u^I,24),q=I=p,o=I,N=e,e=(I=r)+(r=V)|0,I=f+cA|0,I=(I=r>>>0>e>>>0?I+1|0:I)+o|0,T=f=(r=e)+u|0,L=ug(N^f,(o=U)^(U=f>>>0>>0?I+1|0:I),16),I=S+(o=p)|0,I=(f=F+L|0)>>>0>>0?I+1|0:I,F=f,S=I,N=ug(f^u,I^q,63),f=p,I=eA+(r=b)|0,I=J+((e=W)>>>0>(u=e+P|0)>>>0?I+1|0:I)|0,v=ug((e=b=D+u|0)^IA,(b=e>>>0>>0?I+1|0:I)^v,32),I=M+(J=p)|0,M=I=s>>>0>(D=s+v|0)>>>0?I+1|0:I,I=ug((s=D)^P,I^r,24),P=i[g+204>>2],u=I,q=v,v=I,r=I+e|0,I=(D=p)+b|0,I=(I=r>>>0>>0?I+1|0:I)+P|0,P=b=r+i[g+200>>2]|0,q=ug(q^b,(e=J)^(J=b>>>0>>0?I+1|0:I),16),I=M+(v=p)|0,M=b=s+q|0,e=ug(u^b,(r=D)^(D=s>>>0>b>>>0?I+1|0:I),63),b=p,s=y,R=m,I=y+H|0,I=(I=(r=m+BA|0)>>>0>>0?I+1|0:I)+(u=i[g+220>>2])|0,r=ug((H=m=r+i[g+216>>2]|0)^z,(m=r>>>0>H>>>0?I+1|0:I)^c,32),I=_+(y=p)|0,_=s,s=I=(c=k+r|0)>>>0>>0?I+1|0:I,I=ug(R^c,_^I,24),z=i[g+156>>2],u=I,_=H,H=I,_=_+I|0,I=(k=p)+m|0,I=(I=H>>>0>_>>>0?I+1|0:I)+z|0,z=m=(H=_)+i[g+152>>2]|0,BA=ug(m^r,(H=m>>>0>>0?I+1|0:I)^y,16),I=s+(_=p)|0,y=ug(u^(s=m=c+BA|0),(r=k)^(k=c>>>0>s>>>0?I+1|0:I),63),c=p,m=t,I=t+Y|0,I=(I=(r=w+l|0)>>>0>>0?I+1|0:I)+(u=i[g+132>>2])|0,w=I=(t=r+i[g+128>>2]|0)>>>0>>0?I+1|0:I,a=ug(t^AA,I^a,32),I=d+(Y=p)|0,I=(r=G+a|0)>>>0>>0?I+1|0:I,G=r,u=m,m=I,r=ug(r^l,u^I,24),l=I=p,R=r,I=w+I|0,I=(I=(r=t+r|0)>>>0>>0?I+1|0:I)+(u=i[g+196>>2])|0,I=(t=r+i[g+192>>2]|0)>>>0>>0?I+1|0:I,w=t,r=Y,Y=I,a=ug(t^a,r^I,16),I=m+(t=p)|0,I=(r=G+a|0)>>>0>>0?I+1|0:I,G=r,d=I,u=ug(R^r,l^I,63),m=p,R=e,l=a,I=U+E|0,I=(I=(a=j)>>>0>(e=a+T|0)>>>0?I+1|0:I)+(r=b)|0,b=U=R+(a=e)|0,e=ug(l^U,(e=t)^(t=a>>>0>U>>>0?I+1|0:I),32),I=k+(U=p)|0,l=a=s+e|0,a=ug(R^a,(I=a>>>0>>0?I+1|0:I)^r,24),k=I,IA=i[g+148>>2],T=a,I=t+(s=p)|0,I=(I=(a=a+b|0)>>>0>>0?I+1|0:I)+(AA=IA)|0,O=ug((AA=b=(r=i[g+144>>2])+a|0)^e,(b=a>>>0>b>>>0?I+1|0:I)^U,16),I=(I=k)+(k=p)|0,I=(t=(U=O)+l|0)>>>0>>0?I+1|0:I,U=t,a=I,t=ug(T^t,I^s,63),s=p,R=y,I=(e=c)+J|0,I=(I=(l=y+P|0)>>>0>>0?I+1|0:I)+(T=i[g+236>>2])|0,o=ug((l=y=(c=l)+i[g+232>>2]|0)^L,(y=c>>>0>y>>>0?I+1|0:I)^o,32),I=d+(c=p)|0,d=I=G>>>0>(J=G+o|0)>>>0?I+1|0:I,P=e=ug(R^(G=J),I^e,24),T=I=p,J=I,R=o,I=y+rA|0,I=(I=(o=$)>>>0>(e=o+l|0)>>>0?I+1|0:I)+J|0,L=y=P+(o=e)|0,o=ug(R^y,(J=y>>>0>>0?I+1|0:I)^c,16),I=d+(e=p)|0,d=y=G+o|0,P=ug(y^P,(l=y>>>0>>0?I+1|0:I)^T,63),y=p,T=u,I=H+B|0,I=(I=(G=K)>>>0>(u=G+z|0)>>>0?I+1|0:I)+(c=m)|0,u=ug((m=G=T+(H=u)|0)^q,(G=G>>>0>>0?I+1|0:I)^v,32),I=S+(H=p)|0,S=ug(T^(v=F+u|0),(I=F>>>0>v>>>0?I+1|0:I)^c,24),F=I,z=i[g+164>>2],q=S,R=v,I=G+(c=p)|0,G=S=m+S|0,I=(I=S>>>0>>0?I+1|0:I)+(T=z)|0,S=H,H=I=(m=(v=i[g+160>>2])+G|0)>>>0>>0?I+1|0:I,iA=ug(m^u,S^I,16),I=(I=F)+(F=p)|0,S=I=(G=R+(S=iA)|0)>>>0>>0?I+1|0:I,q=ug(q^G,I^c,63),c=p,u=f,R=N,I=f+oA|0,I=Y+((N=x)>>>0>(T=R+N|0)>>>0?I+1|0:I)|0,_=ug((N=f=w+T|0)^BA,(f=f>>>0>>0?I+1|0:I)^_,32),I=D+(w=p)|0,D=I=(Y=M+_|0)>>>0>>0?I+1|0:I,T=u=ug(R^(M=Y),I^u,24),BA=I=p,Y=I,R=_,I=f+Q|0,I=(I=(u=(_=QA)+N|0)>>>0<_>>>0?I+1|0:I)+Y|0,Y=f=T+u|0,N=ug(R^f,(_=w)^(w=f>>>0>>0?I+1|0:I),16),I=D+(_=p)|0,I=(f=M+N|0)>>>0>>0?I+1|0:I,M=f,D=I,u=ug(f^T,I^BA,63),T=I=p,f=I,R=o,I=b+oA|0,b=o=x+AA|0,I=(I=o>>>0>>0?I+1|0:I)+f|0,e=ug(R^(o=x=o+u|0),(b=b>>>0>o>>>0?I+1|0:I)^e,32),I=S+(f=p)|0,oA=x=G+e|0,S=I=G>>>0>x>>>0?I+1|0:I,R=x=ug(u^x,T^I,24),I=(G=p)+b|0,I=(I=(o=o+x|0)>>>0>>0?I+1|0:I)+IA|0,T=ug((u=x=o+r|0)^e,(o=r>>>0>u>>>0?I+1|0:I)^f,16),I=(I=S)+(S=p)|0,oA=x=(b=T)+oA|0,f=ug(R^x,(b=b>>>0>x>>>0?I+1|0:I)^G,63),G=p,x=s,R=t,I=s+J|0,s=r=t+L|0,I=(I=r>>>0>>0?I+1|0:I)+(e=i[g+196>>2])|0,e=ug((r=t=r+i[g+192>>2]|0)^iA,(t=r>>>0>>0?I+1|0:I)^F,32),I=D+(s=p)|0,D=x,x=I=(F=M+e|0)>>>0>>0?I+1|0:I,R=I=ug(R^F,D^I,24),M=I,D=I+r|0,I=(J=p)+t|0,I=z+(D>>>0>>0?I+1|0:I)|0,z=t=D+v|0,L=ug(t^e,(r=s)^(s=t>>>0>>0?I+1|0:I),16),I=x+(M=p)|0,I=(t=F+L|0)>>>0>>0?I+1|0:I,F=t,r=J,J=I,r=ug(R^t,r^I,63),x=p,I=rA+(t=y)|0,I=H+((D=$)>>>0>(v=D+P|0)>>>0?I+1|0:I)|0,D=y=m+v|0,v=ug(y^N,(m=y>>>0>>0?I+1|0:I)^_,32),I=a+(y=p)|0,a=t,t=I=(H=U+v|0)>>>0>>0?I+1|0:I,a=_=ug(H^P,a^I,24),e=I=p,_=v,v=(I=D)+(D=Z)|0,I=m+yA|0,I=(I=D>>>0>v>>>0?I+1|0:I)+e|0,U=m=(D=v)+a|0,N=ug(_^m,(D=m>>>0>>0?I+1|0:I)^y,16),I=t+(v=p)|0,t=ug((P=m=H+N|0)^a,(m=m>>>0>>0?I+1|0:I)^e,63),y=p,H=c,I=c+B|0,I=w+((a=(_=K)+q|0)>>>0<_>>>0?I+1|0:I)|0,I=(c=Y+a|0)>>>0>>0?I+1|0:I,Y=c,c=I,_=ug(Y^O,I^k,32),I=l+(k=p)|0,I=(w=d+_|0)>>>0>>0?I+1|0:I,d=w,a=H,H=I,a=ug(w^q,a^I,24),l=I=p,w=I,e=_,_=(I=Y)+(Y=QA)|0,I=c+Q|0,I=(I=Y>>>0>_>>>0?I+1|0:I)+w|0,q=c=_+a|0,_=ug(e^c,(Y=k)^(k=c>>>0<_>>>0?I+1|0:I),16),I=H+(w=p)|0,I=(c=d+_|0)>>>0>>0?I+1|0:I,d=c,H=I,e=ug(c^a,I^l,63),c=p,a=r,l=_,I=o+cA|0,I=(I=(r=(_=V)+u|0)>>>0<_>>>0?I+1|0:I)+(Y=x)|0,_=o=a+r|0,x=I=o>>>0>>0?I+1|0:I,r=ug(l^o,I^w,32),I=(I=m)+(m=p)|0,o=Y,Y=I=r>>>0>(w=r+P|0)>>>0?I+1|0:I,I=ug(a^w,o^I,24),l=i[g+220>>2],a=I,P=r,o=_,_=I,r=o+I|0,I=(o=p)+x|0,I=(I=r>>>0<_>>>0?I+1|0:I)+l|0,P=ug(P^(u=x=r+i[g+216>>2]|0),(_=r>>>0>u>>>0?I+1|0:I)^m,16),I=Y+(r=p)|0,Y=I=w>>>0>(x=w+P|0)>>>0?I+1|0:I,x=ug(a^(w=x),I^o,63),m=p,R=t,I=(o=y)+s|0,y=a=t+z|0,I=(I=a>>>0>>0?I+1|0:I)+(l=i[g+204>>2])|0,S=ug((a=t=a+i[g+200>>2]|0)^T,(t=a>>>0>>0?I+1|0:I)^S,32),I=H+(y=p)|0,d=I=(s=d+S|0)>>>0>>0?I+1|0:I,l=o=ug(R^s,I^o,24),T=I=p,H=I,R=S,I=t+eA|0,I=(I=(o=(S=W)+a|0)>>>0>>0?I+1|0:I)+H|0,z=t=l+o|0,BA=ug(R^t,(H=t>>>0>>0?I+1|0:I)^y,16),I=d+(S=p)|0,I=(t=s+BA|0)>>>0>>0?I+1|0:I,s=t,d=I,t=ug(t^l,I^T,63),y=p,R=e,I=(o=c)+D|0,I=(e=e+U|0)>>>0>>0?I+1|0:I,U=e,I=I+(l=T=i[g+156>>2])|0,l=ug((e=c=(a=i[g+152>>2])+e|0)^L,(c=e>>>0>>0?I+1|0:I)^M,32),I=(I=b)+(b=p)|0,M=I=(U=l+oA|0)>>>0>>0?I+1|0:I,oA=o=ug(R^U,I^o,24),L=I=p,D=I,R=o,I=c+E|0,I=(I=(o=j)>>>0>(e=o+e|0)>>>0?I+1|0:I)+D|0,oA=c=oA+(o=e)|0,IA=ug(c^l,(D=c>>>0>>0?I+1|0:I)^b,16),I=M+(c=p)|0,I=(b=U+IA|0)>>>0>>0?I+1|0:I,U=b,M=I,l=ug(R^b,I^L,63),b=p,R=f,I=(o=G)+k|0,G=e=f+q|0,I=(I=e>>>0>>0?I+1|0:I)+(L=i[g+236>>2])|0,v=ug((e=f=e+i[g+232>>2]|0)^N,(G=e>>>0>>0?I+1|0:I)^v,32),I=J+(k=p)|0,N=f=F+v|0,f=ug(R^f,(I=f>>>0>>0?I+1|0:I)^o,24),J=I,L=i[g+132>>2],q=f,R=N,N=v,I=(F=p)+G|0,I=(I=(o=f+e|0)>>>0>>0?I+1|0:I)+L|0,I=(f=(v=i[g+128>>2])+o|0)>>>0>>0?I+1|0:I,G=f,o=k,k=I,N=ug(N^f,o^I,16),I=(I=J)+(J=p)|0,I=(f=R+(o=N)|0)>>>0>>0?I+1|0:I,o=f,f=F,F=I,q=I=ug(q^o,f^I,63),e=I,u=I+u|0,I=(f=p)+_|0,I=L+(e>>>0>u>>>0?I+1|0:I)|0,u=ug((e=_=u+v|0)^BA,(v=v>>>0>e>>>0?I+1|0:I)^S,32),I=M+(S=p)|0,I=U>>>0>(_=U+u|0)>>>0?I+1|0:I,U=_,_=f,f=I,q=_=ug(q^U,_^I,24),L=I=p,M=I,R=_,I=v+B|0,I=(I=(e=(_=K)+e|0)>>>0<_>>>0?I+1|0:I)+M|0,q=v=q+e|0,BA=ug(v^u,(M=v>>>0>>0?I+1|0:I)^S,16),I=f+(v=p)|0,I=U>>>0>(S=U+BA|0)>>>0?I+1|0:I,U=S,S=I,u=ug(R^U,I^L,63),f=p,_=m,R=x,I=m+H|0,m=e=x+z|0,I=(I=e>>>0>>0?I+1|0:I)+(L=i[g+148>>2])|0,z=ug((e=x=e+i[g+144>>2]|0)^IA,(x=m>>>0>e>>>0?I+1|0:I)^c,32),I=F+(m=p)|0,H=I=(c=o+z|0)>>>0>>0?I+1|0:I,L=I=ug(R^c,I^_,24),o=I,_=I+e|0,I=(F=p)+x|0,I=T+(o>>>0>_>>>0?I+1|0:I)|0,T=x=a+_|0,z=ug(x^z,(o=a>>>0>x>>>0?I+1|0:I)^m,16),I=H+(_=p)|0,m=ug(L^(H=x=c+z|0),(a=F)^(F=c>>>0>H>>>0?I+1|0:I),63),c=p,x=y,L=t,I=y+D|0,y=a=t+oA|0,I=(I=a>>>0>>0?I+1|0:I)+(e=i[g+164>>2])|0,e=ug((a=t=a+i[g+160>>2]|0)^N,(t=a>>>0>>0?I+1|0:I)^J,32),I=Y+(y=p)|0,Y=x,x=I=w>>>0>(J=w+e|0)>>>0?I+1|0:I,w=ug(L^J,Y^I,24),N=I=p,D=I,R=w,I=t+Q|0,I=(I=(w=QA)>>>0>(Y=w+a|0)>>>0?I+1|0:I)+D|0,oA=t=R+(w=Y)|0,L=ug(t^e,(D=t>>>0>>0?I+1|0:I)^y,16),I=x+(w=p)|0,I=(t=J+L|0)>>>0>>0?I+1|0:I,J=t,Y=I,t=ug(R^t,I^N,63),y=p,x=b,I=b+yA|0,I=k+((a=Z)>>>0>(e=a+l|0)>>>0?I+1|0:I)|0,r=ug((a=b=G+e|0)^P,(b=a>>>0>>0?I+1|0:I)^r,32),I=d+(G=p)|0,e=x,x=I=s>>>0>(k=s+r|0)>>>0?I+1|0:I,e=k=ug((s=k)^l,e^I,24),l=I=p,N=r,I=b+rA|0,I=(I=(r=(k=$)+a|0)>>>0>>0?I+1|0:I)+l|0,d=b=e+r|0,r=ug(N^b,(a=G)^(G=b>>>0>>0?I+1|0:I),16),I=x+(k=p)|0,l=ug((a=b=s+r|0)^e,(b=s>>>0>a>>>0?I+1|0:I)^l,63),x=p,s=c,N=m,P=r,I=c+M|0,I=(I=(r=m+q|0)>>>0>>0?I+1|0:I)+(e=i[g+196>>2])|0,r=ug(P^(M=m=r+i[g+192>>2]|0),(m=r>>>0>m>>>0?I+1|0:I)^k,32),I=Y+(c=p)|0,e=s,s=I=(k=J+r|0)>>>0>>0?I+1|0:I,I=ug(N^k,e^I,24),N=i[g+204>>2],e=I,Y=M,M=I,Y=Y+I|0,I=(J=p)+m|0,I=(I=Y>>>0>>0?I+1|0:I)+N|0,P=m=Y+i[g+200>>2]|0,q=ug(m^r,(M=m>>>0>>0?I+1|0:I)^c,16),I=s+(Y=p)|0,m=ug(e^(s=m=k+q|0),(k=s>>>0>>0?I+1|0:I)^J,63),c=p,J=y,N=t,R=a,I=y+o|0,I=(I=(a=t+T|0)>>>0>>0?I+1|0:I)+(e=IA=i[g+212>>2])|0,a=ug((o=t=(r=i[g+208>>2])+a|0)^BA,(t=t>>>0>>0?I+1|0:I)^v,32),I=(I=b)+(b=p)|0,e=J,J=I=(y=R+a|0)>>>0>>0?I+1|0:I,I=ug(N^y,e^I,24),N=i[g+220>>2],R=I,e=a,a=o,o=I,a=a+I|0,I=(v=p)+t|0,I=(I=a>>>0>>0?I+1|0:I)+N|0,T=t=a+i[g+216>>2]|0,a=ug(e^t,(o=t>>>0>>0?I+1|0:I)^b,16),I=J+(e=p)|0,J=b=y+a|0,b=ug(R^b,(t=v)^(v=y>>>0>b>>>0?I+1|0:I),63),t=p,R=l,I=D+E|0,I=(I=(l=j)>>>0>(N=l+oA|0)>>>0?I+1|0:I)+(y=x)|0,N=ug((x=D=R+(l=N)|0)^z,(D=D>>>0>>0?I+1|0:I)^_,32),I=S+(_=p)|0,I=U>>>0>(l=U+N|0)>>>0?I+1|0:I,U=l,l=y,y=I,l=ug(R^U,l^I,24),S=I=p,R=l,I=D+I|0,I=(I=(l=l+x|0)>>>0>>0?I+1|0:I)+(z=i[g+236>>2])|0,oA=x=(D=l)+i[g+232>>2]|0,z=ug(x^N,(D=D>>>0>x>>>0?I+1|0:I)^_,16),I=y+(_=p)|0,N=ug(R^(y=x=U+z|0),(U=U>>>0>y>>>0?I+1|0:I)^S,63),x=p,S=f,R=u,I=f+eA|0,I=G+((u=(l=W)+u|0)>>>0>>0?I+1|0:I)|0,w=ug((l=f=d+u|0)^L,(f=f>>>0>>0?I+1|0:I)^w,32),I=F+(G=p)|0,H=I=H>>>0>(d=H+w|0)>>>0?I+1|0:I,u=S=ug(R^d,I^S,24),L=I=p,F=I,R=w,I=f+cA|0,I=(I=(w=V)>>>0>(S=w+l|0)>>>0?I+1|0:I)+F|0,F=f=u+(w=S)|0,l=ug(R^f,(l=G)^(G=f>>>0>>0?I+1|0:I),16),I=H+(w=p)|0,I=(f=d+l|0)>>>0>>0?I+1|0:I,d=f,H=I,S=ug(f^u,I^L,63),u=I=p,f=I,L=a,I=M+eA|0,M=a=P+W|0,I=(I=a>>>0>>0?I+1|0:I)+f|0,e=ug(L^(a=W=a+S|0),(W=M>>>0>a>>>0?I+1|0:I)^e,32),I=U+(f=p)|0,U=I=y>>>0>(M=y+e|0)>>>0?I+1|0:I,P=I=ug(S^(y=M),u^I,24),S=I,a=I+a|0,I=(M=p)+W|0,I=IA+(a>>>0>>0?I+1|0:I)|0,u=ug((u=e)^(e=W=a+r|0),(S=r>>>0>e>>>0?I+1|0:I)^f,16),I=U+(r=p)|0,y=ug(P^(U=W=y+u|0),(a=M)^(M=y>>>0>U>>>0?I+1|0:I),63),f=p,W=c,L=m,I=c+o|0,c=a=m+T|0,I=(I=a>>>0>>0?I+1|0:I)+(P=i[g+164>>2])|0,_=ug((a=m=a+i[g+160>>2]|0)^z,(m=c>>>0>a>>>0?I+1|0:I)^_,32),I=H+(c=p)|0,I=(o=d+_|0)>>>0>>0?I+1|0:I,d=o,H=W,W=I,I=ug(L^o,H^I,24),T=i[g+196>>2],L=I,P=_,o=I,_=I+a|0,I=(H=p)+m|0,I=(I=o>>>0>_>>>0?I+1|0:I)+T|0,P=ug(P^(a=m=(o=_)+i[g+192>>2]|0),(_=c)^(c=o>>>0>a>>>0?I+1|0:I),16),I=W+(T=p)|0,I=(m=d+P|0)>>>0>>0?I+1|0:I,d=m,o=H,H=I,o=ug(L^m,o^I,63),W=p,m=t,L=b,I=t+D|0,I=(I=(_=b+oA|0)>>>0>>0?I+1|0:I)+(eA=i[g+204>>2])|0,w=ug((_=b=(t=_)+i[g+200>>2]|0)^l,(b=t>>>0>b>>>0?I+1|0:I)^w,32),I=k+(t=p)|0,I=s>>>0>(D=s+w|0)>>>0?I+1|0:I,s=D,D=m,m=I,l=D=ug(L^s,D^I,24),eA=I=p,k=I,L=D,I=b+cA|0,I=(I=(D=_+V|0)>>>0>>0?I+1|0:I)+k|0,l=ug((_=V=l+D|0)^w,(l=t)^(t=D>>>0>_>>>0?I+1|0:I),16),I=m+(k=p)|0,D=I=s>>>0>(V=s+l|0)>>>0?I+1|0:I,V=ug(L^(s=V),I^eA,63),b=p,I=G+(m=x)|0,G=w=F+N|0,I=(I=w>>>0>>0?I+1|0:I)+(eA=i[g+236>>2])|0,Y=ug((w=x=w+i[g+232>>2]|0)^q,(x=G>>>0>w>>>0?I+1|0:I)^Y,32),I=v+(G=p)|0,v=m,m=I=(F=J+Y|0)>>>0>>0?I+1|0:I,v=ug(F^N,v^I,24),q=I=p,J=I,I=x+yA|0,I=(I=(w=w+Z|0)>>>0>>0?I+1|0:I)+J|0,N=ug((J=Z=w+v|0)^Y,(N=G)^(G=w>>>0>J>>>0?I+1|0:I),16),I=m+(yA=p)|0,w=I=F>>>0>(Z=F+N|0)>>>0?I+1|0:I,x=ug(v^(F=Z),I^q,63),m=p,I=S+B|0,I=(I=(v=e+K|0)>>>0>>0?I+1|0:I)+(Y=W)|0,I=v>>>0>(K=v+o|0)>>>0?I+1|0:I,v=K,K=I,I=E+I|0,j=I=(Y=j+v|0)>>>0>>0?I+1|0:I,e=Y,Y=ug(v^N,K^yA,32),I=D+(v=p)|0,S=ug((D=K=s+Y|0)^o,(K=s>>>0>D>>>0?I+1|0:I)^W,24),I=(o=p)+j|0,I=(s=S)>>>0>(W=e+s|0)>>>0?I+1|0:I,s=W,i[g>>2]=s,i[g+4>>2]=I,Z=I,I=ug(s^Y,I^v,16),Y=W=p,i[g+120>>2]=I,i[g+124>>2]=Y,j=I,D=I+D|0,I=Y+K|0,i[g+80>>2]=D,I=D>>>0>>0?I+1|0:I,i[g+84>>2]=I,hA=g,DA=ug(S^D,I^o,63),i[hA+40>>2]=DA,i[g+44>>2]=p,K=b,o=V,I=c+b|0,I=(I=(j=a+V|0)>>>0>>0?I+1|0:I)+(D=i[g+132>>2])|0,j=I=(V=j+i[g+128>>2]|0)>>>0>>0?I+1|0:I,c=ug(V^u,I^r,32),I=w+(D=p)|0,a=K,K=I=F>>>0>(b=F+c|0)>>>0?I+1|0:I,w=ug(o^(F=b),a^I,24),I=j+(Y=p)|0,I=(b=w+V|0)>>>0>>0?I+1|0:I,V=(j=i[g+144>>2])+b|0,I=i[g+148>>2]+I|0,I=V>>>0>>0?I+1|0:I,i[g+8>>2]=V,i[g+12>>2]=I,I=ug(c^V,I^D,16),b=W=p,i[g+96>>2]=I,i[g+100>>2]=b,V=I,j=I+F|0,I=b+K|0,K=j,i[g+88>>2]=K,I=V>>>0>K>>>0?I+1|0:I,i[g+92>>2]=I,hA=g,DA=ug(w^K,I^Y,63),i[hA+48>>2]=DA,i[g+52>>2]=p,a=$,I=t+m|0,I=(I=(V=_+x|0)>>>0>>0?I+1|0:I)+(j=i[g+220>>2])|0,I=(W=V+i[g+216>>2]|0)>>>0>>0?I+1|0:I,$=W,j=W,V=a+W|0,W=I,I=I+rA|0,I=V>>>0>>0?I+1|0:I,j=V,V=I,a=j,o=x,j=ug(P^$,W^T,32),I=M+(x=p)|0,m=ug(o^(b=W=U+j|0),(W=U>>>0>b>>>0?I+1|0:I)^m,24),I=(c=p)+V|0,V=$=a+(t=m)|0,i[g+16>>2]=V,I=t>>>0>V>>>0?I+1|0:I,i[g+20>>2]=I,I=ug(V^j,I^x,16),K=p,i[g+104>>2]=I,i[g+108>>2]=K,V=I,$=I+b|0,I=W+K|0,W=$,i[g+64>>2]=W,I=V>>>0>W>>>0?I+1|0:I,i[g+68>>2]=I,hA=g,DA=ug(t^W,I^c,63),i[hA+56>>2]=DA,i[g+60>>2]=p,I=f+Q|0,I=(I=(V=y+QA|0)>>>0>>0?I+1|0:I)+G|0,QA=I=J>>>0>(V=J+V|0)>>>0?I+1|0:I,x=ug(V^l,I^k,32),I=H+(b=p)|0,K=I=d>>>0>($=d+x|0)>>>0?I+1|0:I,m=ug($^y,f^I,24),I=QA+(t=p)|0,I=V>>>0>(j=m+V|0)>>>0?I+1|0:I,V=(QA=i[g+152>>2])+j|0,I=i[g+156>>2]+I|0,I=V>>>0>>0?I+1|0:I,i[g+24>>2]=V,i[g+28>>2]=I,I=ug(x^V,I^b,16),i[g+112>>2]=I,QA=p,i[g+116>>2]=QA,V=I+$|0,I=K+QA|0,K=V,i[g+72>>2]=K,I=K>>>0<$>>>0?I+1|0:I,i[g+76>>2]=I,hA=g,DA=ug(m^K,I^t,63),i[hA+32>>2]=DA,i[g+36>>2]=p,I=i[g+68>>2]^(n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24)^Z,K=i[g+64>>2]^(n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24)^s,C[0|A]=K,C[A+1|0]=K>>>8,C[A+2|0]=K>>>16,C[A+3|0]=K>>>24,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24,Z=1;I=(K=Z<<3)+A|0,W=K=g+K|0,V=i[K>>2]^(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24),QA=i[(K=K- -64|0)>>2],K=i[K+4>>2]^i[W+4>>2]^(n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24),W=V^QA,C[0|I]=W,C[I+1|0]=W>>>8,C[I+2|0]=W>>>16,C[I+3|0]=W>>>24,C[I+4|0]=K,C[I+5|0]=K>>>8,C[I+6|0]=K>>>16,C[I+7|0]=K>>>24,8!=(0|(Z=Z+1|0)););h=g+256|0}function F(A,I,g,B){var Q=0,C=0,E=0,n=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0;for(function(A,I){for(var g=0,B=0,Q=0,C=0,E=0;C=Q=(B=g<<3)+A|0,E=dA(I+B|0),i[C>>2]=E,i[Q+4>>2]=p,16!=(0|(g=g+1|0)););}(g,I),I=X(B,A,64),o=i[g>>2],f=i[g+4>>2],B=0;;){if(Q=ug(l=i[(E=I)+32>>2],t=i[E+36>>2],14),s=p,Q=ug(l,t,18)^Q,D=p^s,C=o,o=ug(l,t,41)^Q,Q=(p^D)+f|0,Q=o>>>0>(s=C+o|0)>>>0?Q+1|0:Q,o=s,y=i[E+48>>2],o=(D=i[(f=34784+(L=B<<3)|0)>>2])+o|0,Q=i[f+4>>2]+Q|0,Q=o>>>0>>0?Q+1|0:Q,o=(f=y^((k=i[E+40>>2])^y)&l)+o|0,Q=(((C=i[E+52>>2])^(u=i[E+44>>2]))&t^C)+Q|0,Q=o>>>0>>0?Q+1|0:Q,s=(a=o)+(o=i[E+56>>2])|0,Q=i[E+60>>2]+Q|0,Q=o>>>0>s>>>0?Q+1|0:Q,f=s+(D=i[E+24>>2])|0,o=Q,Q=Q+i[E+28>>2]|0,Q=f>>>0>>0?Q+1|0:Q,D=f,c=Q,i[E+24>>2]=f,i[E+28>>2]=Q,Q=ug(F=i[E>>2],f=i[E+4>>2],28),h=p,Q=ug(F,f,34)^Q,n=p^h,h=s+(ug(F,f,39)^Q)|0,Q=o+(p^n)|0,Q=s>>>0>h>>>0?Q+1|0:Q,s=(a=F&((n=i[E+16>>2])|(r=i[E+8>>2]))|n&r)+h|0,Q=(f&((h=i[E+20>>2])|(o=i[E+12>>2]))|o&h)+Q|0,s=Q=a>>>0>(e=s)>>>0?Q+1|0:Q,i[E+56>>2]=e,i[E+60>>2]=Q,Q=ug(D,c,14),a=p,d=ug(D,c,18)^Q,a^=p,w=n,Q=((t^u)&c^u)+C|0,Q=(n=(l^k)&D^k)>>>0>(y=n+y|0)>>>0?Q+1|0:Q,C=ug(D,c,41)^d,Q=(p^a)+Q|0,Q=C>>>0>(y=C+y|0)>>>0?Q+1|0:Q,y=(a=i[(n=d=(C=(1|B)<<3)+g|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=a>>>0>y>>>0?Q+1|0:Q,y=(n=i[(C=C+34784|0)>>2])+y|0,Q=i[C+4>>2]+Q|0,n=Q=n>>>0>y>>>0?Q+1|0:Q,Q=Q+h|0,h=y=w+(C=a=y)|0,C=Q=C>>>0>y>>>0?Q+1|0:Q,i[E+16>>2]=y,i[E+20>>2]=Q,y=E,Q=ug(e,s,28),E=p,G=ug(e,s,34)^Q,H=p^E,E=(Q=a)+(a=(r|F)&e|r&F)|0,Q=((o|f)&s|o&f)+n|0,Q=E>>>0>>0?Q+1|0:Q,n=ug(e,s,39)^G,Q=(p^H)+Q|0,G=E=n+E|0,E=Q=E>>>0>>0?Q+1|0:Q,i[y+48>>2]=G,i[y+52>>2]=Q,a=y,Q=ug(h,C,14),y=p,n=ug(h,C,18)^Q,H=p^y,w=r,Q=((t^c)&C^t)+u|0,Q=(r=(D^l)&h^l)>>>0>(y=r+k|0)>>>0?Q+1|0:Q,n=ug(h,C,41)^n,Q=(p^H)+Q|0,Q=n>>>0>(y=n+y|0)>>>0?Q+1|0:Q,y=(k=i[(r=U=(n=(2|B)<<3)+g|0)>>2])+y|0,Q=i[r+4>>2]+Q|0,Q=y>>>0>>0?Q+1|0:Q,y=(r=i[(n=n+34784|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=r>>>0>y>>>0?Q+1|0:Q,y=w+(n=r=y)|0,w=o,o=Q,Q=w+Q|0,n=Q=n>>>0>y>>>0?Q+1|0:Q,i[a+8>>2]=y,i[a+12>>2]=Q,Q=ug(G,E,28),k=p,u=ug(G,E,34)^Q,k^=p,Q=((f|s)&E|f&s)+o|0,Q=(r=(H=(e|F)&G|e&F)+r|0)>>>0>>0?Q+1|0:Q,o=r,r=ug(G,E,39)^u,Q=(p^k)+Q|0,k=o=o+r|0,o=Q=o>>>0>>0?Q+1|0:Q,i[a+40>>2]=k,i[a+44>>2]=Q,r=a,Q=ug(y,n,14),a=p,u=ug(y,n,18)^Q,H=p^a,w=F,Q=(c^(C^c)&n)+t|0,Q=(a=(F=D^(h^D)&y)+l|0)>>>0>>0?Q+1|0:Q,t=a,a=ug(y,n,41)^u,Q=(p^H)+Q|0,Q=a>>>0>(t=t+a|0)>>>0?Q+1|0:Q,t=(u=i[(l=F=(a=(3|B)<<3)+g|0)>>2])+t|0,Q=i[l+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=(l=i[(a=a+34784|0)>>2])+t|0,Q=i[a+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,l=t,t=w+(a=t)|0,w=f,f=Q,Q=w+Q|0,a=Q=a>>>0>t>>>0?Q+1|0:Q,i[r>>2]=t,i[r+4>>2]=Q,Q=ug(k,o,28),u=p,H=ug(k,o,34)^Q,u^=p,Q=((E|s)&o|E&s)+f|0,Q=(l=(v=(e|G)&k|e&G)+l|0)>>>0>>0?Q+1|0:Q,f=l,l=ug(k,o,39)^H,Q=(p^u)+Q|0,Q=(f=f+l|0)>>>0>>0?Q+1|0:Q,l=f,f=Q,i[r+32>>2]=l,i[r+36>>2]=Q,Q=ug(t,a,14),u=p,H=ug(t,a,18)^Q,u^=p,w=e,Q=c+(C^(C^n)&a)|0,Q=(e=D+(h^(y^h)&t)|0)>>>0>>0?Q+1|0:Q,c=ug(t,a,41)^H,Q=(p^u)+Q|0,Q=c>>>0>(D=c+e|0)>>>0?Q+1|0:Q,D=(u=i[(e=S=(c=(4|B)<<3)+g|0)>>2])+D|0,Q=i[e+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,D=(e=i[(c=c+34784|0)>>2])+D|0,Q=i[c+4>>2]+Q|0,c=s,s=Q=e>>>0>D>>>0?Q+1|0:Q,Q=c+Q|0,c=Q=(e=D)>>>0>(D=w+e|0)>>>0?Q+1|0:Q,i[r+56>>2]=D,i[r+60>>2]=Q,Q=ug(l,f,28),u=p,H=ug(l,f,34)^Q,u^=p,Q=((E|o)&f|E&o)+s|0,Q=(e=(v=(k|G)&l|k&G)+e|0)>>>0>>0?Q+1|0:Q,s=e,e=ug(l,f,39)^H,Q=(p^u)+Q|0,u=s=s+e|0,s=Q=e>>>0>s>>>0?Q+1|0:Q,i[r+24>>2]=u,i[r+28>>2]=Q,Q=ug(D,c,14),e=p,H=ug(D,c,18)^Q,v=p^e,w=G,Q=C+(n^(n^a)&c)|0,Q=(e=h+(y^(t^y)&D)|0)>>>0>>0?Q+1|0:Q,C=ug(D,c,41)^H,Q=(p^v)+Q|0,Q=C>>>0>(h=C+e|0)>>>0?Q+1|0:Q,h=(H=i[(e=G=(C=(5|B)<<3)+g|0)>>2])+h|0,Q=i[e+4>>2]+Q|0,Q=h>>>0>>0?Q+1|0:Q,h=(e=i[(C=C+34784|0)>>2])+h|0,Q=i[C+4>>2]+Q|0,Q=e>>>0>h>>>0?Q+1|0:Q,h=w+(C=e=h)|0,w=E,E=Q,Q=w+Q|0,C=Q=C>>>0>h>>>0?Q+1|0:Q,i[r+48>>2]=h,i[r+52>>2]=Q,Q=ug(u,s,28),H=p,v=ug(u,s,34)^Q,H^=p,Q=((o|f)&s|o&f)+E|0,Q=(e=(_=(l|k)&u|l&k)+e|0)>>>0<_>>>0?Q+1|0:Q,E=e,e=ug(u,s,39)^v,Q=(p^H)+Q|0,v=E=E+e|0,E=Q=E>>>0>>0?Q+1|0:Q,i[r+16>>2]=v,i[r+20>>2]=Q,Q=ug(h,C,14),e=p,H=ug(h,C,18)^Q,_=p^e,w=k,Q=n+(a^(a^c)&C)|0,Q=(e=y+(t^(t^D)&h)|0)>>>0>>0?Q+1|0:Q,n=ug(h,C,41)^H,Q=(p^_)+Q|0,Q=n>>>0>(y=n+e|0)>>>0?Q+1|0:Q,y=(k=i[(e=R=(n=(6|B)<<3)+g|0)>>2])+y|0,Q=i[e+4>>2]+Q|0,Q=y>>>0>>0?Q+1|0:Q,y=(e=i[(n=n+34784|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=e>>>0>y>>>0?Q+1|0:Q,y=w+(n=e=y)|0,w=o,o=Q,Q=w+Q|0,n=Q=n>>>0>y>>>0?Q+1|0:Q,i[r+40>>2]=y,i[r+44>>2]=Q,Q=ug(v,E,28),k=p,H=ug(v,E,34)^Q,k^=p,Q=((f|s)&E|f&s)+o|0,Q=(e=(_=(u|l)&v|u&l)+e|0)>>>0<_>>>0?Q+1|0:Q,o=e,e=ug(v,E,39)^H,Q=(p^k)+Q|0,_=o=o+e|0,o=Q=o>>>0>>0?Q+1|0:Q,i[r+8>>2]=_,i[r+12>>2]=Q,Q=ug(y,n,14),e=p,k=ug(y,n,18)^Q,H=p^e,w=l,Q=a+(c^(C^c)&n)|0,Q=(e=t+(D^(h^D)&y)|0)>>>0>>0?Q+1|0:Q,a=ug(y,n,41)^k,Q=(p^H)+Q|0,Q=a>>>0>(t=a+e|0)>>>0?Q+1|0:Q,t=(l=i[(e=k=(a=(7|B)<<3)+g|0)>>2])+t|0,Q=i[e+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=(e=i[(a=a+34784|0)>>2])+t|0,Q=i[a+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=w+(a=e=t)|0,w=f,f=Q,Q=w+Q|0,a=Q=a>>>0>t>>>0?Q+1|0:Q,i[r+32>>2]=t,i[r+36>>2]=Q,Q=ug(_,o,28),l=p,H=ug(_,o,34)^Q,l^=p,Q=((E|s)&o|E&s)+f|0,Q=(e=(w=(u|v)&_|u&v)+e|0)>>>0>>0?Q+1|0:Q,f=e,e=ug(_,o,39)^H,Q=(p^l)+Q|0,w=f=f+e|0,f=Q=e>>>0>f>>>0?Q+1|0:Q,i[r>>2]=w,i[r+4>>2]=Q,e=r,Q=ug(t,a,14),r=p,l=ug(t,a,18)^Q,H=p^r,Q=c+(C^(C^n)&a)|0,Q=(r=D+(h^(y^h)&t)|0)>>>0>>0?Q+1|0:Q,c=ug(t,a,41)^l,Q=(p^H)+Q|0,Q=c>>>0>(D=c+r|0)>>>0?Q+1|0:Q,D=(l=i[(r=H=(c=(8|B)<<3)+g|0)>>2])+D|0,Q=i[r+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,D=(r=i[(c=c+34784|0)>>2])+D|0,Q=i[c+4>>2]+Q|0,Q=r>>>0>D>>>0?Q+1|0:Q,l=D,r=s,s=Q,Q=r+Q|0,r=Q=(c=D)>>>0>(D=c+u|0)>>>0?Q+1|0:Q,i[e+24>>2]=D,i[e+28>>2]=Q,c=e,Q=ug(w,f,28),e=p,u=ug(w,f,34)^Q,Y=p^e,e=(Q=l)+(l=(_|v)&w|_&v)|0,Q=((E|o)&f|E&o)+s|0,Q=e>>>0>>0?Q+1|0:Q,s=e,e=ug(w,f,39)^u,Q=(p^Y)+Q|0,Y=s=s+e|0,s=Q=e>>>0>s>>>0?Q+1|0:Q,i[c+56>>2]=Y,i[c+60>>2]=Q,Q=ug(D,r,14),e=p,l=ug(D,r,18)^Q,u=p^e,Q=C+(n^(n^a)&r)|0,Q=(e=h+(y^(t^y)&D)|0)>>>0>>0?Q+1|0:Q,C=ug(D,r,41)^l,Q=(p^u)+Q|0,Q=C>>>0>(h=C+e|0)>>>0?Q+1|0:Q,h=(u=i[(e=l=(C=(9|B)<<3)+g|0)>>2])+h|0,Q=i[e+4>>2]+Q|0,Q=h>>>0>>0?Q+1|0:Q,h=(e=i[(C=C+34784|0)>>2])+h|0,Q=i[C+4>>2]+Q|0,Q=e>>>0>h>>>0?Q+1|0:Q,e=E,E=Q,Q=e+Q|0,e=Q=(C=h)>>>0>(h=C+v|0)>>>0?Q+1|0:Q,i[c+16>>2]=h,i[c+20>>2]=Q,Q=ug(Y,s,28),u=p,v=ug(Y,s,34)^Q,u^=p,Q=((o|f)&s|o&f)+E|0,Q=(C=(b=(w|_)&Y|w&_)+C|0)>>>0>>0?Q+1|0:Q,E=C,C=ug(Y,s,39)^v,Q=(p^u)+Q|0,b=E=E+C|0,E=Q=E>>>0>>0?Q+1|0:Q,i[c+48>>2]=b,i[c+52>>2]=Q,Q=ug(h,e,14),C=p,u=ug(h,e,18)^Q,v=p^C,Q=n+(a^(r^a)&e)|0,Q=(C=y+(t^(t^D)&h)|0)>>>0>>0?Q+1|0:Q,n=C,C=ug(h,e,41)^u,Q=(p^v)+Q|0,Q=C>>>0>(y=n+C|0)>>>0?Q+1|0:Q,y=(u=i[(n=v=(C=(10|B)<<3)+g|0)>>2])+y|0,Q=i[n+4>>2]+Q|0,Q=y>>>0>>0?Q+1|0:Q,y=(n=i[(C=C+34784|0)>>2])+y|0,Q=i[C+4>>2]+Q|0,Q=n>>>0>y>>>0?Q+1|0:Q,u=y,n=o,o=Q,Q=n+Q|0,n=Q=(C=y)>>>0>(y=C+_|0)>>>0?Q+1|0:Q,i[c+8>>2]=y,i[c+12>>2]=Q,C=c,Q=ug(b,E,28),c=p,_=ug(b,E,34)^Q,N=p^c,c=(Q=u)+(u=(w|Y)&b|w&Y)|0,Q=((f|s)&E|f&s)+o|0,Q=c>>>0>>0?Q+1|0:Q,o=c,c=ug(b,E,39)^_,Q=(p^N)+Q|0,c=Q=(o=o+c|0)>>>0>>0?Q+1|0:Q,i[C+40>>2]=o,i[C+44>>2]=Q,Q=ug(y,n,14),u=p,_=ug(y,n,18)^Q,N=p^u,m=w,Q=a+(r^(r^e)&n)|0,Q=(u=t+(D^(h^D)&y)|0)>>>0>>0?Q+1|0:Q,a=ug(y,n,41)^_,Q=(p^N)+Q|0,Q=a>>>0>(t=a+u|0)>>>0?Q+1|0:Q,t=(w=i[(u=(a=(11|B)<<3)+g|0)>>2])+t|0,Q=i[u+4>>2]+Q|0,Q=t>>>0>>0?Q+1|0:Q,t=(_=i[(a=a+34784|0)>>2])+t|0,Q=i[a+4>>2]+Q|0,Q=t>>>0<_>>>0?Q+1|0:Q,w=t,_=f,f=Q,Q=_+Q|0,a=Q=(a=t)>>>0>(t=m+a|0)>>>0?Q+1|0:Q,i[C>>2]=t,i[C+4>>2]=Q,_=C,Q=ug(o,c,28),C=p,N=ug(o,c,34)^Q,M=p^C,C=(Q=w)+(w=(Y|b)&o|Y&b)|0,Q=((E|s)&c|E&s)+f|0,Q=C>>>0>>0?Q+1|0:Q,f=C,C=ug(o,c,39)^N,Q=(p^M)+Q|0,C=Q=C>>>0>(f=f+C|0)>>>0?Q+1|0:Q,i[_+32>>2]=f,i[_+36>>2]=Q,w=_,Q=ug(t,a,14),_=p,N=ug(t,a,18)^Q,M=p^_,m=Y,Q=r+(e^(n^e)&a)|0,Q=(_=D+(h^(y^h)&t)|0)>>>0>>0?Q+1|0:Q,r=ug(t,a,41)^N,Q=(p^M)+Q|0,Q=r>>>0>(D=r+_|0)>>>0?Q+1|0:Q,D=(N=i[(Y=_=(r=(12|B)<<3)+g|0)>>2])+D|0,Q=i[Y+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,D=(Y=i[(r=r+34784|0)>>2])+D|0,Q=i[r+4>>2]+Q|0,Q=D>>>0>>0?Q+1|0:Q,Y=D,D=m+(r=D)|0,m=s,s=Q,Q=m+Q|0,N=D,D=Q=r>>>0>D>>>0?Q+1|0:Q,i[w+56>>2]=N,i[w+60>>2]=Q,r=w,Q=ug(f,C,28),w=p,M=ug(f,C,34)^Q,m=p^w,w=(Q=Y)+(Y=(o|b)&f|o&b)|0,Q=((E|c)&C|E&c)+s|0,Q=w>>>0>>0?Q+1|0:Q,s=w,w=ug(f,C,39)^M,Q=(p^m)+Q|0,Y=s=s+w|0,s=Q=s>>>0>>0?Q+1|0:Q,i[r+24>>2]=Y,i[r+28>>2]=Q,w=r,Q=ug(N,D,14),r=p,M=ug(N,D,18)^Q,m=p^r,P=b,Q=e+(n^(n^a)&D)|0,Q=(r=h+(y^(t^y)&N)|0)>>>0>>0?Q+1|0:Q,e=r,r=ug(N,D,41)^M,Q=(p^m)+Q|0,Q=r>>>0>(h=e+r|0)>>>0?Q+1|0:Q,r=(r=h)+(M=i[(h=(e=(13|B)<<3)+g|0)>>2])|0,Q=i[h+4>>2]+Q|0,Q=r>>>0>>0?Q+1|0:Q,r=(b=i[(e=e+34784|0)>>2])+r|0,Q=i[e+4>>2]+Q|0,Q=r>>>0>>0?Q+1|0:Q,b=r,e=r,m=E,E=Q,Q=m+Q|0,M=r=P+r|0,r=Q=r>>>0>>0?Q+1|0:Q,i[w+48>>2]=M,i[w+52>>2]=Q,e=w,Q=ug(Y,s,28),w=p,m=ug(Y,s,34)^Q,P=p^w,w=(Q=b)+(b=(o|f)&Y|o&f)|0,Q=((C|c)&s|C&c)+E|0,Q=w>>>0>>0?Q+1|0:Q,E=w,w=ug(Y,s,39)^m,Q=(p^P)+Q|0,b=E=E+w|0,E=Q=E>>>0>>0?Q+1|0:Q,i[e+16>>2]=b,i[e+20>>2]=Q,Q=ug(M,r,14),w=p,m=ug(M,r,18)^Q,P=p^w,Q=n+(a^(a^D)&r)|0,Q=(w=y+(t^(t^N)&M)|0)>>>0>>0?Q+1|0:Q,n=ug(M,r,41)^m,Q=(p^P)+Q|0,Q=n>>>0>(y=n+w|0)>>>0?Q+1|0:Q,n=(n=y)+(P=i[(y=(w=(14|B)<<3)+g|0)>>2])|0,Q=i[y+4>>2]+Q|0,Q=n>>>0

>>0?Q+1|0:Q,n=(m=i[(w=w+34784|0)>>2])+n|0,Q=i[w+4>>2]+Q|0,P=n,w=Q=n>>>0>>0?Q+1|0:Q,Q=c+Q|0,m=n=o+n|0,o=Q=n>>>0>>0?Q+1|0:Q,i[e+40>>2]=n,i[e+44>>2]=Q,n=e,Q=ug(b,E,28),c=p,e=ug(b,E,34)^Q,J=p^c,c=(Q=P)+(P=(f|Y)&b|f&Y)|0,Q=((C|s)&E|C&s)+w|0,Q=c>>>0

>>0?Q+1|0:Q,e=ug(b,E,39)^e,Q=(p^J)+Q|0,Q=e>>>0>(c=e+c|0)>>>0?Q+1|0:Q,e=c,c=Q,i[n+8>>2]=e,i[n+12>>2]=Q,Q=ug(m,o,14),n=p,P=ug(m,o,18)^Q,J=p^n,Q=a+(D^(r^D)&o)|0,Q=(w=t+(N^(N^M)&m)|0)>>>0>>0?Q+1|0:Q,D=ug(m,o,41)^P,Q=(p^J)+Q|0,Q=(o=D+w|0)>>>0>>0?Q+1|0:Q,o=(r=i[(a=D=(t=(15|B)<<3)+g|0)>>2])+o|0,Q=i[a+4>>2]+Q|0,Q=o>>>0>>0?Q+1|0:Q,o=(a=i[(t=t+34784|0)>>2])+o|0,Q=i[t+4>>2]+Q|0,Q=o>>>0>>0?Q+1|0:Q,t=f+(a=o)|0,o=Q,Q=C+Q|0,i[(n=I)+32>>2]=t,i[n+36>>2]=t>>>0>>0?Q+1|0:Q,Q=ug(e,c,28),f=p,C=ug(e,c,34)^Q,n=p^f,Q=((E|s)&c|E&s)+o|0,s=(t=(E=a)+(a=(Y|b)&e|Y&b)|0)+(E=ug(e,c,39)^C)|0,Q=(p^n)+(a>>>0>t>>>0?Q+1|0:Q)|0,i[(f=I)>>2]=s,i[f+4>>2]=E>>>0>s>>>0?Q+1|0:Q,64==(0|B)){for(;s=g=(B=x<<3)+A|0,B=(E=i[(Q=I+B|0)>>2])+i[s>>2]|0,Q=i[s+4>>2]+i[Q+4>>2]|0,i[s>>2]=B,i[s+4>>2]=B>>>0>>0?Q+1|0:Q,8!=(0|(x=x+1|0)););break}c=((B=B+16|0)<<3)+g|0,Y=s=i[y+4>>2],Q=s>>>6|0,s=((63&s)<<26|(b=i[y>>2])>>>6)^ug(b,s,19),Q^=p,s=(C=ug(b,Y,61)^s)+(E=w=i[l>>2])|0,Q=(f=i[l+4>>2])+(p^Q)|0,Q=E>>>0>s>>>0?Q+1|0:Q,s=(o=i[(E=g+L|0)>>2])+s|0,Q=i[E+4>>2]+Q|0,s=o>>>0>(C=s)>>>0?Q+1|0:Q,o=E=i[d+4>>2],Q=E>>>7|0,E=((127&E)<<25|(t=i[d>>2])>>>7)^ug(t,E,1),Q^=p,a=C,C=ug(t,o,8)^E,Q=(p^Q)+s|0,n=E=a+C|0,E=Q=E>>>0>>0?Q+1|0:Q,i[c>>2]=n,i[c+4>>2]=Q,Q=i[(c=d)+76>>2]+o|0,C=t,o=(t=i[c+72>>2])>>>0>(C=s=C+t|0)>>>0?Q+1|0:Q,s=t=i[D+4>>2],Q=t>>>6|0,t=((63&t)<<26|(e=i[D>>2])>>>6)^ug(e,t,19),Q^=p,a=C,C=ug(e,s,61)^t,Q=(p^Q)+o|0,o=C>>>0>(a=t=a+C|0)>>>0?Q+1|0:Q,t=C=i[c+12>>2],Q=C>>>7|0,C=((127&C)<<25|(r=i[c+8>>2])>>>7)^ug(r,C,1),Q^=p,d=a,a=ug(r,t,8)^C,Q=(p^Q)+o|0,Q=(C=d+a|0)>>>0>>0?Q+1|0:Q,a=C,o=Q,i[c+128>>2]=C,i[c+132>>2]=Q,c=U,C=t,Q=ug(n,E,19),U=p,t=Q,Q=E>>>6|0,E=(E=ug(n,E,61)^t^((63&E)<<26|n>>>6))+(n=d=i[u>>2])|0,Q=(t=i[u+4>>2])+(p^Q^U)|0,Q=E>>>0>>0?Q+1|0:Q,n=E,Q=Q+C|0,r=E=E+r|0,E=E>>>0>>0?Q+1|0:Q,n=C=i[F+4>>2],Q=C>>>7|0,C=((127&C)<<25|(U=i[F>>2])>>>7)^ug(U,C,1),Q^=p,m=r,r=ug(U,n,8)^C,Q=(p^Q)+E|0,Q=(C=m+r|0)>>>0>>0?Q+1|0:Q,r=C,E=Q,i[c+128>>2]=C,i[c+132>>2]=Q,c=(Q=U)+(U=i[(C=F)+72>>2])|0,Q=i[C+76>>2]+n|0,n=Q=c>>>0>>0?Q+1|0:Q,Q=ug(a,o,19),U=p,F=c,c=Q,Q=o>>>6|0,c=ug(a,o,61)^c^((63&o)<<26|a>>>6),Q=(p^Q^U)+n|0,U=o=F+c|0,o=o>>>0>>0?Q+1|0:Q,c=n=i[C+12>>2],Q=n>>>7|0,n=((127&n)<<25|(a=i[C+8>>2])>>>7)^ug(a,n,1),Q^=p,F=ug(a,c,8)^n,Q=(p^Q)+o|0,Q=(n=F+U|0)>>>0>>0?Q+1|0:Q,F=n,o=Q,i[C+128>>2]=n,i[C+132>>2]=Q,C=S,n=c,Q=ug(r,E,19),S=p,m=a,a=Q,Q=E>>>6|0,E=(E=ug(r,E,61)^a^((63&E)<<26|r>>>6))+(a=U=i[h>>2])|0,Q=(c=i[h+4>>2])+(p^Q^S)|0,Q=E>>>0>>0?Q+1|0:Q,a=E,Q=Q+n|0,S=E=m+E|0,E=E>>>0>>0?Q+1|0:Q,a=n=i[G+4>>2],Q=n>>>7|0,n=((127&n)<<25|(r=i[G>>2])>>>7)^ug(r,n,1),Q^=p,m=S,S=ug(r,a,8)^n,Q=(p^Q)+E|0,Q=(n=m+S|0)>>>0>>0?Q+1|0:Q,S=n,E=Q,i[C+128>>2]=n,i[C+132>>2]=Q,C=(Q=r)+(r=i[(n=G)+72>>2])|0,Q=i[n+76>>2]+a|0,a=Q=C>>>0>>0?Q+1|0:Q,Q=ug(F,o,19),r=p,G=C,m=Q,Q=(C=o)>>>6|0,C=m^((63&C)<<26|F>>>6)^ug(F,C,61),Q=(p^Q^r)+a|0,o=C>>>0>(r=o=G+C|0)>>>0?Q+1|0:Q,Q=(C=a=i[n+12>>2])>>>7|0,a=((127&C)<<25|(G=i[n+8>>2])>>>7)^ug(G,C,1),Q^=p,F=r,r=ug(G,C,8)^a,Q=(p^Q)+o|0,F=a=F+r|0,o=Q=r>>>0>a>>>0?Q+1|0:Q,i[n+128>>2]=a,i[n+132>>2]=Q,n=R,a=C,Q=ug(S,E,19),R=p,C=Q,Q=E>>>6|0,C=ug(S,E,61)^C^((63&E)<<26|S>>>6),Q=(p^Q^R)+s|0,Q=(E=C+e|0)>>>0>>0?Q+1|0:Q,C=E,Q=Q+a|0,G=E=E+G|0,E=E>>>0>>0?Q+1|0:Q,Q=(C=r=i[k+4>>2])>>>7|0,r=((127&C)<<25|(a=i[k>>2])>>>7)^ug(a,C,1),Q^=p,S=G,G=ug(a,C,8)^r,Q=(p^Q)+E|0,E=Q=(r=S+G|0)>>>0>>0?Q+1|0:Q,i[n+128>>2]=r,i[n+132>>2]=Q,Q=i[(n=k)+76>>2]+C|0,a=(C=a=(G=i[n+72>>2])+a|0)>>>0>>0?Q+1|0:Q,Q=ug(F,o,19),G=p,S=C,k=Q,Q=(C=o)>>>6|0,C=k^((63&C)<<26|F>>>6)^ug(F,C,61),Q=(p^Q^G)+a|0,F=o=S+C|0,o=C>>>0>o>>>0?Q+1|0:Q,Q=(C=a=i[n+12>>2])>>>7|0,a=((127&C)<<25|(G=i[n+8>>2])>>>7)^ug(G,C,1),Q^=p,S=F,F=ug(G,C,8)^a,Q=(p^Q)+o|0,Q=(a=S+F|0)>>>0>>0?Q+1|0:Q,F=a,o=Q,i[n+128>>2]=a,i[n+132>>2]=Q,a=C,Q=ug(r,E,19),k=p,C=Q,Q=E>>>6|0,E=(E=ug(r,E,61)^C^((63&E)<<26|r>>>6))+(C=i[(n=H)+72>>2])|0,Q=i[n+76>>2]+(p^Q^k)|0,Q=E>>>0>>0?Q+1|0:Q,C=E,Q=Q+a|0,C=Q=(E=E+G|0)>>>0>>0?Q+1|0:Q,Q=ug(w,f,1),a=p,G=E,r=Q,Q=(E=f)>>>7|0,r=r^((127&E)<<25|w>>>7)^ug(w,E,8),Q=(p^Q^a)+C|0,a=E=G+r|0,E=Q=E>>>0>>0?Q+1|0:Q,i[n+128>>2]=a,i[n+132>>2]=Q,Q=i[(C=l)+76>>2]+f|0,f=n=(r=i[C+72>>2])+w|0,n=n>>>0>>0?Q+1|0:Q,Q=ug(F,o,19),r=p,w=f,f=Q,Q=o>>>6|0,f=ug(F,o,61)^f^((63&o)<<26|F>>>6),Q=(p^Q^r)+n|0,o=(r=o=w+f|0)>>>0>>0?Q+1|0:Q,f=n=i[C+12>>2],Q=n>>>7|0,n=((127&n)<<25|(F=i[C+8>>2])>>>7)^ug(F,n,1),Q^=p,w=r,r=ug(F,f,8)^n,Q=(p^Q)+o|0,Q=(n=w+r|0)>>>0>>0?Q+1|0:Q,r=n,o=Q,i[C+128>>2]=n,i[C+132>>2]=Q,n=f,Q=ug(a,E,19),G=p,C=Q,Q=E>>>6|0,E=(E=ug(a,E,61)^C^((63&E)<<26|a>>>6))+(f=i[(C=v)+72>>2])|0,Q=i[C+76>>2]+(p^Q^G)|0,Q=E>>>0>>0?Q+1|0:Q,f=E,Q=Q+n|0,f=Q=(E=E+F|0)>>>0>>0?Q+1|0:Q,Q=ug(d,t,1),n=p,w=E,a=Q,Q=(E=t)>>>7|0,a=a^((127&E)<<25|d>>>7)^ug(d,E,8),Q=(p^Q^n)+f|0,n=E=w+a|0,E=Q=E>>>0>>0?Q+1|0:Q,i[C+128>>2]=n,i[C+132>>2]=Q,f=(a=i[(C=u)+72>>2])+d|0,Q=i[C+76>>2]+t|0,t=Q=a>>>0>f>>>0?Q+1|0:Q,Q=ug(r,o,19),a=p,w=f,f=Q,Q=o>>>6|0,f=ug(r,o,61)^f^((63&o)<<26|r>>>6),Q=(p^Q^a)+t|0,o=(a=o=w+f|0)>>>0>>0?Q+1|0:Q,f=t=i[C+12>>2],Q=t>>>7|0,t=((127&t)<<25|(r=i[C+8>>2])>>>7)^ug(r,t,1),Q^=p,w=a,a=ug(r,f,8)^t,Q=(p^Q)+o|0,Q=a>>>0>(t=w+a|0)>>>0?Q+1|0:Q,a=t,o=Q,i[C+128>>2]=a,i[C+132>>2]=Q,C=f,Q=ug(n,E,19),d=p,f=Q,Q=E>>>6|0,E=(E=ug(n,E,61)^f^((63&E)<<26|n>>>6))+(f=i[(t=_)+72>>2])|0,Q=i[t+76>>2]+(p^Q^d)|0,Q=E>>>0>>0?Q+1|0:Q,f=E,Q=Q+C|0,f=Q=(E=E+r|0)>>>0>>0?Q+1|0:Q,Q=ug(U,c,1),C=p,r=E,n=Q,Q=(E=c)>>>7|0,n=n^((127&E)<<25|U>>>7)^ug(U,E,8),Q=(p^Q^C)+f|0,C=E=r+n|0,E=Q=E>>>0>>0?Q+1|0:Q,i[t+128>>2]=C,i[t+132>>2]=Q,t=(n=i[(f=h)+72>>2])+U|0,Q=i[f+76>>2]+c|0,c=Q=n>>>0>t>>>0?Q+1|0:Q,Q=ug(a,o,19),n=p,r=t,t=Q,Q=o>>>6|0,t=ug(a,o,61)^t^((63&o)<<26|a>>>6),Q=(p^Q^n)+c|0,o=(n=o=r+t|0)>>>0>>0?Q+1|0:Q,c=t=i[f+12>>2],Q=t>>>7|0,t=((127&t)<<25|(h=i[f+8>>2])>>>7)^ug(h,t,1),Q^=p,t=ug(h,c,8)^t,Q=(p^Q)+o|0,Q=t>>>0>(h=t+n|0)>>>0?Q+1|0:Q,t=h,o=Q,i[f+128>>2]=t,i[f+132>>2]=Q,h=(c=i[(f=y)+72>>2])+b|0,Q=i[f+76>>2]+Y|0,y=Q=c>>>0>h>>>0?Q+1|0:Q,Q=ug(C,E,19),c=p,a=h,n=Q,Q=E>>>6|0,h=ug(C,E,61)^n^((63&E)<<26|C>>>6),Q=(p^Q^c)+y|0,h=Q=(E=a+h|0)>>>0>>0?Q+1|0:Q,Q=ug(e,s,1),y=p,C=E,a=Q,Q=(E=s)>>>7|0,E=C+(c=a^((127&E)<<25|e>>>7)^ug(e,E,8))|0,Q=(p^Q^y)+h|0,i[f+128>>2]=E,i[f+132>>2]=E>>>0>>0?Q+1|0:Q,Q=i[(E=D)+76>>2]+s|0,s=f=(h=i[E+72>>2])+e|0,f=f>>>0>>0?Q+1|0:Q,Q=ug(t,o,19),h=p,C=Q,Q=o>>>6|0,o=ug(t,o,61)^C^((63&o)<<26|t>>>6),Q=(p^Q^h)+f|0,s=o>>>0>(y=s=o+s|0)>>>0?Q+1|0:Q,D=((127&(f=h=i[E+12>>2]))<<25|(o=i[E+8>>2])>>>7)^ug(o,f,1),Q=p^f>>>7,D=(h=ug(o,f,8)^D)+y|0,Q=(p^Q)+s|0,i[E+128>>2]=D,i[E+132>>2]=h>>>0>D>>>0?Q+1|0:Q}}function G(A){var I,g,B,Q,E,i,a,r,o,e,t,f,c,y,s,w,h,D,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0,EA=0;y=HI(A),s=n[A+2|0]|n[A+3|0]<<8|n[A+4|0]<<16|n[A+5|0]<<24,w=HI(A+5|0),h=p,IA=n[A+7|0]|n[A+8|0]<<8|n[A+9|0]<<16|n[A+10|0]<<24,gA=n[A+10|0]|n[A+11|0]<<8|n[A+12|0]<<16|n[A+13|0]<<24,D=HI(A+13|0),BA=p,M=n[A+15|0]|n[A+16|0]<<8|n[A+17|0]<<16|n[A+18|0]<<24,Z=HI(A+18|0),d=p,m=HI(A+21|0),_=n[A+23|0]|n[A+24|0]<<8|n[A+25|0]<<16|n[A+26|0]<<24,k=HI(A+26|0),l=p,AA=n[A+28|0]|n[A+29|0]<<8|n[A+30|0]<<16|n[A+31|0]<<24,q=n[A+31|0]|n[A+32|0]<<8|n[A+33|0]<<16|n[A+34|0]<<24,T=HI(A+34|0),W=p,P=n[A+36|0]|n[A+37|0]<<8|n[A+38|0]<<16|n[A+39|0]<<24,O=HI(A+39|0),J=p,Y=HI(A+42|0),G=n[A+44|0]|n[A+45|0]<<8|n[A+46|0]<<16|n[A+47|0]<<24,F=HI(A+47|0),u=2097151&((3&l)<<30|k>>>2),k=eg(I=2097151&((3&(H=p))<<30|F>>>2),0,136657,0)+u|0,l=p,l=u>>>0>k>>>0?l+1|0:l,F=eg(g=(n[A+49|0]|n[A+50|0]<<8|n[A+51|0]<<16|n[A+52|0]<<24)>>>7&2097151,0,-997805,-1),u=p+l|0,u=F>>>0>(k=F+k|0)>>>0?u+1|0:u,l=eg(B=(n[A+52|0]|n[A+53|0]<<8|n[A+54|0]<<16|n[A+55|0]<<24)>>>4&2097151,0,654183,0),F=p+u|0,F=l>>>0>(k=l+k|0)>>>0?F+1|0:F,u=k,l=HI(A+55|0),k=u+(l=eg(Q=2097151&((1&(k=p))<<31|l>>>1),0,470296,0))|0,u=p+F|0,u=l>>>0>k>>>0?u+1|0:u,F=eg(E=(n[A+57|0]|n[A+58|0]<<8|n[A+59|0]<<16|n[A+60|0]<<24)>>>6&2097151,0,666643,0),l=p+u|0,U=l=F>>>0>(k=F+k|0)>>>0?l+1|0:l,F=l,b=G>>>5&2097151,l=2097151&Y,G=eg(i=(n[A+60|0]|n[A+61|0]<<8|n[A+62|0]<<16|n[A+63|0]<<24)>>>3|0,0,-683901,-1)+l|0,u=p,Y=G,S=u=l>>>0>G>>>0?u+1|0:u,N=(u=G)- -1048576|0,L=G=S-((u>>>0<4293918720)-1|0)|0,u=G>>21,r=b=(G=(2097151&G)<<11|N>>>21)+b|0,V=l=G>>>0>b>>>0?u+1|0:u,u=eg(b,l,-683901,-1),l=p+F|0,j=H=u+k|0,v=u>>>0>H>>>0?l+1|0:l,F=_>>>5&2097151,H=eg(I,0,-997805,-1)+F|0,u=p,u=F>>>0>H>>>0?u+1|0:u,l=eg(g,0,654183,0),F=p+u|0,F=l>>>0>(H=l+H|0)>>>0?F+1|0:F,u=eg(B,0,470296,0),l=p+F|0,l=u>>>0>(H=u+H|0)>>>0?l+1|0:l,F=eg(Q,0,666643,0),u=p+l|0,F=F>>>0>(_=H=F+H|0)>>>0?u+1|0:u,u=2097151&m,H=eg(I,0,654183,0)+u|0,l=p,l=u>>>0>H>>>0?l+1|0:l,G=(u=H)+(H=eg(g,0,470296,0))|0,u=p+l|0,u=G>>>0>>0?u+1|0:u,H=eg(B,0,666643,0),l=p+u|0,b=G=H+G|0,G=l=G>>>0>>0?l+1|0:l,z=(u=b)- -1048576|0,R=H=l-((u>>>0<4293918720)-1|0)|0,F=(u=H>>>21|0)+F|0,m=F=(l=(2097151&H)<<11|z>>>21)>>>0>(_=H=l+_|0)>>>0?F+1|0:F,K=(u=_)- -1048576|0,f=k- -1048576|0,U=U-((k>>>0<4293918720)-1|0)|0,l=(u=(F=x=F-((u>>>0<4293918720)-1|0)|0)>>21)+v|0,U=(l=(k=(2097151&F)<<11|K>>>21)>>>0>(x=k+j|0)>>>0?l+1|0:l)-(((u=-2097152&f)>>>0>(k=x)>>>0)+(H=U)|0)|0,QA=(u=k-u|0)-(l=-2097152&(c=u- -1048576|0))|0,CA=U-((u>>>0>>0)+(k=U-((u>>>0<4293918720)-1|0)|0)|0)|0,l=eg(r,V,136657,0)+_|0,u=m+p|0,u=l>>>0<_>>>0?u+1|0:u,$=(_=l)-(l=-2097152&K)|0,j=u-((l>>>0>_>>>0)+F|0)|0,U=Y-(u=-2097152&N)|0,v=S-((u>>>0>Y>>>0)+L|0)|0,u=2097151&((7&J)<<29|O>>>3),F=eg(i,0,136657,0)+u|0,l=p,l=u>>>0>F>>>0?l+1|0:l,_=(u=F)+(F=eg(E,0,-683901,-1))|0,u=p+l|0,Y=_,_=F>>>0>_>>>0?u+1|0:u,u=eg(Q,0,-683901,-1),l=p,F=u,l=(u=P>>>6&2097151)>>>0>(F=F+u|0)>>>0?l+1|0:l,m=(u=eg(i,0,-997805,-1))+F|0,F=p+l|0,F=u>>>0>m>>>0?F+1|0:F,l=eg(E,0,136657,0),u=p+F|0,K=l=(N=u=l>>>0>(m=l+m|0)>>>0?u+1|0:u)-(((u=m)>>>0<4293918720)-1|0)|0,u=(2097151&l)<<11|(O=u- -1048576|0)>>>21,l=(l>>21)+_|0,S=l=u>>>0>(Y=u+Y|0)>>>0?l+1|0:l,x=(u=Y)- -1048576|0,L=l=l-((u>>>0<4293918720)-1|0)|0,u=(F=l>>21)+v|0,o=_=(l=(2097151&l)<<11|x>>>21)+U|0,X=u=l>>>0>_>>>0?u+1|0:u,l=eg(_,u,-683901,-1),u=p+j|0,EA=F=l+$|0,P=l>>>0>F>>>0?u+1|0:u,v=b,u=2097151&((7&d)<<29|Z>>>3),F=eg(I,0,470296,0)+u|0,l=p,l=u>>>0>F>>>0?l+1|0:l,u=eg(g,0,666643,0),l=p+l|0,U=F=u+F|0,F=u>>>0>F>>>0?l+1|0:l,_=M>>>6&2097151,b=eg(I,0,666643,0)+_|0,u=p,d=_=(M=u=_>>>0>b>>>0?u+1|0:u)-(((u=b)>>>0<4293918720)-1|0)|0,l=(l=_>>>21|0)+F|0,J=l=(u=(2097151&_)<<11|($=u- -1048576|0)>>>21)>>>0>(_=u+U|0)>>>0?l+1|0:l,Z=l-(((u=_)>>>0<4293918720)-1|0)|0,j=u- -1048576|0,a=Y-(u=-2097152&x)|0,e=F=S-((u>>>0>Y>>>0)+L|0)|0,u=((U=Z)>>>21|0)+G|0,u=(Y=(2097151&U)<<11|j>>>21)>>>0>(v=Y+v|0)>>>0?u+1|0:u,v=(G=eg(r,V,-997805,-1))+((Y=v)-(l=-2097152&z)|0)|0,l=p+(u-((8191&R)+(l>>>0>Y>>>0)|0)|0)|0,l=G>>>0>v>>>0?l+1|0:l,u=eg(o,X,136657,0),l=p+l|0,l=u>>>0>(G=u+v|0)>>>0?l+1|0:l,F=eg(a,F,-683901,-1),u=p+l|0,S=u=F>>>0>(G=F+G|0)>>>0?u+1|0:u,x=(u=G)- -1048576|0,L=F=S-((u>>>0<4293918720)-1|0)|0,l=(u=F>>21)+P|0,v=l=(F=(2097151&F)<<11|x>>>21)>>>0>(Y=F+EA|0)>>>0?l+1|0:l,R=(u=F=Y)- -1048576|0,u=(u=(Y=P=l-((u>>>0<4293918720)-1|0)|0)>>21)+CA|0,QA=P=(l=(2097151&Y)<<11|R>>>21)+QA|0,P=l>>>0>P>>>0?u+1|0:u,CA=F-(u=-2097152&R)|0,EA=v-((u>>>0>F>>>0)+Y|0)|0,Z=G-(u=-2097152&x)|0,z=S-((u>>>0>G>>>0)+L|0)|0,u=eg(r,V,654183,0),F=p+(J-((8191&U)+((l=-2097152&j)>>>0>_>>>0)|0)|0)|0,F=u>>>0>(G=u+(_-l|0)|0)>>>0?F+1|0:F,l=eg(o,X,-997805,-1),u=p+F|0,u=l>>>0>(G=l+G|0)>>>0?u+1|0:u,F=eg(a,e,136657,0),l=p+u|0,x=G=F+G|0,Y=F>>>0>G>>>0?l+1|0:l,R=m-(u=-2097152&O)|0,J=N-((u>>>0>m>>>0)+K|0)|0,l=2097151&((1&W)<<31|T>>>1),G=eg(B,0,-683901,-1)+l|0,u=p,u=l>>>0>G>>>0?u+1|0:u,l=eg(Q,0,136657,0),u=p+u|0,u=l>>>0>(F=l+G|0)>>>0?u+1|0:u,G=(l=F)+(F=eg(i,0,654183,0))|0,l=p+u|0,l=F>>>0>G>>>0?l+1|0:l,u=eg(E,0,-997805,-1),l=p+l|0,m=F=u+G|0,G=u>>>0>F>>>0?l+1|0:l,u=eg(g,0,-683901,-1),F=p,l=u,F=(u=q>>>4&2097151)>>>0>(l=l+u|0)>>>0?F+1|0:F,_=(u=l)+(l=eg(B,0,136657,0))|0,u=p+F|0,u=l>>>0>_>>>0?u+1|0:u,F=eg(Q,0,-997805,-1),l=p+u|0,l=F>>>0>(_=F+_|0)>>>0?l+1|0:l,F=eg(i,0,470296,0),u=p+l|0,u=F>>>0>(_=F+_|0)>>>0?u+1|0:u,F=eg(E,0,654183,0),l=p+u|0,S=l=F>>>0>(_=F+_|0)>>>0?l+1|0:l,K=(u=_)- -1048576|0,L=F=l-((u>>>0<4293918720)-1|0)|0,u=(u=F>>21)+G|0,G=F=(l=(2097151&F)<<11|K>>>21)+m|0,v=u=l>>>0>F>>>0?u+1|0:u,U=(u=F)- -1048576|0,m=F=v-((u>>>0<4293918720)-1|0)|0,l=(u=F>>21)+J|0,t=N=(F=(2097151&F)<<11|U>>>21)+R|0,q=l=F>>>0>N>>>0?l+1|0:l,u=eg(N,l,-683901,-1),F=p+Y|0,J=l=u+x|0,Y=u>>>0>l>>>0?F+1|0:F,T=G-(u=-2097152&U)|0,W=m=v-((u>>>0>G>>>0)+m|0)|0,F=(u=eg(r,V,470296,0))+(b-(l=-2097152&$)|0)|0,l=p+(M-((2047&d)+(l>>>0>b>>>0)|0)|0)|0,l=u>>>0>F>>>0?l+1|0:l,u=eg(o,X,654183,0),l=p+l|0,l=u>>>0>(F=u+F|0)>>>0?l+1|0:l,G=(u=eg(a,e,-997805,-1))+F|0,F=p+l|0,F=u>>>0>G>>>0?F+1|0:F,l=eg(N,q,136657,0),u=p+F|0,u=l>>>0>(G=l+G|0)>>>0?u+1|0:u,F=eg(T,m,-683901,-1),l=p+u|0,v=l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,d=(u=G)- -1048576|0,m=F=l-((u>>>0<4293918720)-1|0)|0,u=(u=F>>21)+Y|0,Y=u=(l=(2097151&F)<<11|d>>>21)>>>0>(F=l+J|0)>>>0?u+1|0:u,U=(u=F)- -1048576|0,l=(u=(b=J=Y-((u>>>0<4293918720)-1|0)|0)>>21)+z|0,Z=M=(J=(2097151&b)<<11|U>>>21)+Z|0,J=M>>>0>>0?l+1|0:l,z=F-(u=-2097152&U)|0,O=Y-((u>>>0>F>>>0)+b|0)|0,x=G-(u=-2097152&d)|0,N=v-((u>>>0>G>>>0)+m|0)|0,l=2097151&((1&BA)<<31|D>>>1),G=eg(r,V,666643,0)+l|0,u=p,u=l>>>0>G>>>0?u+1|0:u,F=eg(o,X,470296,0),l=p+u|0,l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,F=eg(a,e,654183,0),u=p+l|0,u=F>>>0>(G=F+G|0)>>>0?u+1|0:u,l=eg(t,q,-997805,-1),F=p+u|0,F=l>>>0>(G=l+G|0)>>>0?F+1|0:F,u=eg(T,W,136657,0),l=p+F|0,m=G=u+G|0,b=u>>>0>G>>>0?l+1|0:l,Y=_-(u=-2097152&K)|0,_=S-((u>>>0>_>>>0)+L|0)|0,u=eg(I,0,-683901,-1),l=p,F=u,l=(u=AA>>>7&2097151)>>>0>(F=F+u|0)>>>0?l+1|0:l,G=(u=eg(g,0,136657,0))+F|0,F=p+l|0,F=u>>>0>G>>>0?F+1|0:F,l=eg(B,0,-997805,-1),u=p+F|0,u=l>>>0>(G=l+G|0)>>>0?u+1|0:u,F=eg(Q,0,654183,0),l=p+u|0,l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,F=eg(i,0,666643,0),u=p+l|0,u=F>>>0>(G=F+G|0)>>>0?u+1|0:u,F=eg(E,0,470296,0),l=p+u|0,u=l=F>>>0>(G=F+G|0)>>>0?l+1|0:l,l=H>>21,G=(H=(2097151&H)<<11|f>>>21)+(F=G)|0,F=u+l|0,L=F=G>>>0>>0?F+1|0:F,S=(u=G)- -1048576|0,v=F=F-((u>>>0<4293918720)-1|0)|0,u=(l=F>>21)+_|0,V=H=(F=(2097151&F)<<11|S>>>21)+Y|0,R=u=F>>>0>H>>>0?u+1|0:u,u=eg(H,u,-683901,-1),l=p+b|0,b=F=u+m|0,H=u>>>0>F>>>0?l+1|0:l,u=eg(o,X,666643,0),F=p,l=u,F=(u=gA>>>4&2097151)>>>0>(l=l+u|0)>>>0?F+1|0:F,_=(u=l)+(l=eg(a,e,470296,0))|0,u=p+F|0,u=l>>>0>_>>>0?u+1|0:u,F=eg(t,q,654183,0),l=p+u|0,l=F>>>0>(_=F+_|0)>>>0?l+1|0:l,u=eg(T,W,-997805,-1),l=p+l|0,l=u>>>0>(F=u+_|0)>>>0?l+1|0:l,_=(u=F)+(F=eg(V,R,136657,0))|0,u=p+l|0,m=u=F>>>0>_>>>0?u+1|0:u,M=(u=_)- -1048576|0,Y=F=m-((u>>>0<4293918720)-1|0)|0,u=(l=F>>21)+H|0,F=u=(F=(2097151&F)<<11|M>>>21)>>>0>(H=b=F+b|0)>>>0?u+1|0:u,d=(u=H)- -1048576|0,u=(l=(b=U=F-((u>>>0<4293918720)-1|0)|0)>>21)+N|0,$=K=(U=(2097151&b)<<11|d>>>21)+x|0,U=U>>>0>K>>>0?u+1|0:u,u=G-(l=-2097152&S)|0,G=L-((l>>>0>G>>>0)+v|0)|0,v=u,u=(u=k>>21)+G|0,S=u=(l=(2097151&k)<<11|c>>>21)>>>0>(G=k=v+l|0)>>>0?u+1|0:u,K=(u=G)- -1048576|0,L=k=S-((u>>>0<4293918720)-1|0)|0,N=u=k>>21,u=eg(X=(2097151&k)<<11|K>>>21,u,-683901,-1),l=p+F|0,l=u>>>0>(k=u+H|0)>>>0?l+1|0:l,j=(F=k)-(u=-2097152&d)|0,x=l-((u>>>0>F>>>0)+b|0)|0,l=eg(X,N,136657,0)+_|0,u=m+p|0,u=l>>>0<_>>>0?u+1|0:u,AA=(F=l)-(l=-2097152&M)|0,M=u-((l>>>0>F>>>0)+Y|0)|0,u=eg(a,e,666643,0),l=p,F=u,l=(u=IA>>>7&2097151)>>>0>(F=F+u|0)>>>0?l+1|0:l,k=(u=eg(t,q,470296,0))+F|0,F=p+l|0,F=u>>>0>k>>>0?F+1|0:F,l=eg(T,W,654183,0),u=p+F|0,u=l>>>0>(k=l+k|0)>>>0?u+1|0:u,l=eg(V,R,-997805,-1),u=p+u|0,Y=F=l+k|0,F=l>>>0>F>>>0?u+1|0:u,u=2097151&((3&h)<<30|w>>>2),k=eg(t,q,666643,0)+u|0,l=p,l=u>>>0>k>>>0?l+1|0:l,u=eg(T,W,470296,0),l=p+l|0,l=u>>>0>(k=u+k|0)>>>0?l+1|0:l,H=(u=k)+(k=eg(V,R,654183,0))|0,u=p+l|0,b=u=k>>>0>H>>>0?u+1|0:u,d=(u=k=H)- -1048576|0,u=(l=(_=H=b-((u>>>0<4293918720)-1|0)|0)>>21)+F|0,m=Y=(H=(2097151&_)<<11|d>>>21)+Y|0,F=u=H>>>0>Y>>>0?u+1|0:u,Y=(u=Y)- -1048576|0,u=(l=(H=v=F-((u>>>0<4293918720)-1|0)|0)>>21)+M|0,IA=q=(v=(2097151&H)<<11|Y>>>21)+AA|0,v=v>>>0>q>>>0?u+1|0:u,u=eg(X,N,-997805,-1),F=p+F|0,F=u>>>0>(l=u+m|0)>>>0?F+1|0:F,gA=l-(u=-2097152&Y)|0,BA=F-((u>>>0>l>>>0)+H|0)|0,u=eg(X,N,654183,0)+k|0,l=b+p|0,l=u>>>0>>0?l+1|0:l,AA=(F=u)-(u=-2097152&d)|0,q=l-((u>>>0>F>>>0)+_|0)|0,u=eg(T,W,666643,0),F=p,l=u,F=(u=s>>>5&2097151)>>>0>(l=l+u|0)>>>0?F+1|0:F,k=(u=l)+(l=eg(V,R,470296,0))|0,u=p+F|0,_=k,F=l>>>0>k>>>0?u+1|0:u,l=2097151&y,k=eg(V,R,666643,0)+l|0,u=p,H=k,Y=k=(m=u=l>>>0>k>>>0?u+1|0:u)-(((u=k)>>>0<4293918720)-1|0)|0,F=(l=k>>21)+F|0,b=F=(u=(2097151&k)<<11|(M=u- -1048576|0)>>>21)>>>0>(k=u+_|0)>>>0?F+1|0:F,d=(u=k)- -1048576|0,_=F=F-((u>>>0<4293918720)-1|0)|0,u=(l=F>>21)+q|0,F=u=(F=(2097151&F)<<11|d>>>21)>>>0>(R=F+AA|0)>>>0?u+1|0:u,u=eg(X,N,470296,0)+k|0,l=b+p|0,_=(l=u>>>0>>0?l+1|0:l)-(((k=-2097152&d)>>>0>(b=u)>>>0)+_|0)|0,b=u=u-k|0,k=(l=eg(X,N,666643,0))+(H-(u=-2097152&M)|0)|0,u=p+(m-((u>>>0>H>>>0)+Y|0)|0)|0,H=k,l=(l=(u=l>>>0>k>>>0?u+1|0:u)>>21)+_|0,W=k=b+(u=(2097151&u)<<11|k>>>21)|0,F=(u=(l=u>>>0>k>>>0?l+1|0:l)>>21)+F|0,_=k=(l=(2097151&l)<<11|k>>>21)+R|0,l=(F=l>>>0>(u=k)>>>0?F+1|0:F)>>21,F=(2097151&F)<<11|u>>>21,u=l+BA|0,Y=k=F+gA|0,F=(u=F>>>0>(l=k)>>>0?u+1|0:u)>>21,u=(2097151&u)<<11|l>>>21,l=F+v|0,v=k=u+IA|0,u=(u=(l=u>>>0>(F=k)>>>0?l+1|0:l)>>21)+x|0,R=F=(l=(2097151&l)<<11|F>>>21)+j|0,l=(l=(u=l>>>0>F>>>0?u+1|0:u)>>21)+U|0,N=F=(u=(2097151&u)<<11|F>>>21)+$|0,u=(l=u>>>0>F>>>0?l+1|0:l)>>21,l=(2097151&l)<<11|F>>>21,F=u+O|0,M=k=l+z|0,l=(F=l>>>0>(u=k)>>>0?F+1|0:F)>>21,F=(2097151&F)<<11|u>>>21,u=l+J|0,d=k=F+Z|0,F=(u=F>>>0>(l=k)>>>0?u+1|0:u)>>21,u=(2097151&u)<<11|l>>>21,l=F+EA|0,J=k=u+CA|0,u=(u=(l=u>>>0>(F=k)>>>0?l+1|0:l)>>21)+P|0,U=F=(l=(2097151&l)<<11|F>>>21)+QA|0,l=(u=l>>>0>F>>>0?u+1|0:u)>>21,k=(2097151&u)<<11|F>>>21,u=G-(F=-2097152&K)|0,F=(S-((F>>>0>G>>>0)+L|0)|0)+l|0,L=k=k+u|0,P=(2097151&(F=u>>>0>(l=k)>>>0?F+1|0:F))<<11|l>>>21,m=u=F>>21,l=2097151&H,F=eg(P,u,666643,0)+l|0,u=p,b=F,k=u=l>>>0>F>>>0?u+1|0:u,C[0|A]=F,C[A+1|0]=(255&u)<<24|F>>>8,u=2097151&W,F=eg(P,m,470296,0)+u|0,l=p,l=u>>>0>F>>>0?l+1|0:l,H=F,G=(2097151&(F=k))<<11|b>>>21,F=(u=F>>21)+l|0,F=G>>>0>(S=H+G|0)>>>0?F+1|0:F,G=S,C[A+4|0]=(2047&F)<<21|G>>>11,u=l=F,F=G,C[A+3|0]=(7&u)<<29|F>>>3,F=2097151&_,_=eg(P,m,654183,0)+F|0,u=p,u=F>>>0>_>>>0?u+1|0:u,F=_,_=(2097151&l)<<11|G>>>21,l=(l>>21)+u|0,l=_>>>0>(S=F+_|0)>>>0?l+1|0:l,_=S,u=l,C[A+6|0]=(63&u)<<26|_>>>6,H=0,F=31&((65535&k)<<16|b>>>16),l=b=2097151&G,C[A+2|0]=F|l<<5,F=2097151&Y,G=eg(P,m,-997805,-1)+F|0,l=p,F=l=F>>>0>G>>>0?l+1|0:l,F=(l=u>>21)+F|0,Y=G=(u=(2097151&u)<<11|_>>>21)+G|0,F=u>>>0>G>>>0?F+1|0:F,C[A+9|0]=(511&F)<<23|G>>>9,u=l=F,F=G,C[A+8|0]=(1&u)<<31|F>>>1,G=0,F=_&=2097151,C[A+5|0]=(524287&H)<<13|b>>>19|F<<2,F=2097151&v,H=eg(P,m,136657,0)+F|0,u=p,u=(u=F>>>0>H>>>0?u+1|0:u)+(F=l>>21)|0,b=H=(l=(2097151&l)<<11|Y>>>21)+H|0,u=l>>>0>H>>>0?u+1|0:u,l=H,C[A+12|0]=(4095&u)<<20|l>>>12,F=u,C[A+11|0]=(15&u)<<28|l>>>4,H=0,l=v=2097151&Y,C[A+7|0]=(16383&G)<<18|_>>>14|l<<7,u=2097151&R,G=eg(P,m,-683901,-1)+u|0,l=p,l=u>>>0>G>>>0?l+1|0:l,l=(u=F>>21)+l|0,_=G=(F=(2097151&F)<<11|b>>>21)+G|0,u=l=F>>>0>G>>>0?l+1|0:l,C[A+14|0]=(127&u)<<25|G>>>7,G=0,F=Y=2097151&b,C[A+10|0]=(131071&H)<<15|v>>>17|F<<4,l=u>>21,F=(u=(2097151&u)<<11|_>>>21)>>>0>(b=u+(2097151&N)|0)>>>0?l+1|0:l,C[A+17|0]=(1023&F)<<22|b>>>10,u=F,F=b,C[A+16|0]=(3&u)<<30|F>>>2,F=m=2097151&_,C[A+13|0]=(1048575&G)<<12|Y>>>20|F<<1,F=(2097151&u)<<11|b>>>21,u>>=21,u=F>>>0>(_=F+(2097151&M)|0)>>>0?u+1|0:u,l=_,C[A+20|0]=(8191&u)<<19|l>>>13,C[A+19|0]=(31&u)<<27|l>>>5,l=Y=2097151&b,C[A+15|0]=(32767&H)<<17|m>>>15|l<<6,k=(2097151&u)<<11|_>>>21,u=l=u>>21,k=u=k>>>0>(m=k+(2097151&d)|0)>>>0?u+1|0:u,C[A+21|0]=m,u=_,C[A+18|0]=(262143&G)<<14|Y>>>18|u<<3,u=k,C[A+22|0]=(255&u)<<24|m>>>8,F=u,u>>=21,F=(_=(H=(2097151&F)<<11|m>>>21)+(2097151&J)|0)>>>0>>0?u+1|0:u,C[(l=A)+25|0]=(2047&F)<<21|_>>>11,u=F,F=_,C[l+24|0]=(7&u)<<29|F>>>3,F=l,H=(2097151&u)<<11|_>>>21,u>>=21,l=u=H>>>0>(G=b=H+(2097151&U)|0)>>>0?u+1|0:u,C[F+27|0]=(63&u)<<26|G>>>6,H=0,u=b=2097151&_,C[F+23|0]=31&((65535&k)<<16|m>>>16)|u<<5,l=(u=l)>>21,l=(u=(2097151&u)<<11|G>>>21)>>>0>(k=u+(2097151&L)|0)>>>0?l+1|0:l,F=k,C[A+31|0]=(131071&l)<<15|F>>>17,u=l,C[A+30|0]=(511&u)<<23|F>>>9,C[A+29|0]=(1&u)<<31|F>>>1,l=0,G&=2097151,C[A+26|0]=(524287&H)<<13|b>>>19|G<<2,C[A+28|0]=(16383&l)<<18|G>>>14|F<<7}function k(A){var I,g=0,B=0,Q=0,C=0,E=0,r=0,o=0,t=0,f=0,c=0,y=0,s=0,w=0;h=I=h-16|0;A:{I:{g:{B:{Q:{C:{E:{i:{n:{a:{r:{o:{if((A|=0)>>>0<=244){if(3&(g=(E=i[8961])>>>(B=(t=A>>>0<11?16:A+11&-8)>>>3|0)|0)){A=(C=i[35892+(g=(Q=B+(1&(-1^g))|0)<<3)>>2])+8|0,(0|(B=i[C+8>>2]))!=(0|(g=g+35884|0))?(i[B+12>>2]=g,i[g+8>>2]=B):(s=35844,w=vI(-2,Q)&E,i[s>>2]=w),g=Q<<3,i[C+4>>2]=3|g,i[4+(g=g+C|0)>>2]=1|i[g+4>>2];break A}if((c=i[8963])>>>0>=t>>>0)break o;if(g){B=A=(g=(0-(A=(0-(A=2<>>12&16,B|=A=(g=g>>>A|0)>>>5&8,B|=A=(g=g>>>A|0)>>>2&4,r=i[35892+(A=(B=((B|=A=(g=g>>>A|0)>>>1&2)|(A=(g=g>>>A|0)>>>1&1))+(g>>>A|0)|0)<<3)>>2],(0|(g=i[r+8>>2]))!=(0|(A=A+35884|0))?(i[g+12>>2]=A,i[A+8>>2]=g):(E=vI(-2,B)&E,i[8961]=E),A=r+8|0,i[r+4>>2]=3|t,C=(g=B<<3)-t|0,i[4+(Q=r+t|0)>>2]=1|C,i[g+r>>2]=C,c&&(B=35884+((g=c>>>3|0)<<3)|0,r=i[8966],(g=1<>2]:(i[8961]=g|E,g=B),i[B+8>>2]=r,i[g+12>>2]=r,i[r+12>>2]=B,i[r+8>>2]=g),i[8966]=Q,i[8963]=C;break A}if(!(o=i[8962]))break o;for(B=A=(g=(o&0-o)-1|0)>>>12&16,B|=A=(g=g>>>A|0)>>>5&8,B|=A=(g=g>>>A|0)>>>2&4,g=i[36148+(((B|=A=(g=g>>>A|0)>>>1&2)|(A=(g=g>>>A|0)>>>1&1))+(g>>>A|0)<<2)>>2],C=(-8&i[g+4>>2])-t|0,B=g;(A=i[B+16>>2])||(A=i[B+20>>2]);)C=(Q=(B=(-8&i[A+4>>2])-t|0)>>>0>>0)?B:C,g=Q?A:g,B=A;if((f=g+t|0)>>>0<=g>>>0)break r;if(y=i[g+24>>2],(0|(Q=i[g+12>>2]))!=(0|g)){A=i[g+8>>2],i[A+12>>2]=Q,i[Q+8>>2]=A;break I}if(!(A=i[(B=g+20|0)>>2])){if(!(A=i[g+16>>2]))break a;B=g+16|0}for(;r=B,Q=A,(A=i[(B=A+20|0)>>2])||(B=Q+16|0,A=i[Q+16>>2]););i[r>>2]=0;break I}if(t=-1,!(A>>>0>4294967231)&&(t=-8&(A=A+11|0),f=i[8962])){E=31,C=0-t|0,t>>>0<=16777215&&(A=A>>>8|0,A<<=r=A+1048320>>>16&8,E=28+((A=((A<<=B=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|B|r)|0)<<1|t>>>A+21&1)|0);e:{t:{if(B=i[36148+(E<<2)>>2])for(A=0,g=t<<(31==(0|E)?0:25-(E>>>1|0)|0);;){if(!((r=(-8&i[B+4>>2])-t|0)>>>0>=C>>>0||(Q=B,C=r))){C=0,A=B;break t}if(r=i[B+20>>2],B=i[16+((g>>>29&4)+B|0)>>2],A=r?(0|r)==(0|B)?A:r:A,g<<=1,!B)break}else A=0;if(!(A|Q)){if(!(A=(0-(A=2<>>12&16,B|=A=(g=g>>>A|0)>>>5&8,B|=A=(g=g>>>A|0)>>>2&4,A=i[36148+(((B|=A=(g=g>>>A|0)>>>1&2)|(A=(g=g>>>A|0)>>>1&1))+(g>>>A|0)<<2)>>2]}if(!A)break e}for(;C=(B=(g=(-8&i[A+4>>2])-t|0)>>>0>>0)?g:C,Q=B?A:Q,A=(g=i[A+16>>2])||i[A+20>>2];);}if(!(!Q|i[8963]-t>>>0<=C>>>0)){if((o=Q+t|0)>>>0<=Q>>>0)break r;if(E=i[Q+24>>2],(0|Q)!=(0|(g=i[Q+12>>2]))){A=i[Q+8>>2],i[A+12>>2]=g,i[g+8>>2]=A;break g}if(!(A=i[(B=Q+20|0)>>2])){if(!(A=i[Q+16>>2]))break n;B=Q+16|0}for(;r=B,g=A,(A=i[(B=A+20|0)>>2])||(B=g+16|0,A=i[g+16>>2]););i[r>>2]=0;break g}}}if((B=i[8963])>>>0>=t>>>0){Q=i[8966],(g=B-t|0)>>>0>=16?(i[8963]=g,A=Q+t|0,i[8966]=A,i[A+4>>2]=1|g,i[B+Q>>2]=g,i[Q+4>>2]=3|t):(i[8966]=0,i[8963]=0,i[Q+4>>2]=3|B,i[4+(A=B+Q|0)>>2]=1|i[A+4>>2]),A=Q+8|0;break A}if((o=i[8964])>>>0>t>>>0){g=o-t|0,i[8964]=g,A=(B=i[8967])+t|0,i[8967]=A,i[A+4>>2]=1|g,i[B+4>>2]=3|t,A=B+8|0;break A}if(A=0,g=f=t+47|0,i[9079]?B=i[9081]:(i[9082]=-1,i[9083]=-1,i[9080]=4096,i[9081]=4096,i[9079]=I+12&-16^1431655768,i[9084]=0,i[9072]=0,B=4096),(B=(r=g+B|0)&(C=0-B|0))>>>0<=t>>>0)break A;if((Q=i[9071])&&Q>>>0<(E=(g=i[9069])+B|0)>>>0|g>>>0>=E>>>0)break A;if(4&n[36288])break C;o:{e:{if(Q=i[8967])for(A=36292;;){if(Q>>>0<(g=i[A>>2])+i[A+4>>2]>>>0&&g>>>0<=Q>>>0)break e;if(!(A=i[A+8>>2]))break}if(-1==(0|(g=II(0))))break E;if(E=B,(A=(Q=i[9080])-1|0)&g&&(E=(B-g|0)+(A+g&0-Q)|0),E>>>0<=t>>>0|E>>>0>2147483646)break E;if((Q=i[9071])&&Q>>>0<(C=(A=i[9069])+E|0)>>>0|A>>>0>=C>>>0)break E;if((0|g)!=(0|(A=II(E))))break o;break Q}if((E=C&r-o)>>>0>2147483646)break E;if((0|(g=II(E)))==(i[A>>2]+i[A+4>>2]|0))break i;A=g}if(!(-1==(0|A)|t+48>>>0<=E>>>0)){if((g=(g=i[9081])+(f-E|0)&0-g)>>>0>2147483646){g=A;break Q}if(-1!=(0|II(g))){E=g+E|0,g=A;break Q}II(0-E|0);break E}if(g=A,-1!=(0|A))break Q;break E}e()}Q=0;break I}g=0;break g}if(-1!=(0|g))break Q}i[9072]=4|i[9072]}if(B>>>0>2147483646)break B;if((g=II(B))>>>0>=(A=II(0))>>>0|-1==(0|g)|-1==(0|A))break B;if((E=A-g|0)>>>0<=t+40>>>0)break B}A=i[9069]+E|0,i[9069]=A,A>>>0>a[9070]&&(i[9070]=A);Q:{C:{E:{if(r=i[8967]){for(A=36292;;){if(((Q=i[A>>2])+(B=i[A+4>>2])|0)==(0|g))break E;if(!(A=i[A+8>>2]))break}break C}for((A=i[8965])>>>0<=g>>>0&&A||(i[8965]=g),A=0,i[9074]=E,i[9073]=g,i[8969]=-1,i[8970]=i[9079],i[9076]=0;B=35884+(Q=A<<3)|0,i[Q+35892>>2]=B,i[Q+35896>>2]=B,32!=(0|(A=A+1|0)););B=(Q=E-40|0)-(A=g+8&7?-8-g&7:0)|0,i[8964]=B,A=A+g|0,i[8967]=A,i[A+4>>2]=1|B,i[4+(g+Q|0)>>2]=40,i[8968]=i[9083];break Q}if(!(8&n[A+12|0]|g>>>0<=r>>>0|Q>>>0>r>>>0)){i[A+4>>2]=B+E,B=(A=r+8&7?-8-r&7:0)+r|0,i[8967]=B,A=(g=i[8964]+E|0)-A|0,i[8964]=A,i[B+4>>2]=1|A,i[4+(g+r|0)>>2]=40,i[8968]=i[9083];break Q}}(Q=i[8965])>>>0>g>>>0&&(i[8965]=g,Q=0),B=g+E|0,A=36292;C:{E:{i:{n:{a:{r:{for(;;){if((0|B)!=i[A>>2]){if(A=i[A+8>>2])continue;break r}break}if(!(8&n[A+12|0]))break a}for(A=36292;;){if((B=i[A>>2])>>>0<=r>>>0&&(C=B+i[A+4>>2]|0)>>>0>r>>>0)break n;A=i[A+8>>2]}}if(i[A>>2]=g,i[A+4>>2]=i[A+4>>2]+E,i[4+(f=(g+8&7?-8-g&7:0)+g|0)>>2]=3|t,B=((E=B+(B+8&7?-8-B&7:0)|0)-f|0)-t|0,o=t+f|0,(0|E)==(0|r)){i[8967]=o,A=i[8964]+B|0,i[8964]=A,i[o+4>>2]=1|A;break E}if(i[8966]==(0|E)){i[8966]=o,A=i[8963]+B|0,i[8963]=A,i[o+4>>2]=1|A,i[A+o>>2]=A;break E}if(1==(3&(A=i[E+4>>2]))){r=-8&A;a:if(A>>>0<=255){if(Q=i[E+8>>2],A=A>>>3|0,(0|(g=i[E+12>>2]))==(0|Q)){s=35844,w=i[8961]&vI(-2,A),i[s>>2]=w;break a}i[Q+12>>2]=g,i[g+8>>2]=Q}else{if(t=i[E+24>>2],(0|E)==(0|(g=i[E+12>>2])))if((C=i[(A=E+20|0)>>2])||(C=i[(A=E+16|0)>>2])){for(;Q=A,(C=i[(A=(g=C)+20|0)>>2])||(A=g+16|0,C=i[g+16>>2]););i[Q>>2]=0}else g=0;else A=i[E+8>>2],i[A+12>>2]=g,i[g+8>>2]=A;if(t){Q=i[E+28>>2];r:{if(i[(A=36148+(Q<<2)|0)>>2]==(0|E)){if(i[A>>2]=g,g)break r;s=35848,w=i[8962]&vI(-2,Q),i[s>>2]=w;break a}if(i[t+(i[t+16>>2]==(0|E)?16:20)>>2]=g,!g)break a}i[g+24>>2]=t,(A=i[E+16>>2])&&(i[g+16>>2]=A,i[A+24>>2]=g),(A=i[E+20>>2])&&(i[g+20>>2]=A,i[A+24>>2]=g)}}E=E+r|0,B=B+r|0}if(i[E+4>>2]=-2&i[E+4>>2],i[o+4>>2]=1|B,i[B+o>>2]=B,B>>>0<=255){g=35884+((A=B>>>3|0)<<3)|0,(B=i[8961])&(A=1<>2]:(i[8961]=A|B,A=g),i[g+8>>2]=o,i[A+12>>2]=o,i[o+12>>2]=g,i[o+8>>2]=A;break E}if(A=31,B>>>0<=16777215&&(A=B>>>8|0,A<<=C=A+1048320>>>16&8,A=28+((A=((A<<=Q=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|Q|C)|0)<<1|B>>>A+21&1)|0),i[o+28>>2]=A,i[o+16>>2]=0,i[o+20>>2]=0,C=36148+(A<<2)|0,(Q=i[8962])&(g=1<>>1|0)|0),g=i[C>>2];;){if(Q=g,(-8&i[g+4>>2])==(0|B))break i;if(g=A>>>29|0,A<<=1,!(g=i[16+(C=Q+(4&g)|0)>>2]))break}i[C+16>>2]=o,i[o+24>>2]=Q}else i[8962]=g|Q,i[C>>2]=o,i[o+24>>2]=C;i[o+12>>2]=o,i[o+8>>2]=o;break E}for(B=(Q=E-40|0)-(A=g+8&7?-8-g&7:0)|0,i[8964]=B,A=A+g|0,i[8967]=A,i[A+4>>2]=1|B,i[4+(g+Q|0)>>2]=40,i[8968]=i[9083],i[(B=(A=(C+(C-39&7?39-C&7:0)|0)-47|0)>>>0>>0?r:A)+4>>2]=27,A=i[9076],i[B+16>>2]=i[9075],i[B+20>>2]=A,A=i[9074],i[B+8>>2]=i[9073],i[B+12>>2]=A,i[9075]=B+8,i[9074]=E,i[9073]=g,i[9076]=0,A=B+24|0;i[A+4>>2]=7,g=A+8|0,A=A+4|0,g>>>0>>0;);if((0|B)==(0|r))break Q;if(i[B+4>>2]=-2&i[B+4>>2],C=B-r|0,i[r+4>>2]=1|C,i[B>>2]=C,C>>>0<=255){g=35884+((A=C>>>3|0)<<3)|0,(B=i[8961])&(A=1<>2]:(i[8961]=A|B,A=g),i[g+8>>2]=r,i[A+12>>2]=r,i[r+12>>2]=g,i[r+8>>2]=A;break Q}if(A=31,i[r+16>>2]=0,i[r+20>>2]=0,C>>>0<=16777215&&(A=C>>>8|0,A<<=Q=A+1048320>>>16&8,A=28+((A=((A<<=B=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|B|Q)|0)<<1|C>>>A+21&1)|0),i[r+28>>2]=A,Q=36148+(A<<2)|0,(B=i[8962])&(g=1<>>1|0)|0),g=i[Q>>2];;){if(B=g,(0|C)==(-8&i[g+4>>2]))break C;if(g=A>>>29|0,A<<=1,!(g=i[16+(Q=B+(4&g)|0)>>2]))break}i[Q+16>>2]=r,i[r+24>>2]=B}else i[8962]=g|B,i[Q>>2]=r,i[r+24>>2]=Q;i[r+12>>2]=r,i[r+8>>2]=r;break Q}A=i[Q+8>>2],i[A+12>>2]=o,i[Q+8>>2]=o,i[o+24>>2]=0,i[o+12>>2]=Q,i[o+8>>2]=A}A=f+8|0;break A}A=i[B+8>>2],i[A+12>>2]=r,i[B+8>>2]=r,i[r+24>>2]=0,i[r+12>>2]=B,i[r+8>>2]=A}if(!((A=i[8964])>>>0<=t>>>0)){g=A-t|0,i[8964]=g,A=(B=i[8967])+t|0,i[8967]=A,i[A+4>>2]=1|g,i[B+4>>2]=3|t,A=B+8|0;break A}}i[8960]=48,A=0;break A}g:if(E){B=i[Q+28>>2];B:{if(i[(A=36148+(B<<2)|0)>>2]==(0|Q)){if(i[A>>2]=g,g)break B;f=vI(-2,B)&f,i[8962]=f;break g}if(i[E+(i[E+16>>2]==(0|Q)?16:20)>>2]=g,!g)break g}i[g+24>>2]=E,(A=i[Q+16>>2])&&(i[g+16>>2]=A,i[A+24>>2]=g),(A=i[Q+20>>2])&&(i[g+20>>2]=A,i[A+24>>2]=g)}g:if(C>>>0<=15)A=C+t|0,i[Q+4>>2]=3|A,i[4+(A=A+Q|0)>>2]=1|i[A+4>>2];else if(i[Q+4>>2]=3|t,i[o+4>>2]=1|C,i[C+o>>2]=C,C>>>0<=255)g=35884+((A=C>>>3|0)<<3)|0,(B=i[8961])&(A=1<>2]:(i[8961]=A|B,A=g),i[g+8>>2]=o,i[A+12>>2]=o,i[o+12>>2]=g,i[o+8>>2]=A;else{A=31,C>>>0<=16777215&&(A=C>>>8|0,A<<=r=A+1048320>>>16&8,A=28+((A=((A<<=B=A+520192>>>16&4)<<(g=A+245760>>>16&2)>>>15|0)-(g|B|r)|0)<<1|C>>>A+21&1)|0),i[o+28>>2]=A,i[o+16>>2]=0,i[o+20>>2]=0,B=36148+(A<<2)|0;B:{if((g=1<>>1|0)|0),t=i[B>>2];;){if((-8&i[(g=t)+4>>2])==(0|C))break B;if(B=A>>>29|0,A<<=1,!(t=i[16+(B=g+(4&B)|0)>>2]))break}i[B+16>>2]=o,i[o+24>>2]=g}else i[8962]=g|f,i[B>>2]=o,i[o+24>>2]=B;i[o+12>>2]=o,i[o+8>>2]=o;break g}A=i[g+8>>2],i[A+12>>2]=o,i[g+8>>2]=o,i[o+24>>2]=0,i[o+12>>2]=g,i[o+8>>2]=A}A=Q+8|0;break A}I:if(y){B=i[g+28>>2];g:{if(i[(A=36148+(B<<2)|0)>>2]==(0|g)){if(i[A>>2]=Q,Q)break g;s=35848,w=vI(-2,B)&o,i[s>>2]=w;break I}if(i[(i[y+16>>2]==(0|g)?16:20)+y>>2]=Q,!Q)break I}i[Q+24>>2]=y,(A=i[g+16>>2])&&(i[Q+16>>2]=A,i[A+24>>2]=Q),(A=i[g+20>>2])&&(i[Q+20>>2]=A,i[A+24>>2]=Q)}C>>>0<=15?(A=C+t|0,i[g+4>>2]=3|A,i[4+(A=A+g|0)>>2]=1|i[A+4>>2]):(i[g+4>>2]=3|t,i[f+4>>2]=1|C,i[C+f>>2]=C,c&&(B=35884+((A=c>>>3|0)<<3)|0,Q=i[8966],(A=1<>2]:(i[8961]=A|E,A=B),i[B+8>>2]=Q,i[A+12>>2]=Q,i[Q+12>>2]=B,i[Q+8>>2]=A),i[8966]=f,i[8963]=C),A=g+8|0}return h=I+16|0,0|A}function _(A,I,g){var B,Q,C,E,n,a,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L,K,q,X,V,W,T,j,Z,O,z,$,AA,IA,gA,BA,QA,CA,EA=0,iA=0,nA=0,aA=0,rA=0,oA=0,eA=0,tA=0,fA=0,cA=0,yA=0,sA=0,wA=0,hA=0,DA=0,uA=0,pA=0,lA=0,FA=0,GA=0,kA=0,_A=0,HA=0,YA=0,bA=0;eA=A,B=EA=HA=i[g+4>>2],t=EA>>31,x=EA=(DA=i[I+20>>2])<<1,EA=eg(B,t,EA,H=EA>>31),nA=p,iA=EA,Q=EA=i[g>>2],C=EA>>31,f=EA=i[I+24>>2],rA=eg(Q,C,EA,E=EA>>31),EA=p+nA|0,EA=(iA=iA+rA|0)>>>0>>0?EA+1|0:EA,nA=iA,L=iA=oA=i[g+8>>2],u=iA>>31,c=iA=i[I+16>>2],iA=nA+(rA=eg(oA,u,iA,n=iA>>31))|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,K=EA=pA=i[g+12>>2],l=EA>>31,q=EA=(sA=i[I+12>>2])<<1,EA=(rA=eg(pA,l,EA,Y=EA>>31))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=EA,O=EA=uA=i[g+16>>2],k=EA>>31,y=EA=i[I+8>>2],rA=eg(uA,k,EA,a=EA>>31),EA=p+iA|0,EA=(nA=nA+rA|0)>>>0>>0?EA+1|0:EA,aA=nA,z=iA=cA=i[g+20>>2],b=iA>>31,X=iA=(fA=i[I+4>>2])<<1,nA=eg(cA,b,iA,m=iA>>31),EA=p+EA|0,EA=(iA=aA+nA|0)>>>0>>0?EA+1|0:EA,nA=iA,$=iA=yA=i[g+24>>2],V=iA>>31,s=iA=i[I>>2],rA=eg(yA,V,iA,o=iA>>31),iA=p+EA|0,iA=(nA=nA+rA|0)>>>0>>0?iA+1|0:iA,lA=i[g+28>>2],F=EA=r(lA,19),G=EA>>31,W=EA=(wA=i[I+36>>2])<<1,EA=(rA=eg(F,G,EA,v=EA>>31))+nA|0,nA=p+iA|0,nA=EA>>>0>>0?nA+1|0:nA,iA=EA,hA=i[g+32>>2],FA=EA=r(hA,19),GA=EA>>31,w=EA=i[I+32>>2],rA=eg(FA,GA,EA,e=EA>>31),EA=p+nA|0,EA=(iA=iA+rA|0)>>>0>>0?EA+1|0:EA,nA=iA,AA=i[g+36>>2],h=g=r(AA,19),D=g>>31,T=g=(I=i[I+28>>2])<<1,iA=eg(h,D,g,U=g>>31),EA=p+EA|0,tA=g=nA+iA|0,g=g>>>0>>0?EA+1|0:EA,EA=eg(c,n,B,t),iA=p,DA=eg(Q,C,rA=DA,S=rA>>31),nA=p+iA|0,nA=(EA=DA+EA|0)>>>0>>0?nA+1|0:nA,DA=sA,sA=eg(oA,u,sA,N=sA>>31),iA=p+nA|0,iA=(EA=sA+EA|0)>>>0>>0?iA+1|0:iA,nA=(sA=eg(y,a,pA,l))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,sA=fA,nA=eg(uA,k,fA,M=fA>>31),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(s,o,cA,b),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=iA,d=iA=r(yA,19),iA=nA+(wA=eg(iA,_=iA>>31,fA=wA,P=fA>>31))|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,EA=(wA=eg(w,e,F,G))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,wA=I,I=(nA=eg(FA,GA,I,R=I>>31))+EA|0,EA=p+iA|0,EA=I>>>0>>0?EA+1|0:EA,iA=eg(h,D,f,E),EA=p+EA|0,_A=I=iA+I|0,I=I>>>0>>0?EA+1|0:EA,EA=eg(B,t,q,Y),nA=p,iA=(yA=eg(Q,C,c,n))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,yA=eg(y,a,oA,u),nA=p+EA|0,nA=(iA=yA+iA|0)>>>0>>0?nA+1|0:nA,EA=(yA=eg(pA,l,X,m))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(yA=eg(s,o,uA,k))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,aA=nA,j=iA=r(cA,19),nA=eg(iA,J=iA>>31,W,v),EA=p+EA|0,EA=(iA=aA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(w,e,d,_),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,cA=eg(F,G,T,U),nA=p+EA|0,nA=(iA=cA+iA|0)>>>0>>0?nA+1|0:nA,EA=(cA=eg(FA,GA,f,E))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(cA=eg(h,D,x,H))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,cA=nA,gA=EA,yA=iA=nA+33554432|0,BA=EA=iA>>>0<33554432?EA+1|0:EA,nA=_A,_A=(67108863&EA)<<6|iA>>>26,EA=(EA>>26)+I|0,EA=(nA=nA+_A|0)>>>0<_A>>>0?EA+1|0:EA,QA=I=(_A=nA)+16777216|0,EA=g+(iA=(nA=I>>>0<16777216?EA+1|0:EA)>>25)|0,EA=(I=(nA=(33554431&nA)<<7|I>>>25)+tA|0)>>>0>>0?EA+1|0:EA,YA=I=(g=I)+33554432|0,I=EA=I>>>0<33554432?EA+1|0:EA,EA=-67108864&YA,i[eA+24>>2]=g-EA,tA=eA,g=eg(B,t,X,m),EA=p,iA=eg(Q,C,y,a),nA=p+EA|0,nA=(g=iA+g|0)>>>0>>0?nA+1|0:nA,iA=eg(s,o,oA,u),EA=p+nA|0,EA=(g=iA+g|0)>>>0>>0?EA+1|0:EA,nA=g,eA=g=r(pA,19),iA=eg(g,pA=g>>31,W,v),EA=p+EA|0,EA=(g=nA+iA|0)>>>0>>0?EA+1|0:EA,iA=g,IA=g=r(uA,19),g=iA+(nA=eg(w,e,g,Z=g>>31))|0,iA=p+EA|0,iA=g>>>0>>0?iA+1|0:iA,nA=eg(T,U,j,J),EA=p+iA|0,EA=(g=nA+g|0)>>>0>>0?EA+1|0:EA,iA=eg(f,E,d,_),nA=p+EA|0,nA=(g=iA+g|0)>>>0>>0?nA+1|0:nA,iA=eg(F,G,x,H),EA=p+nA|0,EA=(g=iA+g|0)>>>0>>0?EA+1|0:EA,iA=eg(FA,GA,c,n),EA=p+EA|0,EA=(g=iA+g|0)>>>0>>0?EA+1|0:EA,nA=eg(h,D,q,Y),iA=p+EA|0,aA=g=nA+g|0,g=g>>>0>>0?iA+1|0:iA,EA=eg(s,o,B,t),nA=p,iA=(uA=eg(Q,C,sA,M))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=iA,uA=iA=r(oA,19),iA=nA+(oA=eg(iA,kA=iA>>31,fA,P))|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,oA=eg(w,e,eA,pA),EA=p+nA|0,EA=(iA=oA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(IA,Z,wA,R),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=(oA=eg(f,E,j,J))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,oA=eg(d,_,rA,S),EA=p+iA|0,EA=(nA=oA+nA|0)>>>0>>0?EA+1|0:EA,iA=(oA=eg(c,n,F,G))+nA|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,oA=eg(FA,GA,DA,N),EA=p+nA|0,EA=(iA=oA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(h,D,y,a),EA=p+EA|0,bA=iA=nA+iA|0,oA=iA>>>0>>0?EA+1|0:EA,EA=eg(EA=r(B,19),EA>>31,W,v),iA=p,nA=eg(Q,C,s,o),iA=p+iA|0,iA=(EA=nA+EA|0)>>>0>>0?iA+1|0:iA,nA=(HA=eg(w,e,uA,kA))+EA|0,EA=p+iA|0,iA=(eA=eg(eA,pA,T,U))+nA|0,nA=p+(nA>>>0>>0?EA+1|0:EA)|0,nA=iA>>>0>>0?nA+1|0:nA,eA=eg(f,E,IA,Z),EA=p+nA|0,EA=(iA=eA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(x,H,j,J),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=(eA=eg(c,n,d,_))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,eA=eg(F,G,q,Y),EA=p+iA|0,EA=(nA=eA+nA|0)>>>0>>0?EA+1|0:EA,iA=(eA=eg(FA,GA,y,a))+nA|0,nA=p+EA|0,nA=iA>>>0>>0?nA+1|0:nA,eA=eg(h,D,X,m),EA=p+nA|0,EA=(iA=eA+iA|0)>>>0>>0?EA+1|0:EA,eA=iA,HA=EA,pA=iA=iA+33554432|0,uA=EA=iA>>>0<33554432?EA+1|0:EA,kA=(67108863&EA)<<6|iA>>>26,iA=(nA=EA>>26)+oA|0,oA=EA=kA+bA|0,nA=aA,EA=EA>>>0>>0?iA+1|0:iA,CA=iA=oA+16777216|0,aA=(33554431&(EA=iA>>>0<16777216?EA+1|0:EA))<<7|iA>>>25,EA=(EA>>25)+g|0,EA=(iA=nA+aA|0)>>>0>>0?EA+1|0:EA,kA=g=iA+33554432|0,g=EA=g>>>0<33554432?EA+1|0:EA,EA=-67108864&kA,i[tA+8>>2]=iA-EA,aA=tA,EA=eg(f,E,B,t),nA=p,iA=(tA=eg(Q,C,wA,R))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=eg(L,u,rA,S),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(c,n,K,l),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,tA=eg(O,k,DA,N),nA=p+EA|0,nA=(iA=tA+iA|0)>>>0>>0?nA+1|0:nA,EA=(tA=eg(y,a,z,b))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(tA=eg(sA,M,$,V))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(s,o,tA=lA,bA=tA>>31),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(FA,GA,fA,P),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,lA=eg(h,D,w,e),nA=p+EA|0,nA=(iA=lA+iA|0)>>>0>>0?nA+1|0:nA,EA=I>>26,I=(lA=(67108863&I)<<6|YA>>>26)+iA|0,iA=EA+nA|0,EA=iA=I>>>0>>0?iA+1|0:iA,YA=I=(nA=I)+16777216|0,I=EA=I>>>0<16777216?EA+1|0:EA,EA=-33554432&YA,i[aA+28>>2]=nA-EA,lA=aA,EA=eg(y,a,B,t),iA=p,aA=eg(Q,C,DA,N),nA=p+iA|0,nA=(EA=aA+EA|0)>>>0>>0?nA+1|0:nA,aA=eg(L,u,sA,M),iA=p+nA|0,iA=(EA=aA+EA|0)>>>0>>0?iA+1|0:iA,nA=(aA=eg(s,o,K,l))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(IA,Z,fA,P),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(w,e,j,J),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,aA=eg(d,_,wA,R),nA=p+EA|0,nA=(iA=aA+iA|0)>>>0>>0?nA+1|0:nA,EA=(aA=eg(f,E,F,G))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(aA=eg(FA,GA,rA,S))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(h,D,c,n),EA=p+EA|0,aA=iA=iA+nA|0,EA=(EA=iA>>>0>>0?EA+1|0:EA)+(iA=g>>26)|0,EA=(g=aA+(nA=(67108863&g)<<6|kA>>>26)|0)>>>0>>0?EA+1|0:EA,FA=g=(iA=g)+16777216|0,g=nA=g>>>0<16777216?EA+1|0:EA,EA=-33554432&FA,i[lA+12>>2]=iA-EA,EA=eg(B,t,T,U),nA=p,iA=(aA=eg(Q,C,w,e))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=eg(f,E,L,u),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,aA=eg(K,l,x,H),nA=p+EA|0,nA=(iA=aA+iA|0)>>>0>>0?nA+1|0:nA,EA=(aA=eg(c,n,O,k))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,nA=(aA=eg(q,Y,z,b))+EA|0,EA=p+iA|0,EA=nA>>>0>>0?EA+1|0:EA,iA=nA,nA=eg(y,a,$,V),EA=p+EA|0,EA=(iA=iA+nA|0)>>>0>>0?EA+1|0:EA,nA=eg(tA,bA,X,m),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,hA=eg(s,o,aA=hA,GA=aA>>31),nA=p+EA|0,nA=(iA=hA+iA|0)>>>0>>0?nA+1|0:nA,EA=(hA=eg(h,D,W,v))+iA|0,iA=p+nA|0,iA=EA>>>0>>0?iA+1|0:iA,hA=EA,EA=(EA=I>>25)+iA|0,EA=(I=hA+(nA=(33554431&I)<<7|YA>>>25)|0)>>>0>>0?EA+1|0:EA,hA=I=(iA=I)+33554432|0,I=EA=I>>>0<33554432?EA+1|0:EA,EA=-67108864&hA,i[lA+32>>2]=iA-EA,nA=iA=cA-(EA=-67108864&yA)|0,EA=(EA=gA-((EA>>>0>cA>>>0)+BA|0)|0)+(iA=g>>25)|0,EA=(g=nA+(cA=(33554431&g)<<7|FA>>>25)|0)>>>0>>0?EA+1|0:EA,(iA=g+33554432|0)>>>0<33554432&&(EA=EA+1|0),EA=(_A-(-33554432&QA)|0)+((67108863&EA)<<6|iA>>>26)|0,i[A+20>>2]=EA,EA=-67108864&iA,i[A+16>>2]=g-EA,EA=eg(w,e,B,t),nA=p,iA=(fA=eg(Q,C,fA,P))+EA|0,EA=p+nA|0,EA=iA>>>0>>0?EA+1|0:EA,nA=(fA=eg(L,u,wA,R))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,EA=(fA=eg(f,E,K,l))+nA|0,nA=p+iA|0,iA=(rA=eg(O,k,rA,S))+EA|0,EA=p+(EA>>>0>>0?nA+1|0:nA)|0,EA=iA>>>0>>0?EA+1|0:EA,nA=eg(c,n,z,b),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=eg(DA,N,$,V),EA=p+EA|0,EA=(iA=nA+iA|0)>>>0>>0?EA+1|0:EA,nA=(rA=eg(y,a,tA,bA))+iA|0,iA=p+EA|0,iA=nA>>>0>>0?iA+1|0:iA,EA=(rA=eg(aA,GA,sA,M))+nA|0,nA=p+iA|0,nA=EA>>>0>>0?nA+1|0:nA,iA=(rA=eg(s,o,AA,AA>>31))+EA|0,EA=p+nA|0,g=iA,EA=(EA=iA>>>0>>0?EA+1|0:EA)+(iA=I>>26)|0,EA=(I=g+(nA=(67108863&I)<<6|hA>>>26)|0)>>>0>>0?EA+1|0:EA,EA=(I=(g=I)+16777216|0)>>>0<16777216?EA+1|0:EA,I=-33554432&(iA=I),i[A+36>>2]=g-I,nA=oA-(-33554432&CA)|0,rA=eA-(I=-67108864&pA)|0,DA=HA-((I>>>0>eA>>>0)+uA|0)|0,EA=eg((33554431&(I=EA))<<7|iA>>>25,EA>>=25,19,0),iA=p+DA|0,EA=iA=(I=EA+rA|0)>>>0>>0?iA+1|0:iA,g=((67108863&(EA=(g=I+33554432|0)>>>0<33554432?EA+1|0:EA))<<6|(iA=g)>>>26)+nA|0,i[A+4>>2]=g,g=A,A=-67108864&iA,i[g>>2]=I-A}function H(A,I){var g,B,Q,C,E,n,a,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0;W=A,t=K=(L=i[I+12>>2])<<1,j=L,L=eg(K,E=K>>31,L,H=L>>31),X=p,K=L,g=L=i[I+16>>2],n=L>>31,D=L=(O=i[I+8>>2])<<1,V=eg(g,n,L,y=L>>31),L=p+X|0,L=(K=K+V|0)>>>0>>0?L+1|0:L,X=K,s=K=(V=i[I+20>>2])<<1,w=K>>31,a=K=(z=i[I+4>>2])<<1,q=eg(s,w,K,B=K>>31),K=p+L|0,K=(X=X+q|0)>>>0>>0?K+1|0:K,F=L=T=i[I+24>>2],f=L>>31,o=L=(BA=i[I>>2])<<1,q=eg(T,f,L,Q=L>>31),L=p+K|0,L=(X=q+X|0)>>>0>>0?L+1|0:L,Z=X,K=i[I+32>>2],h=X=r(K,19),Y=K,X=eg(X,c=X>>31,K,G=K>>31),L=p+L|0,L=(K=Z+X|0)>>>0>>0?L+1|0:L,Z=K,AA=i[I+36>>2],e=K=r(AA,38),C=K>>31,S=I=(X=i[I+28>>2])<<1,q=eg(K,C,I,b=I>>31),I=p+L|0,IA=K=Z+q|0,$=K>>>0>>0?I+1|0:I,I=eg(a,B,g,n),L=p,K=eg(D,y,j,H),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,N=V,q=eg(V,k=V>>31,o,Q),K=p+L|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(h,c,S,b),L=p+K|0,L=(I=q+I|0)>>>0>>0?L+1|0:L,K=eg(e,C,T,f),L=p+L|0,Z=I=K+I|0,QA=I>>>0>>0?L+1|0:L,I=eg(a,B,t,E),K=p,L=(O=eg(q=O,u=q>>31,q,u))+I|0,I=p+K|0,I=L>>>0>>0?I+1|0:I,K=(O=eg(o,Q,g,n))+L|0,L=p+I|0,L=K>>>0>>0?L+1|0:L,_=I=r(X,38),O=X,I=(X=eg(I,l=I>>31,X,m=X>>31))+K|0,K=p+L|0,K=I>>>0>>0?K+1|0:K,I=(L=I)+(X=eg(h,c,I=T<<1,I>>31))|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,K=eg(e,C,s,w),L=p+L|0,v=I=K+I|0,P=L=I>>>0>>0?L+1|0:L,I=L,M=L=v+33554432|0,R=I=L>>>0<33554432?I+1|0:I,L=(L=I>>26)+QA|0,QA=I=(K=(67108863&I)<<6|M>>>26)+Z|0,K=I>>>0>>0?L+1|0:L,J=I=I+16777216|0,L=(L=(K=I>>>0<16777216?K+1|0:K)>>25)+$|0,L=(I=(K=(33554431&K)<<7|I>>>25)+IA|0)>>>0>>0?L+1|0:L,K=I,I=L,Z=L=K+33554432|0,X=I=L>>>0<33554432?I+1|0:I,I=-67108864&L,i[W+24>>2]=K-I,I=eg(o,Q,q,u),L=p,z=eg(a,B,W=z,gA=W>>31),K=p+L|0,K=(I=z+I|0)>>>0>>0?K+1|0:K,L=I,z=I=r(T,19),I=L+(T=eg(I,IA=I>>31,T,f))|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,K=(T=eg(s,w,_,l))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,d=L=g<<1,T=eg(h,c,L,U=L>>31),L=p+I|0,L=(K=T+K|0)>>>0>>0?L+1|0:L,I=K,K=eg(e,C,t,E),L=p+L|0,$=I=I+K|0,T=I>>>0>>0?L+1|0:L,I=eg(s,w,z,IA),L=p,W=eg(o,Q,W,gA),K=p+L|0,K=(I=W+I|0)>>>0>>0?K+1|0:K,W=eg(g,n,_,l),L=p+K|0,L=(I=W+I|0)>>>0>>0?L+1|0:L,K=(W=eg(h,c,t,E))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,W=eg(e,C,q,u),L=p+I|0,gA=K=W+K|0,W=K>>>0>>0?L+1|0:L,I=eg(I=r(V,38),I>>31,V,k),L=p,V=I,K=eg(I=BA,K=I>>31,I,K),L=p+L|0,L=(I=V+K|0)>>>0>>0?L+1|0:L,V=eg(z,IA,d,U),K=p+L|0,K=(I=V+I|0)>>>0>>0?K+1|0:K,V=eg(t,E,_,l),L=p+K|0,L=(I=V+I|0)>>>0>>0?L+1|0:L,K=(V=eg(h,c,D,y))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,V=eg(a,B,e,C),L=p+I|0,z=K=V+K|0,IA=L=K>>>0>>0?L+1|0:L,BA=I=K+33554432|0,x=L=I>>>0<33554432?L+1|0:L,K=(I=L>>26)+W|0,W=L=(V=(67108863&L)<<6|BA>>>26)+gA|0,L=L>>>0>>0?K+1|0:K,gA=I=W+16777216|0,V=(33554431&(L=I>>>0<16777216?L+1|0:L))<<7|I>>>25,L=(L>>25)+T|0,L=(K=V+$|0)>>>0>>0?L+1|0:L,T=K=(I=K)+33554432|0,V=L=K>>>0<33554432?L+1|0:L,L=-67108864&K,i[A+8>>2]=I-L,I=eg(D,y,N,k),L=p,K=eg(g,n,t,E),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=eg(a,B,F,f),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=eg(o,Q,O,m),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=($=eg(e,C,Y,G))+I|0,I=p+L|0,L=X>>26,X=(Z=(67108863&X)<<6|Z>>>26)+K|0,K=(I=K>>>0<$>>>0?I+1|0:I)+L|0,L=K=X>>>0>>0?K+1|0:K,Z=K=(I=X)+16777216|0,X=L=K>>>0<16777216?L+1|0:L,L=-33554432&K,i[A+28>>2]=I-L,I=eg(o,Q,j,H),K=p,L=(q=eg(a,B,q,u))+I|0,I=p+K|0,I=L>>>0>>0?I+1|0:I,q=eg(F,f,_,l),K=p+I|0,K=(L=q+L|0)>>>0>>0?K+1|0:K,I=(q=eg(h,c,s,w))+L|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,K=eg(e,C,g,n),L=p+L|0,L=(L=(I=K+I|0)>>>0>>0?L+1|0:L)+(K=V>>26)|0,K=I=(V=(67108863&V)<<6|T>>>26)+I|0,I=L=I>>>0>>0?L+1|0:L,T=L=K+16777216|0,V=I=L>>>0<16777216?I+1|0:I,I=-33554432&L,i[A+12>>2]=K-I,q=A,I=eg(F,f,D,y),L=p,K=eg(g,n,g,n),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=eg(t,E,s,w),L=p+L|0,L=(I=K+I|0)>>>0>>0?L+1|0:L,K=(j=eg(a,B,S,b))+I|0,I=p+L|0,I=K>>>0>>0?I+1|0:I,L=(j=eg(o,Q,Y,G))+K|0,K=p+I|0,K=L>>>0>>0?K+1|0:K,I=(AA=eg(e,C,j=AA,$=j>>31))+L|0,L=p+K|0,L=I>>>0>>0?L+1|0:L,A=I,L=(I=X>>25)+L|0,L=(K=A+(X=(33554431&X)<<7|Z>>>25)|0)>>>0>>0?L+1|0:L,AA=K=(I=K)+33554432|0,X=L=K>>>0<33554432?L+1|0:L,L=-67108864&K,i[q+32>>2]=I-L,L=V>>25,K=(V=(33554431&V)<<7|T>>>25)+(v-(I=-67108864&M)|0)|0,I=L+(P-((I>>>0>v>>>0)+R|0)|0)|0,L=I=K>>>0>>0?I+1|0:I,V=I=K+33554432|0,I=((67108863&(L=I>>>0<33554432?L+1|0:L))<<6|I>>>26)+(QA=QA-(-33554432&J)|0)|0,i[q+20>>2]=I,I=-67108864&V,i[q+16>>2]=K-I,V=q,I=eg(t,E,F,f),K=p,L=(q=eg(N,k,d,U))+I|0,I=p+K|0,I=L>>>0>>0?I+1|0:I,K=(q=eg(D,y,O,m))+L|0,L=p+I|0,L=K>>>0>>0?L+1|0:L,I=(q=eg(a,B,Y,G))+K|0,K=p+L|0,K=I>>>0>>0?K+1|0:K,q=eg(o,Q,j,$),L=p+K|0,K=I=q+I|0,L=(I=I>>>0>>0?L+1|0:L)+(L=X>>26)|0,L=(K=(X=(67108863&X)<<6|AA>>>26)+K|0)>>>0>>0?L+1|0:L,X=K,I=L,I=(L=K+16777216|0)>>>0<16777216?I+1|0:I,K=-33554432&L,i[V+36>>2]=X-K,q=eg((33554431&I)<<7|L>>>25,I>>25,19,0),L=p+(IA-(((K=-67108864&BA)>>>0>z>>>0)+x|0)|0)|0,K=I=q+(z-K|0)|0,I=I>>>0>>0?L+1|0:L,I=(W-(-33554432&gA)|0)+((67108863&(I=(L=K+33554432|0)>>>0<33554432?I+1|0:I))<<6|L>>>26)|0,i[V+4>>2]=I,A=-67108864&L,i[V>>2]=K-A}function Y(A,I,g){var B,Q=0,C=0,E=0,n=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0;for(h=B=h-2048|0,Yg(B+1024|0,I),QI(B+1024|0,A),Yg(B,B+1024|0),QI(B,g),I=0;n=i[(Q=f=(B+1024|0)+(64|(A=F<<7))|0)>>2],e=i[(E=t=(B+1024|0)+(96|A)|0)>>2],E=i[E+4>>2],a=n,w=i[Q+4>>2],o=e,Q=A+(B+1024|0)|0,r=i[(n=(B+1024|0)+(32|A)|0)>>2],e=i[n+4>>2],o=ug(o^(l=rI(i[Q>>2],i[Q+4>>2],r,e)),(C=E)^(E=p),32),e=ug(a=(s=rI(a,w,o,C=p))^r,e^(r=p),24),P=ug((m=rI(l,a=E,e,E=p))^o,(y=p)^C,16),E=ug(e^(R=rI(s,r,P,S=p)),(N=p)^E,63),e=p,o=i[(r=(B+1024|0)+(104|A)|0)>>2],s=i[r+4>>2],H=i[(C=l=(B+1024|0)+(72|A)|0)>>2],c=i[C+4>>2],G=ug((G=o)^(k=rI(u=i[(C=o=(B+1024|0)+(8|A)|0)>>2],w=i[C+4>>2],U=i[(C=(B+1024|0)+(40|A)|0)>>2],a=i[C+4>>2])),(w=s)^(s=p),32),a=ug(c=(u=rI(H,c,G,w=p))^U,a^(U=p),24),V=ug((M=rI(k,c=s,a,s=p))^G,(J=p)^w,16),s=ug(a^(O=rI(u,U,V,j=p)),(z=p)^s,63),a=p,G=i[(k=U=(B+1024|0)+(112|A)|0)>>2],u=i[k+4>>2],v=i[(k=(B+1024|0)+(80|A)|0)>>2],D=i[k+4>>2],H=G,G=(B+1024|0)+(16|A)|0,Y=i[(b=w=(B+1024|0)+(48|A)|0)>>2],b=i[b+4>>2],H=ug(H^(d=rI(i[G>>2],i[G+4>>2],Y,b)),(c=u)^(u=p),32),b=ug(D=(c=rI(v,D,H,_=p))^Y,b^(Y=p),24),IA=ug(($=rI(d,D=u,b,u=p))^H,(AA=p)^_,16),u=ug(b^(W=rI(c,Y,IA,gA=p)),(q=p)^u,63),b=p,H=i[(Y=(B+1024|0)+(120|A)|0)>>2],_=i[Y+4>>2],BA=i[(c=d=(B+1024|0)+(88|A)|0)>>2],X=i[c+4>>2],L=ug((v=H)^(T=rI(Z=i[(c=H=(B+1024|0)+(24|A)|0)>>2],D=i[c+4>>2],x=i[(A=(B+1024|0)+(56|A)|0)>>2],c=i[A+4>>2])),(D=_)^(_=p),32),c=ug(D=(X=rI(BA,X,L,K=p))^x,c^(x=p),24),v=x,L=ug((x=rI(T,D=_,c,_=p))^L,(T=p)^K,16),_=ug(c^(X=rI(X,v,L,K=p)),(Z=p)^_,63),c=p,v=W,D=q,W=ug(L^(m=rI(m,y,s,a)),K^(y=p),32),s=ug((L=rI(v,D,W,q=p))^s,(K=p)^a,24),a=rI(a=m,y,s,m=p),y=p,i[Q>>2]=a,i[Q+4>>2]=y,Q=ug(a^W,q^y,16),a=p,i[Y>>2]=Q,i[Y+4>>2]=a,Q=rI(L,K,Q,a),a=p,i[k>>2]=Q,i[k+4>>2]=a,QA=C,CA=ug(Q^s,a^m,63),i[QA>>2]=CA,i[C+4>>2]=p,y=u,a=ug(P^(C=rI(M,J,u,b)),S^(s=p),32),Q=ug(y^(u=rI(X,Z,a,k=p)),(Q=b)^(b=p),24),C=rI(C,y=s,Q,s=p),Y=p,i[o>>2]=C,i[o+4>>2]=Y,o=ug(C^a,k^Y,16),C=p,i[t>>2]=o,i[t+4>>2]=C,t=rI(u,b,o,C),i[d>>2]=t,o=p,i[d+4>>2]=o,QA=w,CA=ug(Q^t,o^s,63),i[QA>>2]=CA,i[w+4>>2]=p,Q=rI($,AA,_,c),a=rI(R,N,C=ug(V^Q,j^(o=p),32),s=p),Q=rI(Q,w=o,t=ug(a^_,(k=p)^c,24),o=p),u=w=p,i[G>>2]=Q,i[G+4>>2]=u,Q=ug(Q^C,s^u,16),C=p,i[r>>2]=Q,i[r+4>>2]=C,Q=rI(a,k,Q,C),i[f>>2]=Q,C=f,f=p,i[C+4>>2]=f,QA=A,CA=ug(Q^t,f^o,63),i[QA>>2]=CA,i[A+4>>2]=p,C=E,Q=ug(IA^(f=rI(x,T,E,e)),gA^(t=p),32),A=ug(C^(r=rI(O,z,Q,E=p)),(A=e)^(e=p),24),f=rI(f,C=t,A,t=p),C=o=p,i[H>>2]=f,i[H+4>>2]=C,f=ug(Q^f,E^C,16),Q=p,i[U>>2]=f,i[U+4>>2]=Q,f=rI(r,e,f,Q),i[l>>2]=f,Q=p,i[l+4>>2]=Q,QA=n,CA=ug(A^f,Q^t,63),i[QA>>2]=CA,i[n+4>>2]=p,8!=(0|(F=F+1|0)););for(;F=i[768+(A=(t=I<<4)+(B+1024|0)|0)>>2],f=i[A+772>>2],a=i[(Q=A+512|0)>>2],o=i[Q+4>>2],C=F,F=i[A+256>>2],Q=i[A+260>>2],E=ug(C^(n=rI(i[A>>2],i[A+4>>2],F,Q)),(E=f)^(f=p),32),Q=ug(C=(r=rI(a,o,E,e=p))^F,Q^(F=p),24),w=F,s=ug((o=rI(n,f,Q,F=p))^E,(C=p)^e,16),F=ug(Q^(U=rI(r,w,s,a=p)),(k=p)^F,63),f=p,Q=i[A+780>>2],u=i[A+520>>2],y=i[A+524>>2],r=ug((G=i[A+776>>2])^(e=rI(w=i[(n=t=(B+1024|0)+(8|t)|0)>>2],e=i[n+4>>2],n=i[A+264>>2],E=i[A+268>>2])),(w=Q)^(Q=p),32),E=ug(w=(G=rI(u,y,r,l=p))^n,E^(n=p),24),y=G,u=ug((G=rI(e,w=Q,E,Q=p))^r,(w=p)^l,16),Q=ug(E^(Y=rI(y,n,u,b=p)),(d=p)^Q,63),n=p,E=i[A+900>>2],D=i[A+640>>2],m=i[A+644>>2],c=i[A+896>>2],e=i[A+384>>2],r=i[A+388>>2],H=ug(c^(l=rI(i[A+128>>2],i[A+132>>2],e,r)),(y=E)^(E=p),32),r=ug(y=(c=rI(D,m,H,_=p))^e,r^(e=p),24),D=c,c=ug((c=H)^(H=rI(l,y=E,r,E=p)),(y=_)^(_=p),16),E=ug(r^(y=rI(D,e,c,m=p)),(P=p)^E,63),e=p,r=i[A+908>>2],q=i[A+648>>2],j=i[A+652>>2],v=i[A+904>>2],l=i[A+392>>2],S=i[A+396>>2],N=ug(v^(R=rI(i[A+136>>2],i[A+140>>2],l,S)),(D=r)^(r=p),32),v=S=ug(D=(J=rI(q,j,N,M=p))^l,S^(l=p),24),N=ug((S=rI(R,D=r,S,r=p))^N,(R=p)^M,16),r=ug(v^(J=rI(J,l,N,M=p)),(V=p)^r,63),l=p,v=y,D=P,y=ug(N^(o=rI(o,C,Q,n)),M^(C=p),32),Q=ug((N=rI(v,D,y,P=p))^Q,(M=p)^n,24),n=rI(n=o,C,Q,o=p),C=p,i[A>>2]=n,i[A+4>>2]=C,n=ug(n^y,P^C,16),C=p,i[A+904>>2]=n,i[A+908>>2]=C,n=rI(N,M,n,C),C=p,i[A+640>>2]=n,i[A+644>>2]=C,QA=A,CA=ug(Q^n,o^C,63),i[QA+264>>2]=CA,i[A+268>>2]=p,y=E,n=rI(G,w,E,e),s=rI(J,V,o=ug(s^n,a^(E=p),32),C=p),n=rI(n,a=E,Q=ug(y^s,(Q=e)^(e=p),24),E=p),a=p,i[t>>2]=n,i[t+4>>2]=a,t=ug(n^o,C^a,16),n=p,i[A+768>>2]=t,i[A+772>>2]=n,t=rI(s,e,t,n),i[A+648>>2]=t,n=p,i[A+652>>2]=n,QA=A,CA=ug(Q^t,n^E,63),i[QA+384>>2]=CA,i[A+388>>2]=p,o=r,E=ug(u^(Q=rI(H,_,r,l)),b^(n=p),32),t=ug(o^(r=rI(U,k,E,e=p)),(C=l)^(l=p),24),Q=rI(Q,C=n,t,n=p),C=o=p,i[A+128>>2]=Q,i[A+132>>2]=C,Q=ug(Q^E,C^e,16),E=p,i[A+776>>2]=Q,i[A+780>>2]=E,Q=rI(r,l,Q,E),i[A+512>>2]=Q,E=p,i[A+516>>2]=E,QA=A,CA=ug(Q^t,n^E,63),i[QA+392>>2]=CA,i[A+396>>2]=p,t=rI(S,R,F,f),e=rI(Y,d,n=ug(c^t,m^(Q=p),32),E=p),f=rI(C=t,Q,F=ug(e^F,(r=p)^f,24),t=p),Q=p,i[A+136>>2]=f,i[A+140>>2]=Q,f=ug(n^f,E^Q,16),Q=p,i[A+896>>2]=f,i[A+900>>2]=Q,f=rI(e,r,f,Q),i[A+520>>2]=f,Q=p,i[A+524>>2]=Q,QA=A,CA=ug(f^F,Q^t,63),i[QA+256>>2]=CA,i[A+260>>2]=p,8!=(0|(I=I+1|0)););Yg(g,B),QI(g,B+1024|0),h=B+2048|0}function b(A,I,g){var B,Q=0,C=0,E=0,n=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0;for(h=B=h-2048|0,Yg(B+1024|0,I),QI(B+1024|0,A),Yg(B,B+1024|0),I=0;n=i[(Q=f=(B+1024|0)+(64|(A=F<<7))|0)>>2],e=i[(E=t=(B+1024|0)+(96|A)|0)>>2],E=i[E+4>>2],a=n,w=i[Q+4>>2],o=e,Q=A+(B+1024|0)|0,r=i[(n=(B+1024|0)+(32|A)|0)>>2],e=i[n+4>>2],o=ug(o^(l=rI(i[Q>>2],i[Q+4>>2],r,e)),(C=E)^(E=p),32),e=ug(a=(s=rI(a,w,o,C=p))^r,e^(r=p),24),P=ug((m=rI(l,a=E,e,E=p))^o,(y=p)^C,16),E=ug(e^(R=rI(s,r,P,S=p)),(N=p)^E,63),e=p,o=i[(r=(B+1024|0)+(104|A)|0)>>2],s=i[r+4>>2],H=i[(C=l=(B+1024|0)+(72|A)|0)>>2],c=i[C+4>>2],G=ug((G=o)^(k=rI(u=i[(C=o=(B+1024|0)+(8|A)|0)>>2],w=i[C+4>>2],U=i[(C=(B+1024|0)+(40|A)|0)>>2],a=i[C+4>>2])),(w=s)^(s=p),32),a=ug(c=(u=rI(H,c,G,w=p))^U,a^(U=p),24),V=ug((M=rI(k,c=s,a,s=p))^G,(J=p)^w,16),s=ug(a^(O=rI(u,U,V,j=p)),(z=p)^s,63),a=p,G=i[(k=U=(B+1024|0)+(112|A)|0)>>2],u=i[k+4>>2],v=i[(k=(B+1024|0)+(80|A)|0)>>2],D=i[k+4>>2],H=G,G=(B+1024|0)+(16|A)|0,Y=i[(b=w=(B+1024|0)+(48|A)|0)>>2],b=i[b+4>>2],H=ug(H^(d=rI(i[G>>2],i[G+4>>2],Y,b)),(c=u)^(u=p),32),b=ug(D=(c=rI(v,D,H,_=p))^Y,b^(Y=p),24),IA=ug(($=rI(d,D=u,b,u=p))^H,(AA=p)^_,16),u=ug(b^(W=rI(c,Y,IA,gA=p)),(q=p)^u,63),b=p,H=i[(Y=(B+1024|0)+(120|A)|0)>>2],_=i[Y+4>>2],BA=i[(c=d=(B+1024|0)+(88|A)|0)>>2],X=i[c+4>>2],L=ug((v=H)^(T=rI(Z=i[(c=H=(B+1024|0)+(24|A)|0)>>2],D=i[c+4>>2],x=i[(A=(B+1024|0)+(56|A)|0)>>2],c=i[A+4>>2])),(D=_)^(_=p),32),c=ug(D=(X=rI(BA,X,L,K=p))^x,c^(x=p),24),v=x,L=ug((x=rI(T,D=_,c,_=p))^L,(T=p)^K,16),_=ug(c^(X=rI(X,v,L,K=p)),(Z=p)^_,63),c=p,v=W,D=q,W=ug(L^(m=rI(m,y,s,a)),K^(y=p),32),s=ug((L=rI(v,D,W,q=p))^s,(K=p)^a,24),a=rI(a=m,y,s,m=p),y=p,i[Q>>2]=a,i[Q+4>>2]=y,Q=ug(a^W,q^y,16),a=p,i[Y>>2]=Q,i[Y+4>>2]=a,Q=rI(L,K,Q,a),a=p,i[k>>2]=Q,i[k+4>>2]=a,QA=C,CA=ug(Q^s,a^m,63),i[QA>>2]=CA,i[C+4>>2]=p,y=u,a=ug(P^(C=rI(M,J,u,b)),S^(s=p),32),Q=ug(y^(u=rI(X,Z,a,k=p)),(Q=b)^(b=p),24),C=rI(C,y=s,Q,s=p),Y=p,i[o>>2]=C,i[o+4>>2]=Y,o=ug(C^a,k^Y,16),C=p,i[t>>2]=o,i[t+4>>2]=C,t=rI(u,b,o,C),i[d>>2]=t,o=p,i[d+4>>2]=o,QA=w,CA=ug(Q^t,o^s,63),i[QA>>2]=CA,i[w+4>>2]=p,Q=rI($,AA,_,c),a=rI(R,N,C=ug(V^Q,j^(o=p),32),s=p),Q=rI(Q,w=o,t=ug(a^_,(k=p)^c,24),o=p),u=w=p,i[G>>2]=Q,i[G+4>>2]=u,Q=ug(Q^C,s^u,16),C=p,i[r>>2]=Q,i[r+4>>2]=C,Q=rI(a,k,Q,C),i[f>>2]=Q,C=f,f=p,i[C+4>>2]=f,QA=A,CA=ug(Q^t,f^o,63),i[QA>>2]=CA,i[A+4>>2]=p,C=E,Q=ug(IA^(f=rI(x,T,E,e)),gA^(t=p),32),A=ug(C^(r=rI(O,z,Q,E=p)),(A=e)^(e=p),24),f=rI(f,C=t,A,t=p),C=o=p,i[H>>2]=f,i[H+4>>2]=C,f=ug(Q^f,E^C,16),Q=p,i[U>>2]=f,i[U+4>>2]=Q,f=rI(r,e,f,Q),i[l>>2]=f,Q=p,i[l+4>>2]=Q,QA=n,CA=ug(A^f,Q^t,63),i[QA>>2]=CA,i[n+4>>2]=p,8!=(0|(F=F+1|0)););for(;F=i[768+(A=(t=I<<4)+(B+1024|0)|0)>>2],f=i[A+772>>2],a=i[(Q=A+512|0)>>2],o=i[Q+4>>2],C=F,F=i[A+256>>2],Q=i[A+260>>2],E=ug(C^(n=rI(i[A>>2],i[A+4>>2],F,Q)),(E=f)^(f=p),32),Q=ug(C=(r=rI(a,o,E,e=p))^F,Q^(F=p),24),w=F,s=ug((o=rI(n,f,Q,F=p))^E,(C=p)^e,16),F=ug(Q^(U=rI(r,w,s,a=p)),(k=p)^F,63),f=p,Q=i[A+780>>2],u=i[A+520>>2],y=i[A+524>>2],r=ug((G=i[A+776>>2])^(e=rI(w=i[(n=t=(B+1024|0)+(8|t)|0)>>2],e=i[n+4>>2],n=i[A+264>>2],E=i[A+268>>2])),(w=Q)^(Q=p),32),E=ug(w=(G=rI(u,y,r,l=p))^n,E^(n=p),24),y=G,u=ug((G=rI(e,w=Q,E,Q=p))^r,(w=p)^l,16),Q=ug(E^(Y=rI(y,n,u,b=p)),(d=p)^Q,63),n=p,E=i[A+900>>2],D=i[A+640>>2],m=i[A+644>>2],c=i[A+896>>2],e=i[A+384>>2],r=i[A+388>>2],H=ug(c^(l=rI(i[A+128>>2],i[A+132>>2],e,r)),(y=E)^(E=p),32),r=ug(y=(c=rI(D,m,H,_=p))^e,r^(e=p),24),D=c,c=ug((c=H)^(H=rI(l,y=E,r,E=p)),(y=_)^(_=p),16),E=ug(r^(y=rI(D,e,c,m=p)),(P=p)^E,63),e=p,r=i[A+908>>2],q=i[A+648>>2],j=i[A+652>>2],v=i[A+904>>2],l=i[A+392>>2],S=i[A+396>>2],N=ug(v^(R=rI(i[A+136>>2],i[A+140>>2],l,S)),(D=r)^(r=p),32),v=S=ug(D=(J=rI(q,j,N,M=p))^l,S^(l=p),24),N=ug((S=rI(R,D=r,S,r=p))^N,(R=p)^M,16),r=ug(v^(J=rI(J,l,N,M=p)),(V=p)^r,63),l=p,v=y,D=P,y=ug(N^(o=rI(o,C,Q,n)),M^(C=p),32),Q=ug((N=rI(v,D,y,P=p))^Q,(M=p)^n,24),n=rI(n=o,C,Q,o=p),C=p,i[A>>2]=n,i[A+4>>2]=C,n=ug(n^y,P^C,16),C=p,i[A+904>>2]=n,i[A+908>>2]=C,n=rI(N,M,n,C),C=p,i[A+640>>2]=n,i[A+644>>2]=C,QA=A,CA=ug(Q^n,o^C,63),i[QA+264>>2]=CA,i[A+268>>2]=p,y=E,n=rI(G,w,E,e),s=rI(J,V,o=ug(s^n,a^(E=p),32),C=p),n=rI(n,a=E,Q=ug(y^s,(Q=e)^(e=p),24),E=p),a=p,i[t>>2]=n,i[t+4>>2]=a,t=ug(n^o,C^a,16),n=p,i[A+768>>2]=t,i[A+772>>2]=n,t=rI(s,e,t,n),i[A+648>>2]=t,n=p,i[A+652>>2]=n,QA=A,CA=ug(Q^t,n^E,63),i[QA+384>>2]=CA,i[A+388>>2]=p,o=r,E=ug(u^(Q=rI(H,_,r,l)),b^(n=p),32),t=ug(o^(r=rI(U,k,E,e=p)),(C=l)^(l=p),24),Q=rI(Q,C=n,t,n=p),C=o=p,i[A+128>>2]=Q,i[A+132>>2]=C,Q=ug(Q^E,C^e,16),E=p,i[A+776>>2]=Q,i[A+780>>2]=E,Q=rI(r,l,Q,E),i[A+512>>2]=Q,E=p,i[A+516>>2]=E,QA=A,CA=ug(Q^t,n^E,63),i[QA+392>>2]=CA,i[A+396>>2]=p,t=rI(S,R,F,f),e=rI(Y,d,n=ug(c^t,m^(Q=p),32),E=p),f=rI(C=t,Q,F=ug(e^F,(r=p)^f,24),t=p),Q=p,i[A+136>>2]=f,i[A+140>>2]=Q,f=ug(n^f,E^Q,16),Q=p,i[A+896>>2]=f,i[A+900>>2]=Q,f=rI(e,r,f,Q),i[A+520>>2]=f,Q=p,i[A+524>>2]=Q,QA=A,CA=ug(f^F,Q^t,63),i[QA+256>>2]=CA,i[A+260>>2]=p,8!=(0|(I=I+1|0)););Yg(g,B),QI(g,B+1024|0),h=B+2048|0}function m(A){var I=0,g=0,B=0,Q=0,C=0,E=0,n=0,r=0,o=0;A:if(A|=0){C=(B=A-8|0)+(A=-8&(I=i[A-4>>2]))|0;I:if(!(1&I)){if(!(3&I))break A;if((B=B-(I=i[B>>2])|0)>>>0>2])))return i[8963]=A,i[C+4>>2]=-2&I,i[B+4>>2]=1|A,void(i[A+B>>2]=A)}else{if(I>>>0<=255){if(Q=i[B+8>>2],I=I>>>3|0,(0|(g=i[B+12>>2]))==(0|Q)){r=35844,o=i[8961]&vI(-2,I),i[r>>2]=o;break I}i[Q+12>>2]=g,i[g+8>>2]=Q;break I}if(n=i[B+24>>2],(0|B)==(0|(I=i[B+12>>2])))if((g=i[(Q=B+20|0)>>2])||(g=i[(Q=B+16|0)>>2])){for(;E=Q,(g=i[(Q=(I=g)+20|0)>>2])||(Q=I+16|0,g=i[I+16>>2]););i[E>>2]=0}else I=0;else g=i[B+8>>2],i[g+12>>2]=I,i[I+8>>2]=g;if(!n)break I;Q=i[B+28>>2];g:{if(i[(g=36148+(Q<<2)|0)>>2]==(0|B)){if(i[g>>2]=I,I)break g;r=35848,o=i[8962]&vI(-2,Q),i[r>>2]=o;break I}if(i[n+(i[n+16>>2]==(0|B)?16:20)>>2]=I,!I)break I}if(i[I+24>>2]=n,(g=i[B+16>>2])&&(i[I+16>>2]=g,i[g+24>>2]=I),!(g=i[B+20>>2]))break I;i[I+20>>2]=g,i[g+24>>2]=I}}if(!(B>>>0>=C>>>0)&&1&(I=i[C+4>>2])){I:{if(!(2&I)){if(i[8967]==(0|C)){if(i[8967]=B,A=i[8964]+A|0,i[8964]=A,i[B+4>>2]=1|A,i[8966]!=(0|B))break A;return i[8963]=0,void(i[8966]=0)}if(i[8966]==(0|C))return i[8966]=B,A=i[8963]+A|0,i[8963]=A,i[B+4>>2]=1|A,void(i[A+B>>2]=A);A=(-8&I)+A|0;g:if(I>>>0<=255){if(I=I>>>3|0,(0|(g=i[C+8>>2]))==(0|(Q=i[C+12>>2]))){r=35844,o=i[8961]&vI(-2,I),i[r>>2]=o;break g}i[g+12>>2]=Q,i[Q+8>>2]=g}else{if(n=i[C+24>>2],(0|C)==(0|(I=i[C+12>>2])))if((g=i[(Q=C+20|0)>>2])||(g=i[(Q=C+16|0)>>2])){for(;E=Q,(g=i[(Q=(I=g)+20|0)>>2])||(Q=I+16|0,g=i[I+16>>2]););i[E>>2]=0}else I=0;else g=i[C+8>>2],i[g+12>>2]=I,i[I+8>>2]=g;if(n){Q=i[C+28>>2];B:{if(i[(g=36148+(Q<<2)|0)>>2]==(0|C)){if(i[g>>2]=I,I)break B;r=35848,o=i[8962]&vI(-2,Q),i[r>>2]=o;break g}if(i[n+(i[n+16>>2]==(0|C)?16:20)>>2]=I,!I)break g}i[I+24>>2]=n,(g=i[C+16>>2])&&(i[I+16>>2]=g,i[g+24>>2]=I),(g=i[C+20>>2])&&(i[I+20>>2]=g,i[g+24>>2]=I)}}if(i[B+4>>2]=1|A,i[A+B>>2]=A,i[8966]!=(0|B))break I;return void(i[8963]=A)}i[C+4>>2]=-2&I,i[B+4>>2]=1|A,i[A+B>>2]=A}if(A>>>0<=255)return I=35884+((A=A>>>3|0)<<3)|0,(g=i[8961])&(A=1<>2]:(i[8961]=A|g,A=I),i[I+8>>2]=B,i[A+12>>2]=B,i[B+12>>2]=I,void(i[B+8>>2]=A);Q=31,i[B+16>>2]=0,i[B+20>>2]=0,A>>>0<=16777215&&(I=A>>>8|0,I<<=E=I+1048320>>>16&8,Q=28+((I=((I<<=Q=I+520192>>>16&4)<<(g=I+245760>>>16&2)>>>15|0)-(g|Q|E)|0)<<1|A>>>I+21&1)|0),i[B+28>>2]=Q,E=36148+(Q<<2)|0;I:{g:{if((g=i[8962])&(I=1<>>1|0)|0),I=i[E>>2];;){if(g=I,(-8&i[I+4>>2])==(0|A))break g;if(I=Q>>>29|0,Q<<=1,!(I=i[16+(E=g+(4&I)|0)>>2]))break}i[E+16>>2]=B,i[B+24>>2]=g}else i[8962]=I|g,i[E>>2]=B,i[B+24>>2]=E;i[B+12>>2]=B,i[B+8>>2]=B;break I}A=i[g+8>>2],i[A+12>>2]=B,i[g+8>>2]=B,i[B+24>>2]=0,i[B+12>>2]=g,i[B+8>>2]=A}A=i[8969]-1|0,i[8969]=A||-1}}}function v(A,I){var g,B=0,Q=0,C=0,E=0,n=0,a=0,r=0;g=A+I|0;A:{I:if(!(1&(B=i[A+4>>2]))){if(!(3&B))break A;if(I=(B=i[A>>2])+I|0,(0|(A=A-B|0))==i[8966]){if(3==(3&(B=i[g+4>>2])))return i[8963]=I,i[g+4>>2]=-2&B,i[A+4>>2]=1|I,void(i[g>>2]=I)}else{if(B>>>0<=255){if(C=i[A+8>>2],B=B>>>3|0,(0|(Q=i[A+12>>2]))==(0|C)){a=35844,r=i[8961]&vI(-2,B),i[a>>2]=r;break I}i[C+12>>2]=Q,i[Q+8>>2]=C;break I}if(n=i[A+24>>2],(0|(B=i[A+12>>2]))==(0|A))if((Q=i[(C=A+20|0)>>2])||(Q=i[(C=A+16|0)>>2])){for(;E=C,(Q=i[(C=(B=Q)+20|0)>>2])||(C=B+16|0,Q=i[B+16>>2]););i[E>>2]=0}else B=0;else Q=i[A+8>>2],i[Q+12>>2]=B,i[B+8>>2]=Q;if(!n)break I;C=i[A+28>>2];g:{if(i[(Q=36148+(C<<2)|0)>>2]==(0|A)){if(i[Q>>2]=B,B)break g;a=35848,r=i[8962]&vI(-2,C),i[a>>2]=r;break I}if(i[n+(i[n+16>>2]==(0|A)?16:20)>>2]=B,!B)break I}if(i[B+24>>2]=n,(Q=i[A+16>>2])&&(i[B+16>>2]=Q,i[Q+24>>2]=B),!(Q=i[A+20>>2]))break I;i[B+20>>2]=Q,i[Q+24>>2]=B}}I:{if(!(2&(B=i[g+4>>2]))){if(i[8967]==(0|g)){if(i[8967]=A,I=i[8964]+I|0,i[8964]=I,i[A+4>>2]=1|I,i[8966]!=(0|A))break A;return i[8963]=0,void(i[8966]=0)}if(i[8966]==(0|g))return i[8966]=A,I=i[8963]+I|0,i[8963]=I,i[A+4>>2]=1|I,void(i[A+I>>2]=I);I=(-8&B)+I|0;g:if(B>>>0<=255){if(C=i[g+8>>2],B=B>>>3|0,(0|(Q=i[g+12>>2]))==(0|C)){a=35844,r=i[8961]&vI(-2,B),i[a>>2]=r;break g}i[C+12>>2]=Q,i[Q+8>>2]=C}else{if(n=i[g+24>>2],(0|g)==(0|(B=i[g+12>>2])))if((C=i[(Q=g+20|0)>>2])||(C=i[(Q=g+16|0)>>2])){for(;E=Q,(C=i[(Q=(B=C)+20|0)>>2])||(Q=B+16|0,C=i[B+16>>2]););i[E>>2]=0}else B=0;else Q=i[g+8>>2],i[Q+12>>2]=B,i[B+8>>2]=Q;if(n){C=i[g+28>>2];B:{if(i[(Q=36148+(C<<2)|0)>>2]==(0|g)){if(i[Q>>2]=B,B)break B;a=35848,r=i[8962]&vI(-2,C),i[a>>2]=r;break g}if(i[n+(i[n+16>>2]==(0|g)?16:20)>>2]=B,!B)break g}i[B+24>>2]=n,(Q=i[g+16>>2])&&(i[B+16>>2]=Q,i[Q+24>>2]=B),(Q=i[g+20>>2])&&(i[B+20>>2]=Q,i[Q+24>>2]=B)}}if(i[A+4>>2]=1|I,i[A+I>>2]=I,i[8966]!=(0|A))break I;return void(i[8963]=I)}i[g+4>>2]=-2&B,i[A+4>>2]=1|I,i[A+I>>2]=I}if(I>>>0<=255)return B=35884+((I=I>>>3|0)<<3)|0,(Q=i[8961])&(I=1<>2]:(i[8961]=I|Q,I=B),i[B+8>>2]=A,i[I+12>>2]=A,i[A+12>>2]=B,void(i[A+8>>2]=I);C=31,i[A+16>>2]=0,i[A+20>>2]=0,I>>>0<=16777215&&(B=I>>>8|0,B<<=E=B+1048320>>>16&8,C=28+((B=((B<<=C=B+520192>>>16&4)<<(Q=B+245760>>>16&2)>>>15|0)-(Q|C|E)|0)<<1|I>>>B+21&1)|0),i[A+28>>2]=C,E=36148+(C<<2)|0;I:{if((Q=i[8962])&(B=1<>>1|0)|0),B=i[E>>2];;){if(Q=B,(-8&i[B+4>>2])==(0|I))break I;if(B=C>>>29|0,C<<=1,!(B=i[16+(E=Q+(4&B)|0)>>2]))break}i[E+16>>2]=A,i[A+24>>2]=Q}else i[8962]=B|Q,i[E>>2]=A,i[A+24>>2]=E;return i[A+12>>2]=A,void(i[A+8>>2]=A)}I=i[Q+8>>2],i[I+12>>2]=A,i[Q+8>>2]=A,i[A+24>>2]=0,i[A+12>>2]=Q,i[A+8>>2]=I}}function U(A,I,g,B,Q){var E,a,r,o,e,t,f,c,y,s,w,D,u,p,l,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0,U=0,S=0,N=0,M=0,d=0,P=0,R=0,J=0,x=0,L=0,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0;for(h=E=h+-64|0,a=i[A+60>>2],r=i[A+56>>2],K=i[A+52>>2],x=i[A+48>>2],o=i[A+44>>2],e=i[A+40>>2],t=i[A+36>>2],f=i[A+32>>2],c=i[A+28>>2],y=i[A+24>>2],s=i[A+20>>2],w=i[A+16>>2],D=i[A+12>>2],u=i[A+8>>2],p=i[A+4>>2],l=i[A>>2];;){if(!Q&B>>>0>63|Q)k=g;else{if(_=0,k=F=EA(E,0,64),B|Q)for(;C[F+_|0]=n[I+_|0],!Q&(_=_+1|0)>>>0>>0|Q;);I=k,V=g}for(q=20,m=l,v=p,U=u,S=D,_=w,F=s,g=y,N=c,H=f,Y=t,M=e,d=a,P=r,G=K,R=x,L=o;b=_,m=Hg((_=_+m|0)^R,16),R=Hg(b^(H=m+H|0),12),b=H,H=Hg((H=m)^(m=_+R|0),8),_=Hg(R^(J=b+H|0),7),b=F,v=Hg((F=F+v|0)^G,16),G=Hg(b^(Y=v+Y|0),12),b=Y,Y=Hg((Y=v)^(v=F+G|0),8),F=Hg(G^(X=b+Y|0),7),G=g,U=Hg((g=g+U|0)^P,16),b=P=Hg(G^(M=U+M|0),12),P=Hg((G=U)^(U=g+P|0),8),g=Hg(b^(M=P+M|0),7),G=N,S=Hg((N=N+S|0)^d,16),L=G=Hg(G^(d=S+L|0),12),b=d,d=Hg((d=S)^(S=N+G|0),8),N=Hg(L^(G=b+d|0),7),b=M,M=Hg((m=F+m|0)^d,16),F=Hg((R=b+M|0)^F,12),d=Hg(M^(m=F+m|0),8),F=Hg(F^(M=R+d|0),7),H=Hg((v=g+v|0)^H,16),g=Hg((G=H+G|0)^g,12),R=Hg(H^(v=g+v|0),8),g=Hg(g^(L=G+R|0),7),H=Hg((U=N+U|0)^Y,16),N=Hg((Y=H+J|0)^N,12),G=Hg(H^(U=N+U|0),8),N=Hg(N^(H=Y+G|0),7),Y=Hg((S=_+S|0)^P,16),_=Hg((J=Y+X|0)^_,12),P=Hg(Y^(S=_+S|0),8),_=Hg(_^(Y=J+P|0),7),q=q-2|0;);if(q=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,J=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,X=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,W=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,T=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,j=n[I+24|0]|n[I+25|0]<<8|n[I+26|0]<<16|n[I+27|0]<<24,Z=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,O=n[I+32|0]|n[I+33|0]<<8|n[I+34|0]<<16|n[I+35|0]<<24,z=n[I+36|0]|n[I+37|0]<<8|n[I+38|0]<<16|n[I+39|0]<<24,$=n[I+40|0]|n[I+41|0]<<8|n[I+42|0]<<16|n[I+43|0]<<24,AA=n[I+44|0]|n[I+45|0]<<8|n[I+46|0]<<16|n[I+47|0]<<24,IA=n[I+48|0]|n[I+49|0]<<8|n[I+50|0]<<16|n[I+51|0]<<24,gA=n[I+52|0]|n[I+53|0]<<8|n[I+54|0]<<16|n[I+55|0]<<24,BA=n[I+56|0]|n[I+57|0]<<8|n[I+58|0]<<16|n[I+59|0]<<24,b=n[I+60|0]|n[I+61|0]<<8|n[I+62|0]<<16|n[I+63|0]<<24,xI(k,m+l^(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24)),xI(k+4|0,v+p^q),xI(k+8|0,U+u^J),xI(k+12|0,S+D^X),xI(k+16|0,_+w^W),xI(k+20|0,F+s^T),xI(k+24|0,g+y^j),xI(k+28|0,N+c^Z),xI(k+32|0,H+f^O),xI(k+36|0,Y+t^z),xI(k+40|0,$^M+e),xI(k+44|0,AA^L+o),xI(k+48|0,IA^R+x),xI(k+52|0,gA^G+K),xI(k+56|0,BA^P+r),xI(k+60|0,b^d+a),K=((x=(g=x)+1|0)>>>0>>0)+K|0,!Q&B>>>0<=64){if(!(!B|!Q&B>>>0>63|0!=(0|Q)))for(F=0;C[F+V|0]=n[k+F|0],(0|B)!=(0|(F=F+1|0)););i[A+52>>2]=K,i[A+48>>2]=x,h=E- -64|0;break}I=I- -64|0,g=k- -64|0,Q=Q-1|0,Q=(B=B+-64|0)>>>0<4294967232?Q+1|0:Q}}function S(A,I,g,B){var Q=0,C=0,E=0,a=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0,G=0,k=0,_=0,H=0,Y=0,b=0,m=0,v=0;if(c=i[A+36>>2],a=i[A+32>>2],E=i[A+28>>2],C=i[A+24>>2],o=i[A+20>>2],!B&g>>>0>=16|B)for(H=!n[A+80|0]<<24,s=i[A+4>>2],Y=r(s,5),D=i[A+8>>2],_=r(D,5),G=i[A+12>>2],k=r(G,5),Q=i[A+16>>2],u=r(Q,5),b=Q,w=i[A>>2];Q=eg(e=((n[I+3|0]|n[I+4|0]<<8|n[I+5|0]<<16|n[I+6|0]<<24)>>>2&67108863)+C|0,0,G,0),t=p,C=(y=eg(o=(67108863&(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24))+o|0,0,b,0))+Q|0,Q=p+t|0,Q=C>>>0>>0?Q+1|0:Q,f=C,C=eg(t=((n[I+6|0]|n[I+7|0]<<8|n[I+8|0]<<16|n[I+9|0]<<24)>>>4&67108863)+E|0,0,D,0),Q=p+Q|0,Q=C>>>0>(E=f+C|0)>>>0?Q+1|0:Q,C=E,E=eg(y=((n[I+9|0]|n[I+10|0]<<8|n[I+11|0]<<16|n[I+12|0]<<24)>>>6|0)+a|0,0,s,0),Q=p+Q|0,Q=E>>>0>(a=C+E|0)>>>0?Q+1|0:Q,C=a,a=eg(h=c+H+((n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24)>>>8)|0,0,w,0),Q=p+Q|0,m=c=C+a|0,c=a>>>0>c>>>0?Q+1|0:Q,Q=eg(e,0,D,0),E=p,a=(C=eg(o,0,G,0))+Q|0,Q=p+E|0,Q=C>>>0>a>>>0?Q+1|0:Q,E=eg(t,0,s,0),Q=p+Q|0,Q=E>>>0>(a=E+a|0)>>>0?Q+1|0:Q,E=eg(y,0,w,0),Q=p+Q|0,Q=E>>>0>(a=E+a|0)>>>0?Q+1|0:Q,E=eg(h,0,u,0),Q=p+Q|0,v=a=E+a|0,a=E>>>0>a>>>0?Q+1|0:Q,Q=eg(e,0,s,0),C=p,E=(l=eg(o,0,D,0))+Q|0,Q=p+C|0,Q=E>>>0>>0?Q+1|0:Q,C=eg(t,0,w,0),Q=p+Q|0,Q=C>>>0>(E=C+E|0)>>>0?Q+1|0:Q,C=eg(y,0,u,0),Q=p+Q|0,Q=C>>>0>(E=C+E|0)>>>0?Q+1|0:Q,C=eg(h,0,k,0),Q=p+Q|0,l=E=C+E|0,E=C>>>0>E>>>0?Q+1|0:Q,Q=eg(e,0,w,0),f=p,C=(F=eg(o,0,s,0))+Q|0,Q=p+f|0,Q=C>>>0>>0?Q+1|0:Q,f=eg(t,0,u,0),Q=p+Q|0,Q=(C=f+C|0)>>>0>>0?Q+1|0:Q,f=eg(y,0,k,0),Q=p+Q|0,Q=(C=f+C|0)>>>0>>0?Q+1|0:Q,f=eg(h,0,_,0),Q=p+Q|0,Q=(C=f+C|0)>>>0>>0?Q+1|0:Q,f=C,C=Q,Q=eg(e,0,u,0),F=p,e=(o=eg(o,0,w,0))+Q|0,Q=p+F|0,Q=e>>>0>>0?Q+1|0:Q,o=eg(t,0,k,0),Q=p+Q|0,Q=(e=o+e|0)>>>0>>0?Q+1|0:Q,o=eg(y,0,_,0),Q=p+Q|0,Q=(e=o+e|0)>>>0>>0?Q+1|0:Q,o=eg(h,0,Y,0),Q=p+Q|0,Q=(e=o+e|0)>>>0>>0?Q+1|0:Q,o=e,t=(67108863&Q)<<6|e>>>26,Q=C,t=(67108863&(Q=(e=t+f|0)>>>0>>0?Q+1|0:Q))<<6|(C=e)>>>26,Q=E,Q=(C=t+l|0)>>>0>>0?Q+1|0:Q,t=C,C=(67108863&Q)<<6|C>>>26,Q=a,y=E=C+v|0,E=(67108863&(Q=C>>>0>E>>>0?Q+1|0:Q))<<6|E>>>26,Q=c,c=a=E+m|0,C=(67108863&e)+((Q=r((67108863&(Q=E>>>0>a>>>0?Q+1|0:Q))<<6|a>>>26,5)+(67108863&o)|0)>>>26|0)|0,E=67108863&t,a=67108863&y,c&=67108863,o=67108863&Q,I=I+16|0,!(B=B-(g>>>0<16)|0)&(g=g-16|0)>>>0>15|B;);i[A+20>>2]=o,i[A+36>>2]=c,i[A+32>>2]=a,i[A+28>>2]=E,i[A+24>>2]=C}function N(A,I,g){var B,Q,E,i,a=0,r=0,o=0,e=0,t=0;return h=E=h-160|0,mI(I,g,32,0),C[0|I]=248&n[0|I],C[I+31|0]=63&n[I+31|0]|64,CA(E,I),nI(A,E),r=n[(Q=g)+8|0]|n[Q+9|0]<<8|n[Q+10|0]<<16|n[Q+11|0]<<24,a=n[Q+12|0]|n[Q+13|0]<<8|n[Q+14|0]<<16|n[Q+15|0]<<24,o=n[Q+16|0]|n[Q+17|0]<<8|n[Q+18|0]<<16|n[Q+19|0]<<24,e=n[Q+20|0]|n[Q+21|0]<<8|n[Q+22|0]<<16|n[Q+23|0]<<24,t=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,g=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,B=I,i=n[Q+28|0]|n[Q+29|0]<<8|n[Q+30|0]<<16|n[Q+31|0]<<24,I=n[Q+24|0]|n[Q+25|0]<<8|n[Q+26|0]<<16|n[Q+27|0]<<24,C[B+24|0]=I,C[B+25|0]=I>>>8,C[B+26|0]=I>>>16,C[B+27|0]=I>>>24,C[B+28|0]=i,C[B+29|0]=i>>>8,C[B+30|0]=i>>>16,C[B+31|0]=i>>>24,C[B+16|0]=o,C[B+17|0]=o>>>8,C[B+18|0]=o>>>16,C[B+19|0]=o>>>24,C[B+20|0]=e,C[B+21|0]=e>>>8,C[B+22|0]=e>>>16,C[B+23|0]=e>>>24,C[B+8|0]=r,C[B+9|0]=r>>>8,C[B+10|0]=r>>>16,C[B+11|0]=r>>>24,C[B+12|0]=a,C[B+13|0]=a>>>8,C[B+14|0]=a>>>16,C[B+15|0]=a>>>24,C[0|B]=t,C[B+1|0]=t>>>8,C[B+2|0]=t>>>16,C[B+3|0]=t>>>24,C[B+4|0]=g,C[B+5|0]=g>>>8,C[B+6|0]=g>>>16,C[B+7|0]=g>>>24,o=n[(a=A)+8|0]|n[a+9|0]<<8|n[a+10|0]<<16|n[a+11|0]<<24,e=n[a+12|0]|n[a+13|0]<<8|n[a+14|0]<<16|n[a+15|0]<<24,t=n[a+16|0]|n[a+17|0]<<8|n[a+18|0]<<16|n[a+19|0]<<24,g=n[a+20|0]|n[a+21|0]<<8|n[a+22|0]<<16|n[a+23|0]<<24,I=n[0|a]|n[a+1|0]<<8|n[a+2|0]<<16|n[a+3|0]<<24,A=n[a+4|0]|n[a+5|0]<<8|n[a+6|0]<<16|n[a+7|0]<<24,r=n[a+28|0]|n[a+29|0]<<8|n[a+30|0]<<16|n[a+31|0]<<24,a=n[a+24|0]|n[a+25|0]<<8|n[a+26|0]<<16|n[a+27|0]<<24,C[B+56|0]=a,C[B+57|0]=a>>>8,C[B+58|0]=a>>>16,C[B+59|0]=a>>>24,C[B+60|0]=r,C[B+61|0]=r>>>8,C[B+62|0]=r>>>16,C[B+63|0]=r>>>24,C[B+48|0]=t,C[B+49|0]=t>>>8,C[B+50|0]=t>>>16,C[B+51|0]=t>>>24,C[B+52|0]=g,C[B+53|0]=g>>>8,C[B+54|0]=g>>>16,C[B+55|0]=g>>>24,C[B+40|0]=o,C[B+41|0]=o>>>8,C[B+42|0]=o>>>16,C[B+43|0]=o>>>24,C[B+44|0]=e,C[B+45|0]=e>>>8,C[B+46|0]=e>>>16,C[B+47|0]=e>>>24,C[B+32|0]=I,C[B+33|0]=I>>>8,C[B+34|0]=I>>>16,C[B+35|0]=I>>>24,C[B+36|0]=A,C[B+37|0]=A>>>8,C[B+38|0]=A>>>16,C[B+39|0]=A>>>24,h=E+160|0,0}function M(A,I,g){var B,Q=0,E=0,i=0;h=B=h+-64|0;A:{if(!(!g|g>>>0>=65)){if(Q=-1,!(n[A+80|0]|n[A+81|0]<<8|n[A+82|0]<<16|n[A+83|0]<<24|n[A+84|0]|n[A+85|0]<<8|n[A+86|0]<<16|n[A+87|0]<<24)){if(E=A,(Q=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)>>>0>=129){if(iA(A,128),l(A,i=A+96|0),Q=(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)-128|0,C[A+352|0]=Q,C[A+353|0]=Q>>>8,C[A+354|0]=Q>>>16,C[A+355|0]=Q>>>24,Q>>>0>=129)break A;X(i,A+224|0,Q),Q=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24}iA(E,Q),n[A+356|0]&&(C[A+88|0]=255,C[A+89|0]=255,C[A+90|0]=255,C[A+91|0]=255,C[A+92|0]=255,C[A+93|0]=255,C[A+94|0]=255,C[A+95|0]=255),C[A+80|0]=255,C[A+81|0]=255,C[A+82|0]=255,C[A+83|0]=255,C[A+84|0]=255,C[A+85|0]=255,C[A+86|0]=255,C[A+87|0]=255,EA((Q=A+96|0)+(E=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)|0,0,256-E|0),l(A,Q),tI(B,n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24,n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24),tI(8|B,n[A+8|0]|n[A+9|0]<<8|n[A+10|0]<<16|n[A+11|0]<<24,n[A+12|0]|n[A+13|0]<<8|n[A+14|0]<<16|n[A+15|0]<<24),tI(B+16|0,n[A+16|0]|n[A+17|0]<<8|n[A+18|0]<<16|n[A+19|0]<<24,n[A+20|0]|n[A+21|0]<<8|n[A+22|0]<<16|n[A+23|0]<<24),tI(B+24|0,n[A+24|0]|n[A+25|0]<<8|n[A+26|0]<<16|n[A+27|0]<<24,n[A+28|0]|n[A+29|0]<<8|n[A+30|0]<<16|n[A+31|0]<<24),tI(B+32|0,n[A+32|0]|n[A+33|0]<<8|n[A+34|0]<<16|n[A+35|0]<<24,n[A+36|0]|n[A+37|0]<<8|n[A+38|0]<<16|n[A+39|0]<<24),tI(B+40|0,n[A+40|0]|n[A+41|0]<<8|n[A+42|0]<<16|n[A+43|0]<<24,n[A+44|0]|n[A+45|0]<<8|n[A+46|0]<<16|n[A+47|0]<<24),tI(B+48|0,n[A+48|0]|n[A+49|0]<<8|n[A+50|0]<<16|n[A+51|0]<<24,n[A+52|0]|n[A+53|0]<<8|n[A+54|0]<<16|n[A+55|0]<<24),tI(B+56|0,n[A+56|0]|n[A+57|0]<<8|n[A+58|0]<<16|n[A+59|0]<<24,n[A+60|0]|n[A+61|0]<<8|n[A+62|0]<<16|n[A+63|0]<<24),X(I,B,g),fI(A,64),fI(Q,256),Q=0}return h=B- -64|0,Q}OI(),e()}t(1854,1886,306,1931),e()}function d(A,I){var g,B,Q,C,E,a,r,o,e,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0;g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,u=HI(I+4|0),t=p,h=HI(I+7|0),c=p,D=HI(I+10|0),f=p,B=HI(I+13|0),s=p,y=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,Q=HI(I+20|0),l=p,C=HI(I+23|0),E=p,a=HI(I+26|0),r=p,o=HI(I+29|0),I=f<<3|D>>>29,F=f=D<<3,D=f=f+16777216|0,f=I=f>>>0<16777216?I+1|0:I,c=I=c<<5|h>>>27,e=w=h<<5,t=I=t<<6|(h=u)>>>26,u=I=16777216+(h<<=6)|0,w=I,I=(I=(t=I>>>0<16777216?t+1|0:t)>>25)+c|0,I=(t=e+(w=(33554431&t)<<7|w>>>25)|0)>>>0>>0?I+1|0:I,(c=t+33554432|0)>>>0<33554432&&(I=I+1|0),I=(F-(-33554432&D)|0)+((67108863&I)<<6|c>>>26)|0,i[A+12>>2]=I,I=-67108864&c,i[A+8>>2]=t-I,I=0,w=y=(c=y)+16777216|0,y=I=y>>>0<16777216?1:I,F=c-(-33554432&w)|0,I=s<<2|(c=B)>>>30,s=c<<2,c=I,I=(I=f>>25)+c|0,t=I=(f=(t=s)+(s=(33554431&f)<<7|D>>>25)|0)>>>0>>0?I+1|0:I,c=I=f+33554432|0,I=((67108863&(t=I>>>0<33554432?t+1|0:t))<<6|I>>>26)+F|0,i[A+20>>2]=I,I=-67108864&c,i[A+16>>2]=f-I,s=(t=Q)<<7,I=(I=l<<7|t>>>25)+(t=y>>25)|0,I=(y=s+(c=(33554431&y)<<7|w>>>25)|0)>>>0>>0?I+1|0:I,y=t=y,c=t=t+33554432|0,t=I=t>>>0<33554432?I+1|0:I,I=-67108864&c,i[(f=A)+24>>2]=y-I,y=f,I=E<<5|(f=C)>>>27,l=f<<=5,s=f=f+16777216|0,f=I=f>>>0<16777216?I+1|0:I,I=(l-(-33554432&s)|0)+((67108863&t)<<6|c>>>26)|0,i[y+28>>2]=I,c=(t=a)<<4,t=I=r<<4|t>>>28,I=(I=f>>25)+t|0,I=(f=(w=c)+(c=(33554431&f)<<7|s>>>25)|0)>>>0>>0?I+1|0:I,f=t=f,c=t=t+33554432|0,t=I=t>>>0<33554432?I+1|0:I,I=-67108864&c,i[y+32>>2]=f-I,I=0,f=y=(y=o)<<2&33554428,I=(y=y+16777216|0)>>>0<16777216?I+1|0:I,t=(f-(33554432&y)|0)+((67108863&t)<<6|c>>>26)|0,i[A+36>>2]=t,y=eg((33554431&I)<<7|y>>>25,I>>>25|0,19,0),I=p,I=(t=y+g|0)>>>0>>0?I+1|0:I,(f=t+33554432|0)>>>0<33554432&&(I=I+1|0),I=(h-(-33554432&u)|0)+((67108863&I)<<6|f>>>26)|0,i[A+4>>2]=I,I=A,A=-67108864&f,i[I>>2]=t-A}function P(A,I){var g,B,Q,C,E,n,a,r,o,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,l=0,F=0,G=0,k=0;l=t=i[(e=I)+4>>2],D=t>>31,F=t=i[e+8>>2],B=t>>31,w=t=i[e+12>>2],u=t>>31,G=t=i[e+16>>2],Q=t>>31,h=t=i[e+20>>2],s=t>>31,k=t=i[e+24>>2],C=t>>31,E=t=i[e>>2],n=t>>31,c=t=eg(e=i[e+36>>2],e>>31,121666,0),e=p,g=t=t+16777216|0,t=e=t>>>0<16777216?e+1|0:e,a=c-(-33554432&g)|0,f=eg(e=i[I+32>>2],e>>31,121666,0),r=p,c=eg(I=i[I+28>>2],I>>31,121666,0),e=p,y=f,o=I=c+16777216|0,f=I,I=(I=(e=I>>>0<16777216?e+1|0:e)>>25)+r|0,I=(e=y+(f=(33554431&e)<<7|f>>>25)|0)>>>0>>0?I+1|0:I,f=e,e=I,y=I=f+33554432|0,I=((67108863&(e=I>>>0<33554432?e+1|0:e))<<6|I>>>26)+a|0,i[A+36>>2]=I,I=-67108864&y,i[A+32>>2]=f-I,y=c-(-33554432&o)|0,e=eg(k,C,121666,0),k=p,c=eg(h,s,121666,0),I=p,f=e,h=e=c+16777216|0,s=e,e=(e=(I=e>>>0<16777216?I+1|0:I)>>25)+k|0,e=(I=f+(s=(33554431&I)<<7|s>>>25)|0)>>>0>>0?e+1|0:e,(f=I+33554432|0)>>>0<33554432&&(e=e+1|0),e=y+((67108863&e)<<6|f>>>26)|0,i[A+28>>2]=e,e=-67108864&f,i[A+24>>2]=I-e,h=c-(-33554432&h)|0,I=eg(G,Q,121666,0),G=p,c=eg(w,u,121666,0),e=p,y=I,w=I=c+16777216|0,u=(33554431&(e=I>>>0<16777216?e+1|0:e))<<7|I>>>25,e=(e>>25)+G|0,I=e=(f=y+u|0)>>>0>>0?e+1|0:e,I=((67108863&(I=(e=f+33554432|0)>>>0<33554432?I+1|0:I))<<6|e>>>26)+h|0,i[A+20>>2]=I,I=-67108864&e,i[A+16>>2]=f-I,w=c-(-33554432&w)|0,e=eg(F,B,121666,0),F=p,c=eg(l,D,121666,0),I=p,y=e,l=e=c+16777216|0,D=(33554431&(I=e>>>0<16777216?I+1|0:I))<<7|e>>>25,I=(I>>25)+F|0,e=I=(f=y+D|0)>>>0>>0?I+1|0:I,y=I=f+33554432|0,I=((67108863&(e=I>>>0<33554432?e+1|0:e))<<6|I>>>26)+w|0,i[A+12>>2]=I,I=-67108864&y,i[A+8>>2]=f-I,I=eg((33554431&t)<<7|g>>>25,t>>25,19,0),e=p,y=c-(-33554432&l)|0,t=eg(E,n,121666,0),e=p+e|0,e=(I=t+I|0)>>>0>>0?e+1|0:e,(t=I+33554432|0)>>>0<33554432&&(e=e+1|0),e=y+((67108863&e)<<6|t>>>26)|0,i[A+4>>2]=e,e=A,A=-67108864&t,i[e>>2]=I-A}function R(A,I,g,B){var Q,E=0,a=0;h=Q=h-16|0,E=-31;A:{I:{g:{B:switch(B-1|0){case 1:if(I>>>0<13)break I;B=n[35660]|n[35661]<<8|n[35662]<<16|n[35663]<<24,E=n[35656]|n[35657]<<8|n[35658]<<16|n[35659]<<24,C[0|A]=E,C[A+1|0]=E>>>8,C[A+2|0]=E>>>16,C[A+3|0]=E>>>24,C[A+4|0]=B,C[A+5|0]=B>>>8,C[A+6|0]=B>>>16,C[A+7|0]=B>>>24,B=n[35665]|n[35666]<<8|n[35667]<<16|n[35668]<<24,E=n[35661]|n[35662]<<8|n[35663]<<16|n[35664]<<24,C[A+5|0]=E,C[A+6|0]=E>>>8,C[A+7|0]=E>>>16,C[A+8|0]=E>>>24,C[A+9|0]=B,C[A+10|0]=B>>>8,C[A+11|0]=B>>>16,C[A+12|0]=B>>>24,a=-12,B=12;break g;case 0:break B;default:break A}if(I>>>0<12)break I;B=n[35673]|n[35674]<<8|n[35675]<<16|n[35676]<<24,E=n[35669]|n[35670]<<8|n[35671]<<16|n[35672]<<24,C[0|A]=E,C[A+1|0]=E>>>8,C[A+2|0]=E>>>16,C[A+3|0]=E>>>24,C[A+4|0]=B,C[A+5|0]=B>>>8,C[A+6|0]=B>>>16,C[A+7|0]=B>>>24,B=n[35677]|n[35678]<<8|n[35679]<<16|n[35680]<<24,C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,a=-11,B=11}if(E=oA(g))break A;if(qA(Q+5|0,19),!((E=I+a|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+B|0,Q+5|0,I+1|0),!((B=E-I|0)>>>0<4)&&(C[0|(A=A+I|0)]=36,C[A+1|0]=109,C[A+2|0]=61,C[A+3|0]=0,qA(Q+5|0,i[g+44>>2]),!((B=B-3|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+3|0,Q+5|0,I+1|0),!((B=B-I|0)>>>0<4)&&(C[0|(A=A+I|0)]=44,C[A+1|0]=116,C[A+2|0]=61,C[A+3|0]=0,qA(Q+5|0,i[g+40>>2]),!((B=B-3|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+3|0,Q+5|0,I+1|0),!((B=B-I|0)>>>0<4)&&(C[0|(A=A+I|0)]=44,C[A+1|0]=112,C[A+2|0]=61,C[A+3|0]=0,qA(Q+5|0,i[g+48>>2]),!((B=B-3|0)>>>0<=(I=YA(Q+5|0))>>>0)&&(A=X(A+3|0,Q+5|0,I+1|0),!((B=B-I|0)>>>0<2)&&(C[0|(A=A+I|0)]=36,C[A+1|0]=0,O(A=A+1|0,I=B-1|0,i[g+16>>2],i[g+20>>2],3)))))))))){if(E=-31,(B=(B=I)-(I=YA(A))|0)>>>0<2)break A;return C[0|(A=A+I|0)]=36,C[A+1|0]=0,A=O(A+1|0,B-1|0,i[g>>2],i[g+4>>2],3),h=Q+16|0,A?0:-31}}E=-31}return h=Q+16|0,E}function J(A,I,g,B){var Q,E=0;Q=E=h,h=E=E-576&-64,i[E+188>>2]=0,xI(E+188|0,I);A:if(I>>>0<=64){if((0|iI(E+192|0,0,0,I))<0)break A;if((0|hg(E+192|0,E+188|0,4,0))<0)break A;if((0|hg(E+192|0,g,B,0))<0)break A;dI(E+192|0,A,I)}else if(!((0|iI(E+192|0,0,0,64))<0||(0|hg(E+192|0,E+188|0,4,0))<0||(0|hg(E+192|0,g,B,0))<0||(0|dI(E+192|0,E+112|0,64))<0)){if(g=i[E+116>>2],B=i[E+112>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24,g=i[E+124>>2],B=i[E+120>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=g,C[A+13|0]=g>>>8,C[A+14|0]=g>>>16,C[A+15|0]=g>>>24,g=i[E+140>>2],B=i[E+136>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=g,C[A+29|0]=g>>>8,C[A+30|0]=g>>>16,C[A+31|0]=g>>>24,g=i[E+132>>2],B=i[E+128>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=g,C[A+21|0]=g>>>8,C[A+22|0]=g>>>16,C[A+23|0]=g>>>24,A=A+32|0,(I=I-32|0)>>>0>=65)for(;;){if(X(E+48|0,E+112|0,64),(0|GI(E+112|0,64,E+48|0,64,0,0,0))<0)break A;if(g=i[E+116>>2],B=i[E+112>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24,g=i[E+124>>2],B=i[E+120>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=g,C[A+13|0]=g>>>8,C[A+14|0]=g>>>16,C[A+15|0]=g>>>24,g=i[E+140>>2],B=i[E+136>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=g,C[A+29|0]=g>>>8,C[A+30|0]=g>>>16,C[A+31|0]=g>>>24,g=i[E+132>>2],B=i[E+128>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=g,C[A+21|0]=g>>>8,C[A+22|0]=g>>>16,C[A+23|0]=g>>>24,A=A+32|0,!((I=I-32|0)>>>0>64))break}X(E+48|0,E+112|0,64),(0|GI(E+112|0,I,E+48|0,64,0,0,0))<0||X(A,E+112|0,I)}fI(E+192|0,384),h=Q}function x(A,I,g){var B=0,Q=0,C=0,E=0,i=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,p=0;for(C=2036477234,e=857760878,t=1634760805,E=1797285236,o=n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,B=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24,Q=n[g+8|0]|n[g+9|0]<<8|n[g+10|0]<<16|n[g+11|0]<<24,a=n[g+12|0]|n[g+13|0]<<8|n[g+14|0]<<16|n[g+15|0]<<24,c=n[g+16|0]|n[g+17|0]<<8|n[g+18|0]<<16|n[g+19|0]<<24,y=n[g+20|0]|n[g+21|0]<<8|n[g+22|0]<<16|n[g+23|0]<<24,w=n[g+24|0]|n[g+25|0]<<8|n[g+26|0]<<16|n[g+27|0]<<24,h=n[g+28|0]|n[g+29|0]<<8|n[g+30|0]<<16|n[g+31|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,f=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,i=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,I=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24;r=o,t=Hg((s=g)^(g=o+t|0),16),r=c=Hg(r^(o=t+c|0),12),c=Hg((s=t)^(t=g+c|0),8),o=Hg(r^(D=c+o|0),7),r=B,e=Hg((g=B+e|0)^f,16),r=f=Hg(r^(B=e+y|0),12),f=Hg((s=e)^(e=g+f|0),8),g=Hg(r^(y=f+B|0),7),r=Q,B=Hg((C=C+Q|0)^i,16),r=i=Hg(r^(Q=B+w|0),12),s=Hg(B^(i=C+i|0),8),C=Hg(r^(B=s+Q|0),7),E=Hg((Q=I)^(I=E+a|0),16),a=Hg((Q=E+h|0)^a,12),I=Hg(E^(u=I+a|0),8),E=Hg(a^(Q=I+Q|0),7),r=B,B=Hg((B=I)^(I=g+t|0),16),g=Hg((a=r+B|0)^g,12),I=Hg(B^(t=I+g|0),8),B=Hg(g^(w=a+I|0),7),r=Q,Q=Hg((g=C+e|0)^c,16),C=Hg((a=r+Q|0)^C,12),g=Hg(Q^(e=g+C|0),8),Q=Hg(C^(h=a+g|0),7),a=Hg((C=E+i|0)^f,16),E=Hg((i=a+D|0)^E,12),f=Hg(a^(C=C+E|0),8),a=Hg(E^(c=i+f|0),7),i=Hg((E=o+u|0)^s,16),o=Hg((y=i+y|0)^o,12),i=Hg(i^(E=E+o|0),8),o=Hg(o^(y=y+i|0),7),10!=(0|(p=p+1|0)););xI(A,t),xI(A+4|0,e),xI(A+8|0,C),xI(A+12|0,E),xI(A+16|0,g),xI(A+20|0,f),xI(A+24|0,i),xI(A+28|0,I)}function L(A){var I,g=0,B=0;h=I=h-48|0,g=n[28+(A|=0)|0]|n[A+29|0]<<8|n[A+30|0]<<16|n[A+31|0]<<24,i[I+24>>2]=n[A+24|0]|n[A+25|0]<<8|n[A+26|0]<<16|n[A+27|0]<<24,i[I+28>>2]=g,g=n[A+20|0]|n[A+21|0]<<8|n[A+22|0]<<16|n[A+23|0]<<24,i[I+16>>2]=n[A+16|0]|n[A+17|0]<<8|n[A+18|0]<<16|n[A+19|0]<<24,i[I+20>>2]=g,g=n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24,i[I>>2]=n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24,i[I+4>>2]=g,g=n[A+12|0]|n[A+13|0]<<8|n[A+14|0]<<16|n[A+15|0]<<24,i[I+8>>2]=n[A+8|0]|n[A+9|0]<<8|n[A+10|0]<<16|n[A+11|0]<<24,i[I+12>>2]=g,g=n[A+40|0]|n[A+41|0]<<8|n[A+42|0]<<16|n[A+43|0]<<24,i[I+32>>2]=n[A+36|0]|n[A+37|0]<<8|n[A+38|0]<<16|n[A+39|0]<<24,i[I+36>>2]=g,Vg[i[8957]](I,I,40,0,A+32|0,0,A),g=i[I+28>>2],B=i[I+24>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=g,C[A+29|0]=g>>>8,C[A+30|0]=g>>>16,C[A+31|0]=g>>>24,g=i[I+20>>2],B=i[I+16>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=g,C[A+21|0]=g>>>8,C[A+22|0]=g>>>16,C[A+23|0]=g>>>24,g=i[I+12>>2],B=i[I+8>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=g,C[A+13|0]=g>>>8,C[A+14|0]=g>>>16,C[A+15|0]=g>>>24,g=i[I+4>>2],B=i[I>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24,g=i[I+36>>2],B=i[I+32>>2],C[A+36|0]=B,C[A+37|0]=B>>>8,C[A+38|0]=B>>>16,C[A+39|0]=B>>>24,C[A+40|0]=g,C[A+41|0]=g>>>8,C[A+42|0]=g>>>16,C[A+43|0]=g>>>24,XI(A),h=I+48|0}function K(A,I,g){var B=0,Q=0,C=0,E=0,i=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0,u=0,p=0,l=0,F=0;for(Q=2036477234,C=857760878,E=1634760805,i=1797285236,w=20,o=n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,s=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24,h=n[g+8|0]|n[g+9|0]<<8|n[g+10|0]<<16|n[g+11|0]<<24,c=n[g+12|0]|n[g+13|0]<<8|n[g+14|0]<<16|n[g+15|0]<<24,e=n[g+16|0]|n[g+17|0]<<8|n[g+18|0]<<16|n[g+19|0]<<24,a=n[g+20|0]|n[g+21|0]<<8|n[g+22|0]<<16|n[g+23|0]<<24,t=n[g+24|0]|n[g+25|0]<<8|n[g+26|0]<<16|n[g+27|0]<<24,f=n[g+28|0]|n[g+29|0]<<8|n[g+30|0]<<16|n[g+31|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,r=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,B=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,I=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24;D=B,B=Hg(E+a|0,7)^c,y=D^Hg(B+E|0,9),u=Hg(B+y|0,13)^a,c=Hg(y+u|0,18),I=Hg(C+o|0,7)^I,t=Hg(I+C|0,9)^t,o=Hg(I+t|0,13)^o,l=Hg(t+o|0,18),f=Hg(g+Q|0,7)^f,a=Hg(f+Q|0,9)^s,p=Hg(a+f|0,13)^g,F=Hg(a+p|0,18),g=Hg(i+e|0,7)^h,r=Hg(g+i|0,9)^r,e=Hg(g+r|0,13)^e,D=Hg(r+e|0,18),o=Hg((E^=c)+g|0,7)^o,s=Hg(o+E|0,9)^a,h=Hg(o+s|0,13)^g,E=Hg(s+h|0,18)^E,g=Hg((C^=l)+B|0,7)^p,r=Hg(g+C|0,9)^r,c=Hg(g+r|0,13)^B,C=Hg(r+c|0,18)^C,e=Hg((Q^=F)+I|0,7)^e,B=Hg(e+Q|0,9)^y,I=Hg(B+e|0,13)^I,Q=Hg(I+B|0,18)^Q,a=Hg((i^=D)+f|0,7)^u,t=Hg(a+i|0,9)^t,f=Hg(a+t|0,13)^f,i=Hg(t+f|0,18)^i,y=w>>>0>2,w=w-2|0,y;);return xI(A,E),xI(A+4|0,C),xI(A+8|0,Q),xI(A+12|0,i),xI(A+16|0,g),xI(A+20|0,r),xI(A+24|0,B),xI(A+28|0,I),0}function q(A,I,g,B,Q,E,a){var r,o,e,t,f,c,y,s=0;return h=r=h-560|0,ig(r+352|0,a),mI(r+288|0,E,32,0),V(r+352|0,r+320|0,32,0),V(r+352|0,g,B,Q),UI(r+352|0,r+224|0),o=n[(s=E)+32|0]|n[s+33|0]<<8|n[s+34|0]<<16|n[s+35|0]<<24,e=n[s+36|0]|n[s+37|0]<<8|n[s+38|0]<<16|n[s+39|0]<<24,t=n[s+40|0]|n[s+41|0]<<8|n[s+42|0]<<16|n[s+43|0]<<24,f=n[s+44|0]|n[s+45|0]<<8|n[s+46|0]<<16|n[s+47|0]<<24,c=n[s+48|0]|n[s+49|0]<<8|n[s+50|0]<<16|n[s+51|0]<<24,E=n[s+52|0]|n[s+53|0]<<8|n[s+54|0]<<16|n[s+55|0]<<24,y=n[s+60|0]|n[s+61|0]<<8|n[s+62|0]<<16|n[s+63|0]<<24,s=n[s+56|0]|n[s+57|0]<<8|n[s+58|0]<<16|n[s+59|0]<<24,C[A+56|0]=s,C[A+57|0]=s>>>8,C[A+58|0]=s>>>16,C[A+59|0]=s>>>24,C[A+60|0]=y,C[A+61|0]=y>>>8,C[A+62|0]=y>>>16,C[A+63|0]=y>>>24,C[A+48|0]=c,C[A+49|0]=c>>>8,C[A+50|0]=c>>>16,C[A+51|0]=c>>>24,C[A+52|0]=E,C[A+53|0]=E>>>8,C[A+54|0]=E>>>16,C[A+55|0]=E>>>24,C[A+40|0]=t,C[A+41|0]=t>>>8,C[A+42|0]=t>>>16,C[A+43|0]=t>>>24,C[A+44|0]=f,C[A+45|0]=f>>>8,C[A+46|0]=f>>>16,C[A+47|0]=f>>>24,C[0|(E=A+32|0)]=o,C[E+1|0]=o>>>8,C[E+2|0]=o>>>16,C[E+3|0]=o>>>24,C[E+4|0]=e,C[E+5|0]=e>>>8,C[E+6|0]=e>>>16,C[E+7|0]=e>>>24,G(r+224|0),CA(r,r+224|0),nI(A,r),ig(r+352|0,a),V(r+352|0,A,64,0),V(r+352|0,g,B,Q),UI(r+352|0,r+160|0),G(r+160|0),C[r+288|0]=248&n[r+288|0],C[r+319|0]=63&n[r+319|0]|64,function(A,I,g,B){var Q,E,i,a,r,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L,K,q,X,V,W,T,j,Z,O,z,$,AA,IA=0,gA=0,BA=0,QA=0,CA=0,EA=0,iA=0,nA=0,aA=0,rA=0,oA=0,eA=0,tA=0,fA=0,cA=0,yA=0,sA=0,wA=0,hA=0,DA=0,uA=0,pA=0,lA=0,FA=0,GA=0,kA=0,_A=0,HA=0,YA=0,bA=0,mA=0,vA=0,UA=0,SA=0,NA=0,MA=0,dA=0,PA=0,RA=0,JA=0,xA=0,LA=0,KA=0,qA=0,XA=0,VA=0,WA=0,TA=0,jA=0,ZA=0,OA=0;RA=HI(I),sA=n[I+2|0]|n[I+3|0]<<8|n[I+4|0]<<16|n[I+5|0]<<24,WA=HI(I+5|0),YA=p,wA=n[I+7|0]|n[I+8|0]<<8|n[I+9|0]<<16|n[I+10|0]<<24,hA=n[I+10|0]|n[I+11|0]<<8|n[I+12|0]<<16|n[I+13|0]<<24,mA=HI(I+13|0),oA=p,tA=n[I+15|0]|n[I+16|0]<<8|n[I+17|0]<<16|n[I+18|0]<<24,KA=HI(I+18|0),fA=p,bA=HI(I+21|0),iA=n[I+23|0]|n[I+24|0]<<8|n[I+25|0]<<16|n[I+26|0]<<24,aA=HI(I+26|0),QA=p,BA=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,NA=HI(g),pA=n[(I=g)+2|0]|n[I+3|0]<<8|n[I+4|0]<<16|n[I+5|0]<<24,XA=HI(I+5|0),rA=p,cA=n[I+7|0]|n[I+8|0]<<8|n[I+9|0]<<16|n[I+10|0]<<24,yA=n[I+10|0]|n[I+11|0]<<8|n[I+12|0]<<16|n[I+13|0]<<24,VA=HI(I+13|0),eA=p,CA=n[I+15|0]|n[I+16|0]<<8|n[I+17|0]<<16|n[I+18|0]<<24,qA=HI(I+18|0),gA=p,JA=HI(I+21|0),IA=n[I+23|0]|n[I+24|0]<<8|n[I+25|0]<<16|n[I+26|0]<<24,nA=HI(I+26|0),g=p,I=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,Z=HI(B),O=n[B+2|0]|n[B+3|0]<<8|n[B+4|0]<<16|n[B+5|0]<<24,z=HI(B+5|0),$=p,MA=n[B+7|0]|n[B+8|0]<<8|n[B+9|0]<<16|n[B+10|0]<<24,xA=n[B+10|0]|n[B+11|0]<<8|n[B+12|0]<<16|n[B+13|0]<<24,LA=HI(B+13|0),SA=p,vA=n[B+15|0]|n[B+16|0]<<8|n[B+17|0]<<16|n[B+18|0]<<24,TA=HI(B+18|0),_A=p,FA=HI(B+21|0),I=eg(Q=I>>>7|0,0,E=2097151&((3&QA)<<30|aA>>>2),0),EA=p,QA=I,I=eg(i=2097151&((3&g)<<30|nA>>>2),0,a=BA>>>7|0,0),g=p+EA|0,EA=BA=QA+I|0,BA=I>>>0>BA>>>0?g+1|0:g,I=eg(E,0,i,0),QA=p,IA=(g=eg(r=IA>>>5&2097151,0,a,0))+I|0,I=p+QA|0,g=I=g>>>0>IA>>>0?I+1|0:I,I=eg(Q,0,o=iA>>>5&2097151,0),g=p+g|0,iA=IA=I+IA|0,lA=g=I>>>0>IA>>>0?g+1|0:g,DA=(I=IA)- -1048576|0,uA=g=g-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+BA|0,aA=I=(g=(2097151&g)<<11|DA>>>21)>>>0>(BA=QA=g+EA|0)>>>0?I+1|0:I,GA=(I=BA)- -1048576|0,nA=EA=aA-((I>>>0<4293918720)-1|0)|0,QA=eg(Q,0,a,0),g=HA=(PA=p)-(((I=QA)>>>0<4293918720)-1|0)|0,IA=EA>>21,HA=(2097151&EA)<<11|GA>>>21,QA=I-(EA=-2097152&(dA=I- -1048576|0))|0,I=(PA-((I>>>0>>0)+g|0)|0)+IA|0,P=I=QA>>>0>(v=HA+QA|0)>>>0?I+1|0:I,EA=eg(v,I,-683901,-1),QA=p,R=I=g>>21,I=eg(S=(2097151&g)<<11|dA>>>21,I,136657,0),IA=p+QA|0,HA=g=I+EA|0,EA=I>>>0>g>>>0?IA+1|0:IA,I=eg(e=2097151&((1&eA)<<31|VA>>>1),0,E,0),g=p,IA=I,I=eg(t=yA>>>4&2097151,0,a,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(f=CA>>>6&2097151,0,o,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,m=I=0,QA=IA,IA=eg(c=2097151&JA,I,y=2097151&((7&fA)<<29|KA>>>3),0),I=p+g|0,I=IA>>>0>(QA=QA+IA|0)>>>0?I+1|0:I,IA=eg(s=2097151&((7&gA)<<29|qA>>>3),0,w=2097151&bA,0),g=p+I|0,g=IA>>>0>(QA=IA+QA|0)>>>0?g+1|0:g,I=eg(r,0,h=tA>>>6&2097151,0),IA=p+g|0,IA=I>>>0>(QA=I+QA|0)>>>0?IA+1|0:IA,g=eg(i,0,D=2097151&((1&oA)<<31|mA>>>1),0),I=p+IA|0,g=g>>>0>(IA=QA=g+QA|0)>>>0?I+1|0:I,I=eg(Q,0,u=hA>>>4&2097151,0),g=p+g|0,fA=IA=I+IA|0,QA=I>>>0>IA>>>0?g+1|0:g,I=eg(E,0,t,0),g=p,gA=(IA=I)+(I=eg(l=cA>>>7&2097151,0,a,0))|0,IA=p+g|0,IA=I>>>0>gA>>>0?IA+1|0:IA,g=eg(o,0,e,0),I=p+IA|0,I=g>>>0>(gA=g+gA|0)>>>0?I+1|0:I,IA=eg(f,0,w,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,I=eg(c,m,h,0),g=p+g|0,g=I>>>0>(IA=I+gA|0)>>>0?g+1|0:g,gA=(I=IA)+(IA=eg(y,0,s,0))|0,I=p+g|0,I=IA>>>0>gA>>>0?I+1|0:I,g=eg(r,0,D,0),IA=p+I|0,IA=g>>>0>(gA=g+gA|0)>>>0?IA+1|0:IA,g=eg(i,0,u,0),I=p+IA|0,g=g>>>0>(IA=gA=g+gA|0)>>>0?I+1|0:I,I=eg(Q,0,F=wA>>>7&2097151,0),g=p+g|0,yA=IA=I+IA|0,CA=g=I>>>0>IA>>>0?g+1|0:g,eA=(I=IA)- -1048576|0,gA=g=g-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+QA|0,g=I=(g=(2097151&g)<<11|eA>>>21)>>>0>(cA=g+fA|0)>>>0?I+1|0:I,I=I+EA|0,I=(IA=QA=cA)>>>0>(cA=IA+HA|0)>>>0?I+1|0:I,EA=(EA=g)-(((g=QA)>>>0<4293918720)-1|0)|0,oA=g- -1048576|0,tA=(g=IA=cA)-(IA=-2097152&oA)|0,fA=I-((QA=EA)+(g>>>0>>0)|0)|0,N=BA-(I=-2097152&GA)|0,J=g=aA-((I>>>0>BA>>>0)+nA|0)|0,I=eg(S,R,-997805,-1),IA=p+CA|0,IA=I>>>0>(BA=I+yA|0)>>>0?IA+1|0:IA,CA=(I=BA)+(BA=eg(v,P,136657,0))|0,I=p+IA|0,g=eg(N,g,-683901,-1),I=p+(BA>>>0>CA>>>0?I+1|0:I)|0,I=g>>>0>(IA=g+CA|0)>>>0?I+1|0:I,EA=IA-(g=-2097152&eA)|0,CA=I-((g>>>0>IA>>>0)+gA|0)|0,I=eg(E,0,l,0),IA=p,BA=(g=eg(G=2097151&((3&rA)<<30|XA>>>2),0,a,0))+I|0,I=p+IA|0,I=g>>>0>BA>>>0?I+1|0:I,IA=eg(o,0,t,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,I=eg(e,0,w,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(f,0,y,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,IA=eg(c,m,D,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,IA=eg(s,0,h,0),I=p+g|0,I=IA>>>0>(BA=IA+BA|0)>>>0?I+1|0:I,IA=eg(r,0,u,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,I=eg(i,0,F,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(Q,0,k=2097151&((3&YA)<<30|WA>>>2),0),I=p+IA|0,BA=g>>>0>(gA=BA=g+BA|0)>>>0?I+1|0:I,I=eg(E,0,G,0),g=p,IA=I,I=eg(_=pA>>>5&2097151,0,a,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,nA=(I=eg(o,0,l,0))+IA|0,IA=p+g|0,IA=I>>>0>nA>>>0?IA+1|0:IA,g=eg(t,0,w,0),I=p+IA|0,I=g>>>0>(nA=g+nA|0)>>>0?I+1|0:I,g=eg(e,0,y,0),I=p+I|0,I=g>>>0>(IA=g+nA|0)>>>0?I+1|0:I,nA=(g=IA)+(IA=eg(f,0,h,0))|0,g=p+I|0,g=IA>>>0>nA>>>0?g+1|0:g,I=eg(c,m,u,0),g=p+g|0,g=I>>>0>(IA=I+nA|0)>>>0?g+1|0:g,nA=(I=eg(s,0,D,0))+IA|0,IA=p+g|0,IA=I>>>0>nA>>>0?IA+1|0:IA,g=eg(r,0,F,0),I=p+IA|0,I=g>>>0>(nA=g+nA|0)>>>0?I+1|0:I,g=eg(i,0,k,0),I=p+I|0,g=I=g>>>0>(IA=g+nA|0)>>>0?I+1|0:I,I=eg(Q,0,H=sA>>>5&2097151,0),g=p+g|0,cA=IA=I+IA|0,XA=g=I>>>0>IA>>>0?g+1|0:g,AA=(I=IA)- -1048576|0,VA=IA=g-((I>>>0<4293918720)-1|0)|0,I=(I=IA>>21)+BA|0,yA=IA=(g=(2097151&IA)<<11|AA>>>21)+gA|0,qA=I=g>>>0>IA>>>0?I+1|0:I,WA=(I=IA)- -1048576|0,JA=IA=qA-((I>>>0<4293918720)-1|0)|0,g=(I=IA>>21)+CA|0,eA=BA=(IA=(2097151&IA)<<11|WA>>>21)+EA|0,PA=g=IA>>>0>BA>>>0?g+1|0:g,mA=(I=BA)- -1048576|0,HA=IA=g-((I>>>0<4293918720)-1|0)|0,I=(I=IA>>21)+fA|0,CA=IA=(g=(2097151&IA)<<11|mA>>>21)+tA|0,sA=IA=(GA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,aA=(2097151&IA)<<11|(bA=I- -1048576|0)>>>21,gA=IA>>21,I=eg(E,0,f,0),g=p,IA=I,I=eg(a,0,e,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(c,m,w,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,BA=(I=IA)+(IA=eg(o,0,s,0))|0,I=p+g|0,I=IA>>>0>BA>>>0?I+1|0:I,g=eg(r,0,y,0),IA=p+I|0,IA=g>>>0>(BA=g+BA|0)>>>0?IA+1|0:IA,g=eg(i,0,h,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,IA=eg(Q,0,D,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,IA=eg(S,R,-683901,-1),g=(I=g)+p|0,g=IA>>>0>(EA=BA+IA|0)>>>0?g+1|0:g,IA=EA,EA=(EA=I)-(((I=BA)>>>0<4293918720)-1|0)|0,pA=I- -1048576|0,nA=(I=IA)-(IA=-2097152&pA)|0,IA=g-((BA=EA)+(I>>>0>>0)|0)|0,I=(I=QA>>21)+IA|0,I=(g=(2097151&QA)<<11|oA>>>21)>>>0>(QA=g+nA|0)>>>0?I+1|0:I,EA=(g=QA)-(IA=-2097152&(rA=g- -1048576|0))|0,IA=(I-((g>>>0>>0)+(QA=nA=I-((g>>>0<4293918720)-1|0)|0)|0)|0)+gA|0,x=aA=EA+aA|0,L=IA=EA>>>0>aA>>>0?IA+1|0:IA,nA=eg(aA,IA,-683901,-1),EA=p,g=eg(o,0,c,m),I=p,IA=g,g=eg(a,0,f,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(E,0,s,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,IA=eg(r,0,w,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,IA=eg(i,0,y,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,I=eg(Q,0,h,0),IA=p+g|0,IA=I>>>0>(gA=I+gA|0)>>>0?IA+1|0:IA,I=(I=BA>>21)+IA|0,wA=gA=(I=(g=(2097151&BA)<<11|pA>>>21)>>>0>(BA=g+gA|0)>>>0?I+1|0:I)-(((g=BA)>>>0<4293918720)-1|0)|0,BA=g-(IA=-2097152&(UA=g- -1048576|0))|0,IA=(I-((g>>>0>>0)+gA|0)|0)+(QA>>21)|0,K=BA=(I=(2097151&QA)<<11|rA>>>21)+BA|0,q=IA=I>>>0>BA>>>0?IA+1|0:IA,g=eg(BA,IA,136657,0),I=p+EA|0,KA=IA=g+nA|0,hA=g>>>0>IA>>>0?I+1|0:I,g=eg(w,0,_,0),I=p,IA=g,g=eg(Y=2097151&NA,0,o,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,BA=(g=IA)+(IA=eg(y,0,G,0))|0,g=p+I|0,g=IA>>>0>BA>>>0?g+1|0:g,I=eg(h,0,l,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(t,0,D,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,IA=eg(e,0,u,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,IA=eg(f,0,F,0),I=p+g|0,I=IA>>>0>(BA=IA+BA|0)>>>0?I+1|0:I,IA=eg(c,m,H,0),g=p+I|0,g=IA>>>0>(BA=IA+BA|0)>>>0?g+1|0:g,I=eg(s,0,k,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,g=eg(r,0,b=2097151&RA,0),I=p+IA|0,I=g>>>0>(BA=g+BA|0)>>>0?I+1|0:I,QA=BA=(IA=(n[B+23|0]|n[B+24|0]<<8|n[B+25|0]<<16|n[B+26|0]<<24)>>>5&2097151)+BA|0,BA=IA>>>0>BA>>>0?I+1|0:I,I=eg(y,0,_,0),g=p,IA=I,I=eg(w,0,Y,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,gA=(I=eg(h,0,G,0))+IA|0,IA=p+g|0,IA=I>>>0>gA>>>0?IA+1|0:IA,g=eg(D,0,l,0),I=p+IA|0,I=g>>>0>(gA=g+gA|0)>>>0?I+1|0:I,g=eg(t,0,u,0),I=p+I|0,I=g>>>0>(IA=g+gA|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(e,0,F,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,I=eg(f,0,k,0),g=p+g|0,g=I>>>0>(IA=I+gA|0)>>>0?g+1|0:g,gA=(I=eg(c,m,b,0))+IA|0,IA=p+g|0,IA=I>>>0>gA>>>0?IA+1|0:IA,g=eg(s,0,H,0),I=p+IA|0,I=g>>>0>(gA=g+gA|0)>>>0?I+1|0:I,gA=IA=(g=2097151&FA)+gA|0,tA=IA=(oA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(YA=I- -1048576|0)>>>21,IA=(IA>>>21|0)+BA|0,rA=IA=I>>>0>(QA=I+QA|0)>>>0?IA+1|0:IA,NA=iA-(I=-2097152&DA)|0,FA=lA-((I>>>0>iA>>>0)+uA|0)|0,g=eg(E,0,r,0),I=p,IA=g,g=eg(a,0,c,m),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,BA=(g=IA)+(IA=eg(i,0,o,0))|0,g=p+I|0,g=IA>>>0>BA>>>0?g+1|0:g,I=eg(Q,0,w,0),IA=p+g|0,IA=I>>>0>(BA=I+BA|0)>>>0?IA+1|0:IA,EA=BA,I=eg(a,0,s,0),g=p,BA=I,I=eg(E,0,c,m),g=p+g|0,g=I>>>0>(BA=BA+I|0)>>>0?g+1|0:g,iA=(I=BA)+(BA=eg(o,0,r,0))|0,I=p+g|0,I=BA>>>0>iA>>>0?I+1|0:I,g=eg(i,0,w,0),I=p+I|0,I=g>>>0>(BA=g+iA|0)>>>0?I+1|0:I,iA=(g=BA)+(BA=eg(Q,0,y,0))|0,g=p+I|0,aA=g=BA>>>0>iA>>>0?g+1|0:g,lA=(I=BA=iA)- -1048576|0,nA=iA=g-((I>>>0<4293918720)-1|0)|0,g=(I=iA>>21)+IA|0,EA=g=(IA=EA=(iA=(2097151&iA)<<11|lA>>>21)+EA|0)>>>0>>0?g+1|0:g,uA=(I=IA)- -1048576|0,g=(I=(iA=DA=g-((I>>>0<4293918720)-1|0)|0)>>21)+FA|0,X=g=(DA=(2097151&iA)<<11|uA>>>21)>>>0>(U=NA=DA+NA|0)>>>0?g+1|0:g,FA=eg(U,g,470296,0),DA=p,M=IA-(g=-2097152&uA)|0,dA=I=EA-((g>>>0>IA>>>0)+iA|0)|0,g=eg(N,J,666643,0),IA=p+DA|0,IA=g>>>0>(iA=g+FA|0)>>>0?IA+1|0:IA,g=eg(M,I,654183,0),I=p+IA|0,g=g>>>0>(EA=iA=g+iA|0)>>>0?I+1|0:I,I=BA-(IA=-2097152&lA)|0,IA=(wA>>21)+(iA=aA-((IA>>>0>BA>>>0)+nA|0)|0)|0,V=nA=(BA=(2097151&wA)<<11|UA>>>21)+I|0,RA=IA=BA>>>0>nA>>>0?IA+1|0:IA,jA=QA- -1048576|0,BA=iA=rA-((QA>>>0<4293918720)-1|0)|0,I=eg(nA,IA,-997805,-1),g=p+g|0,I=(g=I>>>0>(IA=I+EA|0)>>>0?g+1|0:g)+rA|0,I=IA>>>0>(QA=IA+QA|0)>>>0?I+1|0:I,FA=(IA=QA)-(g=-2097152&jA)|0,DA=I-((g>>>0>IA>>>0)+BA|0)|0,I=eg(M,dA,470296,0),g=p,QA=(IA=I)+(I=eg(U,X,666643,0))|0,IA=p+g|0,IA=I>>>0>QA>>>0?IA+1|0:IA,g=eg(nA,RA,654183,0),I=p+IA|0,g=oA+(g>>>0>(QA=g+QA|0)>>>0?I+1|0:I)|0,rA=(IA=gA+QA|0)-(I=-2097152&YA)|0,iA=(g=IA>>>0>>0?g+1|0:g)-((I>>>0>IA>>>0)+tA|0)|0,g=eg(h,0,_,0),I=p,IA=g,g=eg(y,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,g=eg(D,0,G,0),I=p+I|0,I=g>>>0>(IA=g+IA|0)>>>0?I+1|0:I,QA=(g=IA)+(IA=eg(u,0,l,0))|0,g=p+I|0,g=IA>>>0>QA>>>0?g+1|0:g,I=eg(t,0,F,0),IA=p+g|0,IA=I>>>0>(QA=I+QA|0)>>>0?IA+1|0:IA,I=eg(e,0,k,0),g=p+IA|0,g=I>>>0>(QA=I+QA|0)>>>0?g+1|0:g,IA=eg(f,0,H,0),I=p+g|0,I=IA>>>0>(QA=IA+QA|0)>>>0?I+1|0:I,g=eg(s,0,b,0),I=p+I|0,I=g>>>0>(IA=g+QA|0)>>>0?I+1|0:I,g=IA,QA=(IA=2097151&((7&_A)<<29|TA>>>3))>>>0>(gA=QA=g+IA|0)>>>0?I+1|0:I,I=eg(D,0,_,0),g=p,EA=(IA=I)+(I=eg(h,0,Y,0))|0,IA=p+g|0,IA=I>>>0>EA>>>0?IA+1|0:IA,g=eg(u,0,G,0),I=p+IA|0,I=g>>>0>(EA=g+EA|0)>>>0?I+1|0:I,IA=eg(F,0,l,0),g=p+I|0,g=IA>>>0>(EA=IA+EA|0)>>>0?g+1|0:g,IA=eg(t,0,k,0),I=p+g|0,I=IA>>>0>(EA=IA+EA|0)>>>0?I+1|0:I,IA=eg(e,0,H,0),g=p+I|0,g=IA>>>0>(EA=IA+EA|0)>>>0?g+1|0:g,I=eg(f,0,b,0),IA=p+g|0,I=I>>>0>(g=EA=I+EA|0)>>>0?IA+1|0:IA,lA=IA=EA+(g=vA>>>6&2097151)|0,fA=IA=(aA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(uA=I- -1048576|0)>>>21,IA=(IA>>>21|0)+QA|0,nA=IA=I>>>0>(gA=I+gA|0)>>>0?IA+1|0:IA,wA=(I=gA)- -1048576|0,EA=IA=IA-((I>>>0<4293918720)-1|0)|0,I=(g=IA>>>21|0)+iA|0,oA=QA=(IA=(2097151&IA)<<11|wA>>>21)+rA|0,pA=IA=(iA=I=IA>>>0>QA>>>0?I+1|0:I)-(((I=QA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(tA=I- -1048576|0)>>>21,IA=(IA>>21)+DA|0,I=(g=IA=I>>>0>(QA=I+FA|0)>>>0?IA+1|0:IA)+hA|0,rA=(rA=g)-(((g=QA)>>>0<4293918720)-1|0)|0,ZA=g- -1048576|0,OA=(g=IA=_A=QA+KA|0)-(IA=-2097152&ZA)|0,kA=(I=QA>>>0>_A>>>0?I+1|0:I)-((QA=rA)+(g>>>0>>0)|0)|0,I=eg(K,q,-997805,-1),g=p+iA|0,UA=IA=I+oA|0,rA=I>>>0>IA>>>0?g+1|0:g,g=eg(V,RA,470296,0),I=p,IA=g,g=eg(M,dA,666643,0),I=p+I|0,I=(I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I)+nA|0,I=(g=IA+gA|0)>>>0>>0?I+1|0:I,wA=(IA=g)-(g=-2097152&wA)|0,hA=I-((g>>>0>IA>>>0)+EA|0)|0,I=eg(V,RA,666643,0),g=p+aA|0,oA=IA=I+lA|0,iA=I>>>0>IA>>>0?g+1|0:g,g=eg(u,0,_,0),I=p,IA=g,g=eg(D,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,g=eg(F,0,G,0),I=p+I|0,I=g>>>0>(IA=g+IA|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(k,0,l,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,I=eg(t,0,H,0),IA=p+g|0,IA=I>>>0>(gA=I+gA|0)>>>0?IA+1|0:IA,I=eg(e,0,b,0),g=p+IA|0,I=g=I>>>0>(gA=I+gA|0)>>>0?g+1|0:g,EA=gA=(IA=2097151&((1&SA)<<31|LA>>>1))+gA|0,gA=IA>>>0>gA>>>0?I+1|0:I,g=eg(F,0,_,0),I=p,IA=g,g=eg(u,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,nA=(g=IA)+(IA=eg(k,0,G,0))|0,g=p+I|0,g=IA>>>0>nA>>>0?g+1|0:g,I=eg(H,0,l,0),g=p+g|0,g=I>>>0>(IA=I+nA|0)>>>0?g+1|0:g,nA=(I=eg(t,0,b,0))+IA|0,IA=p+g|0,I=I>>>0>(g=nA)>>>0?IA+1|0:IA,aA=IA=nA+(g=xA>>>4&2097151)|0,xA=IA=(YA=I=g>>>0>IA>>>0?I+1|0:I)-(((I=IA)>>>0<4293918720)-1|0)|0,I=(2097151&IA)<<11|(TA=I- -1048576|0)>>>21,IA=(IA>>>21|0)+gA|0,nA=EA=I+EA|0,SA=IA=I>>>0>EA>>>0?IA+1|0:IA,KA=(I=EA)- -1048576|0,vA=IA=IA-((I>>>0<4293918720)-1|0)|0,I=(g=IA>>>21|0)+iA|0,lA=IA=(_A=(IA=(IA=(2097151&IA)<<11|KA>>>21)>>>0>(g=gA=IA+oA|0)>>>0?I+1|0:I)-(((I=-2097152&uA)>>>0>g>>>0)+fA|0)|0)-(((I=EA=g-I|0)>>>0<4293918720)-1|0)|0,g=(g=IA>>21)+hA|0,FA=IA=(I=(2097151&IA)<<11|(NA=I- -1048576|0)>>>21)+wA|0,uA=g=I>>>0>IA>>>0?g+1|0:g,DA=(I=IA)- -1048576|0,wA=gA=g-((I>>>0<4293918720)-1|0)|0,d=CA-(I=-2097152&bA)|0,LA=IA=GA-((I>>>0>CA>>>0)+sA|0)|0,I=(g=gA>>21)+rA|0,I=(gA=(2097151&gA)<<11|DA>>>21)>>>0>(CA=gA+UA|0)>>>0?I+1|0:I,iA=(gA=eg(x,L,136657,0))+(CA-(g=-2097152&tA)|0)|0,g=p+(I-((g>>>0>CA>>>0)+pA|0)|0)|0,g=gA>>>0>iA>>>0?g+1|0:g,IA=eg(d,IA,-683901,-1),I=p+g|0,iA=gA=IA+iA|0,oA=IA=(hA=I=IA>>>0>gA>>>0?I+1|0:I)-(((I=gA)>>>0<4293918720)-1|0)|0,g=(g=IA>>21)+kA|0,CA=IA=(I=(2097151&IA)<<11|(bA=I- -1048576|0)>>>21)+OA|0,tA=g=I>>>0>IA>>>0?g+1|0:g,fA=IA=g-(((I=IA)>>>0<4293918720)-1|0)|0,UA=(2097151&IA)<<11|(GA=I- -1048576|0)>>>21,pA=IA>>21,g=eg(o,0,_,0),I=p,IA=g,g=eg(E,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,gA=(g=eg(w,0,G,0))+IA|0,IA=p+I|0,IA=g>>>0>gA>>>0?IA+1|0:IA,I=eg(y,0,l,0),g=p+IA|0,g=I>>>0>(gA=I+gA|0)>>>0?g+1|0:g,IA=eg(t,0,h,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,IA=eg(e,0,D,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,IA=eg(f,0,u,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,g=eg(c,m,k,0),IA=p+I|0,IA=g>>>0>(gA=g+gA|0)>>>0?IA+1|0:IA,I=eg(s,0,F,0),g=p+IA|0,g=I>>>0>(gA=I+gA|0)>>>0?g+1|0:g,IA=eg(r,0,H,0),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,IA=eg(i,0,b,0),g=p+I|0,g=IA>>>0>(gA=IA+gA|0)>>>0?g+1|0:g,I=HI(B+26|0),IA=2097151&((3&(IA=p))<<30|I>>>2),I=g,sA=gA=IA+gA|0,gA=I=IA>>>0>gA>>>0?I+1|0:I,I=eg(N,J,470296,0),g=p,kA=(IA=I)+(I=eg(v,P,666643,0))|0,IA=p+g|0,IA=I>>>0>kA>>>0?IA+1|0:IA,I=eg(U,X,654183,0),g=p+IA|0,g=I>>>0>(kA=I+kA|0)>>>0?g+1|0:g,I=eg(M,dA,-997805,-1),g=p+g|0,g=I>>>0>(IA=I+kA|0)>>>0?g+1|0:g,kA=(I=IA)+(IA=eg(V,RA,136657,0))|0,I=p+g|0,I=(I=IA>>>0>kA>>>0?I+1|0:I)+gA|0,I=(g=kA)>>>0>(IA=g+sA|0)>>>0?I+1|0:I,g=IA,IA=I,W=(I=sA)- -1048576|0,gA=rA=gA-((I>>>0<4293918720)-1|0)|0,rA=g,IA=(g=BA>>21)+IA|0,IA=(I=(2097151&BA)<<11|jA>>>21)>>>0>(BA=rA+I|0)>>>0?IA+1|0:IA,g=BA-(I=-2097152&W)|0,sA=eg(K,q,-683901,-1),I=(BA=IA-((I>>>0>BA>>>0)+gA|0)|0)+p|0,IA=I=sA>>>0>(kA=g+sA|0)>>>0?I+1|0:I,rA=BA-(((I=g)>>>0<4293918720)-1|0)|0,T=I- -1048576|0,IA=(g=QA>>21)+IA|0,IA=(I=(2097151&QA)<<11|ZA>>>21)>>>0>(QA=I+(sA=kA)|0)>>>0?IA+1|0:IA,sA=g=QA-(I=-2097152&T)|0,I=(QA=IA-((I>>>0>QA>>>0)+(BA=rA)|0)|0)+pA|0,j=g- -1048576|0,rA=QA-((g>>>0<4293918720)-1|0)|0,jA=(g=IA=UA=g+UA|0)-(IA=-2097152&j)|0,ZA=(sA>>>0>g>>>0?I+1|0:I)-((g>>>0>>0)+(QA=rA)|0)|0,OA=CA-(I=-2097152&GA)|0,kA=tA-((I>>>0>CA>>>0)+fA|0)|0,UA=iA-(I=-2097152&bA)|0,bA=hA-((I>>>0>iA>>>0)+oA|0)|0,g=eg(K,q,654183,0),I=p+uA|0,I=g>>>0>(IA=g+FA|0)>>>0?I+1|0:I,iA=((CA=IA)-(g=-2097152&DA)|0)+(IA=eg(x,L,-997805,-1))|0,g=p+(I-((g>>>0>CA>>>0)+wA|0)|0)|0,g=IA>>>0>iA>>>0?g+1|0:g,IA=eg(d,LA,136657,0),I=p+g|0,GA=CA=IA+iA|0,iA=IA>>>0>CA>>>0?I+1|0:I,sA=eA-(I=-2097152&mA)|0,hA=PA-((I>>>0>eA>>>0)+HA|0)|0,I=eg(v,P,-997805,-1),g=p,IA=I,I=eg(S,R,654183,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(N,J,136657,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,CA=(I=IA)+(IA=eg(U,X,-683901,-1))|0,I=p+g|0,IA=qA+(IA>>>0>CA>>>0?I+1|0:I)|0,oA=(g=CA+yA|0)-(I=-2097152&WA)|0,tA=(IA=g>>>0>>0?IA+1|0:IA)-((I>>>0>g>>>0)+JA|0)|0,I=eg(v,P,654183,0),g=p,IA=I,I=eg(S,R,470296,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,CA=(I=IA)+(IA=eg(N,J,-997805,-1))|0,I=p+g|0,g=CA+cA|0,IA=XA+(IA>>>0>CA>>>0?I+1|0:I)|0,CA=(I=eg(U,X,136657,0))+g|0,g=p+(g>>>0>>0?IA+1|0:IA)|0,g=I>>>0>CA>>>0?g+1|0:g,IA=eg(M,dA,-683901,-1),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,yA=(IA=CA)-(g=-2097152&AA)|0,eA=I-((g>>>0>IA>>>0)+VA|0)|0,g=eg(E,0,_,0),I=p,IA=g,g=eg(a,0,Y,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,CA=(g=IA)+(IA=eg(o,0,G,0))|0,g=p+I|0,g=IA>>>0>CA>>>0?g+1|0:g,IA=eg(w,0,l,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,g=eg(t,0,y,0),IA=p+I|0,IA=g>>>0>(CA=g+CA|0)>>>0?IA+1|0:IA,I=eg(e,0,h,0),g=p+IA|0,g=I>>>0>(CA=I+CA|0)>>>0?g+1|0:g,IA=eg(f,0,D,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,IA=eg(c,m,F,0),g=p+I|0,g=IA>>>0>(CA=IA+CA|0)>>>0?g+1|0:g,IA=eg(s,0,u,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,g=eg(r,0,k,0),IA=p+I|0,IA=g>>>0>(CA=g+CA|0)>>>0?IA+1|0:IA,I=eg(Q,0,b,0),g=p+IA|0,g=I>>>0>(CA=I+CA|0)>>>0?g+1|0:g,IA=eg(i,0,H,0),I=p+g|0,I=IA>>>0>(CA=IA+CA|0)>>>0?I+1|0:I,g=(B=(n[B+28|0]|n[B+29|0]<<8|n[B+30|0]<<16|n[B+31|0]<<24)>>>7|0)>>>0>(IA=B+CA|0)>>>0?I+1|0:I,I=IA,IA=gA>>21,gA=I+(B=(2097151&gA)<<11|W>>>21)|0,I=g+IA|0,CA=gA,fA=I=B>>>0>gA>>>0?I+1|0:I,uA=(I=gA)- -1048576|0,pA=g=fA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+eA|0,gA=B=(g=(2097151&g)<<11|uA>>>21)+yA|0,rA=I=g>>>0>B>>>0?I+1|0:I,wA=(I=B)- -1048576|0,cA=g=rA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+tA|0,yA=I=(g=(2097151&g)<<11|wA>>>21)>>>0>(B=g+oA|0)>>>0?I+1|0:I,tA=(I=B)- -1048576|0,eA=g=yA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+hA|0,mA=oA=(g=(2097151&g)<<11|tA>>>21)+sA|0,HA=I=g>>>0>oA>>>0?I+1|0:I,I=eg(oA,I,-683901,-1),g=p+iA|0,oA=IA=I+GA|0,iA=I>>>0>IA>>>0?g+1|0:g,FA=B-(I=-2097152&tA)|0,GA=eA=yA-((I>>>0>B>>>0)+eA|0)|0,g=eg(K,q,470296,0)+EA|0,I=_A+p|0,I=g>>>0>>0?I+1|0:I,EA=((IA=g)-(B=-2097152&NA)|0)+(g=eg(x,L,654183,0))|0,IA=p+(I-((B>>>0>IA>>>0)+lA|0)|0)|0,I=eg(d,LA,-997805,-1),g=p+(g>>>0>EA>>>0?IA+1|0:IA)|0,g=I>>>0>(B=I+EA|0)>>>0?g+1|0:g,IA=(I=B)+(B=eg(mA,HA,136657,0))|0,I=p+g|0,I=B>>>0>IA>>>0?I+1|0:I,B=eg(FA,eA,-683901,-1),g=p+I|0,yA=g=B>>>0>(IA=B+IA|0)>>>0?g+1|0:g,hA=(I=IA)- -1048576|0,eA=B=g-((I>>>0<4293918720)-1|0)|0,I=(I=B>>21)+iA|0,EA=I=(g=(2097151&B)<<11|hA>>>21)>>>0>(B=g+oA|0)>>>0?I+1|0:I,tA=(I=B)- -1048576|0,g=(I=(iA=oA=EA-((I>>>0<4293918720)-1|0)|0)>>21)+bA|0,bA=lA=(oA=(2097151&iA)<<11|tA>>>21)+UA|0,oA=oA>>>0>lA>>>0?g+1|0:g,XA=B-(I=-2097152&tA)|0,VA=EA-((I>>>0>B>>>0)+iA|0)|0,JA=IA-(I=-2097152&hA)|0,PA=yA-((I>>>0>IA>>>0)+eA|0)|0,I=eg(K,q,666643,0),IA=p+(SA-(((g=-2097152&KA)>>>0>nA>>>0)+vA|0)|0)|0,IA=I>>>0>(B=I+(nA-g|0)|0)>>>0?IA+1|0:IA,I=eg(x,L,470296,0),g=p+IA|0,g=I>>>0>(B=I+B|0)>>>0?g+1|0:g,IA=(I=B)+(B=eg(d,LA,654183,0))|0,I=p+g|0,eA=IA,B=B>>>0>IA>>>0?I+1|0:I,nA=gA-(I=-2097152&wA)|0,iA=rA-((I>>>0>gA>>>0)+cA|0)|0,g=eg(v,P,470296,0),I=p,IA=g,g=eg(S,R,666643,0),I=p+I|0,I=g>>>0>(IA=IA+g|0)>>>0?I+1|0:I,gA=(g=IA)+(IA=eg(N,J,654183,0))|0,g=p+I|0,g=IA>>>0>gA>>>0?g+1|0:g,IA=eg(U,X,-997805,-1),I=p+g|0,I=IA>>>0>(gA=IA+gA|0)>>>0?I+1|0:I,g=eg(M,dA,136657,0),IA=p+I|0,IA=g>>>0>(gA=g+gA|0)>>>0?IA+1|0:IA,I=eg(V,RA,-683901,-1),g=p+IA|0,I=fA+(I>>>0>(gA=I+gA|0)>>>0?g+1|0:g)|0,I=(IA=gA+CA|0)>>>0>>0?I+1|0:I,g=(gA=IA)-(IA=-2097152&uA)|0,IA=I-((IA>>>0>gA>>>0)+pA|0)|0,I=(I=BA>>21)+IA|0,EA=BA=(gA=g)+(g=(2097151&BA)<<11|T>>>21)|0,cA=IA=(rA=I=g>>>0>BA>>>0?I+1|0:I)-(((I=BA)>>>0<4293918720)-1|0)|0,g=(2097151&IA)<<11|(_A=I- -1048576|0)>>>21,IA=(IA>>21)+iA|0,DA=BA=g+nA|0,sA=IA=g>>>0>BA>>>0?IA+1|0:IA,I=eg(BA,IA,-683901,-1),g=p+B|0,g=I>>>0>(IA=I+eA|0)>>>0?g+1|0:g,B=eg(mA,HA,-997805,-1),I=p+g|0,I=B>>>0>(IA=B+IA|0)>>>0?I+1|0:I,B=eg(FA,GA,136657,0),g=p+I|0,nA=IA=B+IA|0,gA=B>>>0>IA>>>0?g+1|0:g,g=eg(k,0,_,0),I=p,B=g,g=eg(F,0,Y,0),I=p+I|0,I=g>>>0>(B=B+g|0)>>>0?I+1|0:I,g=eg(H,0,G,0),IA=p+I|0,IA=g>>>0>(B=g+B|0)>>>0?IA+1|0:IA,I=eg(b,0,l,0),g=p+IA|0,I=g=I>>>0>(B=I+B|0)>>>0?g+1|0:g,CA=B=(g=MA>>>7&2097151)+B|0,B=g>>>0>B>>>0?I+1|0:I,I=eg(H,0,_,0),g=p,IA=I,I=eg(k,0,Y,0),g=p+g|0,g=I>>>0>(IA=IA+I|0)>>>0?g+1|0:g,I=eg(b,0,G,0),g=p+g|0,g=I>>>0>(IA=I+IA|0)>>>0?g+1|0:g,BA=(I=IA)+(IA=2097151&((3&$)<<30|z>>>2))|0,I=g,iA=BA,tA=IA=(BA=I=IA>>>0>BA>>>0?I+1|0:I)-(((I=iA)>>>0<4293918720)-1|0)|0,g=(g=IA>>>21|0)+B|0,CA=IA=(I=(2097151&IA)<<11|(vA=I- -1048576|0)>>>21)+CA|0,fA=g=I>>>0>IA>>>0?g+1|0:g,lA=(I=IA)- -1048576|0,yA=B=g-((I>>>0<4293918720)-1|0)|0,I=(g=B>>>21|0)+YA|0,I=(B=aA+((2097151&B)<<11|lA>>>21)|0)>>>0>>0?I+1|0:I,aA=((IA=B)-(g=-2097152&TA)|0)+(B=eg(x,L,666643,0))|0,g=p+(I-((g>>>0>IA>>>0)+xA|0)|0)|0,g=B>>>0>aA>>>0?g+1|0:g,I=eg(d,LA,470296,0),g=p+g|0,g=I>>>0>(B=I+aA|0)>>>0?g+1|0:g,IA=(I=B)+(B=eg(DA,sA,136657,0))|0,I=p+g|0,I=B>>>0>IA>>>0?I+1|0:I,g=eg(mA,HA,654183,0),I=p+I|0,I=g>>>0>(B=g+IA|0)>>>0?I+1|0:I,g=eg(FA,GA,-997805,-1),IA=p+I|0,uA=B=g+B|0,eA=IA=g>>>0>B>>>0?IA+1|0:IA,wA=(I=B)- -1048576|0,aA=B=IA-((I>>>0<4293918720)-1|0)|0,g=(I=B>>21)+gA|0,gA=IA=(B=(2097151&B)<<11|wA>>>21)+nA|0,B=g=B>>>0>IA>>>0?g+1|0:g,nA=IA=g-(((I=IA)>>>0<4293918720)-1|0)|0,g=(2097151&IA)<<11|(hA=I- -1048576|0)>>>21,IA=(IA>>21)+PA|0,qA=pA=g+JA|0,pA=g>>>0>pA>>>0?IA+1|0:IA,IA=QA>>21,QA=(I=(2097151&QA)<<11|j>>>21)+(EA-(g=-2097152&_A)|0)|0,g=IA+(rA-((g>>>0>EA>>>0)+cA|0)|0)|0,rA=g=I>>>0>QA>>>0?g+1|0:g,cA=g=g-(((I=QA)>>>0<4293918720)-1|0)|0,SA=IA=g>>21,g=eg(MA=(2097151&g)<<11|(_A=I- -1048576|0)>>>21,IA,-683901,-1),I=p+B|0,I=g>>>0>(IA=g+gA|0)>>>0?I+1|0:I,JA=IA-(g=-2097152&hA)|0,PA=I-((g>>>0>IA>>>0)+nA|0)|0,I=eg(MA,SA,136657,0),g=p+eA|0,g=I>>>0>(B=I+uA|0)>>>0?g+1|0:g,YA=B-(I=-2097152&wA)|0,xA=g-((I>>>0>B>>>0)+aA|0)|0,B=(I=eg(d,LA,666643,0))+(CA-(g=-2097152&lA)|0)|0,g=p+(fA-((g>>>0>CA>>>0)+yA|0)|0)|0,g=I>>>0>B>>>0?g+1|0:g,IA=(I=B)+(B=eg(DA,sA,-997805,-1))|0,I=p+g|0,I=B>>>0>IA>>>0?I+1|0:I,B=(g=eg(mA,HA,470296,0))+IA|0,IA=p+I|0,IA=g>>>0>B>>>0?IA+1|0:IA,I=eg(FA,GA,654183,0),g=p+IA|0,fA=B=I+B|0,EA=I>>>0>B>>>0?g+1|0:g,gA=BA,g=eg(b,0,_,0),I=p,B=g,g=eg(H,0,Y,0),I=p+I|0,I=g>>>0>(B=B+g|0)>>>0?I+1|0:I,g=B,g=(B=O>>>5&2097151)>>>0>(IA=g+B|0)>>>0?I+1|0:I,B=2097151&Z,BA=eg(b,0,Y,0)+B|0,I=p,eA=B=(yA=I=B>>>0>BA>>>0?I+1|0:I)-(((I=BA)>>>0<4293918720)-1|0)|0,CA=IA,g=g+(IA=B>>>21|0)|0,aA=g=(I=(2097151&B)<<11|(lA=I- -1048576|0)>>>21)>>>0>(B=CA+I|0)>>>0?g+1|0:g,uA=(I=B)- -1048576|0,nA=g=g-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>>21|0)+gA|0,I=(g=(2097151&g)<<11|uA>>>21)>>>0>(CA=g+iA|0)>>>0?I+1|0:I,CA=(IA=eg(DA,sA,654183,0))+((gA=CA)-(g=-2097152&vA)|0)|0,g=p+(I-((16383&tA)+(g>>>0>gA>>>0)|0)|0)|0,I=eg(mA,HA,666643,0),IA=p+(IA>>>0>CA>>>0?g+1|0:g)|0,IA=I>>>0>(gA=I+CA|0)>>>0?IA+1|0:IA,g=eg(FA,GA,470296,0),I=p+IA|0,wA=gA=g+gA|0,iA=I=g>>>0>gA>>>0?I+1|0:I,hA=(I=gA)- -1048576|0,CA=g=iA-((I>>>0<4293918720)-1|0)|0,I=(IA=g>>21)+EA|0,tA=gA=(g=(2097151&g)<<11|hA>>>21)+fA|0,g=I=g>>>0>gA>>>0?I+1|0:I,fA=(I=gA)- -1048576|0,I=(IA=(gA=EA=g-((I>>>0<4293918720)-1|0)|0)>>21)+xA|0,EA=(EA=(2097151&gA)<<11|fA>>>21)>>>0>(YA=vA=EA+YA|0)>>>0?I+1|0:I,I=eg(MA,SA,-997805,-1);g=p+g|0,g=I>>>0>(IA=I+tA|0)>>>0?g+1|0:g,xA=IA-(I=-2097152&fA)|0,vA=g-((I>>>0>IA>>>0)+gA|0)|0,I=eg(MA,SA,654183,0),g=p+iA|0,g=I>>>0>(IA=I+wA|0)>>>0?g+1|0:g,tA=IA-(I=-2097152&hA)|0,fA=g-((I>>>0>IA>>>0)+CA|0)|0,IA=(g=eg(DA,sA,470296,0))+(B-(I=-2097152&uA)|0)|0,I=p+(aA-((16383&nA)+(I>>>0>B>>>0)|0)|0)|0,I=g>>>0>IA>>>0?I+1|0:I,B=(g=eg(FA,GA,666643,0))+IA|0,IA=p+I|0,IA=g>>>0>B>>>0?IA+1|0:IA,gA=B,B=(I=eg(DA,sA,666643,0))+(BA-(g=-2097152&lA)|0)|0,g=p+(yA-((4095&eA)+(g>>>0>BA>>>0)|0)|0)|0,iA=g=I>>>0>B>>>0?g+1|0:g,eA=(I=B)- -1048576|0,CA=BA=g-((I>>>0<4293918720)-1|0)|0,IA=(I=BA>>21)+IA|0,aA=BA=(g=(2097151&BA)<<11|eA>>>21)+gA|0,gA=IA=g>>>0>BA>>>0?IA+1|0:IA,nA=(I=BA)- -1048576|0,BA=IA=IA-((I>>>0<4293918720)-1|0)|0,g=(I=IA>>21)+fA|0,IA=g=(IA=(2097151&IA)<<11|nA>>>21)>>>0>(yA=IA+tA|0)>>>0?g+1|0:g,g=eg(MA,SA,470296,0),I=p+gA|0,I=g>>>0>(aA=g+aA|0)>>>0?I+1|0:I,g=aA-(gA=-2097152&nA)|0,gA=I-((gA>>>0>aA>>>0)+BA|0)|0,nA=g,BA=(I=eg(MA,SA,666643,0))+(B-(g=-2097152&eA)|0)|0,g=p+(iA-((g>>>0>B>>>0)+CA|0)|0)|0,I=(I=(g=I>>>0>BA>>>0?g+1|0:g)>>21)+gA|0,CA=B=nA+(g=(2097151&g)<<11|(B=BA)>>>21)|0,IA=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+IA|0,gA=B=(I=(2097151&I)<<11|B>>>21)+yA|0,B=(2097151&(IA=I>>>0>(g=B)>>>0?IA+1|0:IA))<<11|g>>>21,g=(I=IA>>21)+vA|0,aA=IA=B+xA|0,IA=(g=B>>>0>(I=IA)>>>0?g+1|0:g)>>21,g=(2097151&g)<<11|I>>>21,I=IA+EA|0,uA=B=g+YA|0,g=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+PA|0,wA=B=(I=(2097151&I)<<11|B>>>21)+JA|0,I=(I=(g=I>>>0>B>>>0?g+1|0:g)>>21)+pA|0,hA=B=(g=(2097151&g)<<11|B>>>21)+qA|0,IA=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+VA|0,tA=B=(I=(2097151&I)<<11|B>>>21)+XA|0,B=(2097151&(IA=I>>>0>(g=B)>>>0?IA+1|0:IA))<<11|g>>>21,g=(I=IA>>21)+oA|0,fA=IA=B+bA|0,IA=(g=B>>>0>(I=IA)>>>0?g+1|0:g)>>21,g=(2097151&g)<<11|I>>>21,I=IA+kA|0,pA=B=g+OA|0,g=(g=(I=g>>>0>B>>>0?I+1|0:I)>>21)+ZA|0,yA=B=(I=(2097151&I)<<11|B>>>21)+jA|0,I=(g=I>>>0>B>>>0?g+1|0:g)>>21,iA=(IA=(2097151&g)<<11|B>>>21)+(g=QA-(B=-2097152&_A)|0)|0,IA=(rA-((B>>>0>QA>>>0)+cA|0)|0)+I|0,eA=iA,cA=(2097151&(IA=g>>>0>(I=iA)>>>0?IA+1|0:IA))<<11|I>>>21,EA=g=IA>>21,I=2097151&BA,B=eg(cA,g,666643,0)+I|0,g=p,iA=B,B=g=I>>>0>B>>>0?g+1|0:g,C[0|A]=iA,C[A+1|0]=(255&g)<<24|iA>>>8,BA=A,g=2097151&CA,IA=eg(cA,EA,470296,0)+g|0,I=p,I=g>>>0>IA>>>0?I+1|0:I,CA=IA,QA=(2097151&(IA=B))<<11|iA>>>21,IA=I+(g=IA>>21)|0,IA=QA>>>0>(CA=CA+QA|0)>>>0?IA+1|0:IA,QA=CA,C[BA+4|0]=(2047&IA)<<21|QA>>>11,I=IA,IA=QA,C[BA+3|0]=(7&I)<<29|IA>>>3,IA=2097151&gA,gA=eg(cA,EA,654183,0)+IA|0,g=p,g=IA>>>0>gA>>>0?g+1|0:g,IA=gA,gA=(2097151&I)<<11|QA>>>21,I=(I>>21)+g|0,g=I=gA>>>0>(CA=IA+gA|0)>>>0?I+1|0:I,C[BA+6|0]=(63&I)<<26|CA>>>6,gA=0,I=nA=2097151&QA,C[BA+2|0]=31&((65535&B)<<16|iA>>>16)|I<<5,B=2097151&aA,IA=eg(cA,EA,-997805,-1)+B|0,I=p,B=I=B>>>0>IA>>>0?I+1|0:I,I=g>>21,QA=(g=(2097151&g)<<11|CA>>>21)+IA|0,IA=I+B|0,iA=QA,IA=g>>>0>QA>>>0?IA+1|0:IA,C[BA+9|0]=(511&IA)<<23|QA>>>9,I=IA,C[BA+8|0]=(1&I)<<31|QA>>>1,QA=0,B=aA=2097151&CA,C[BA+5|0]=(524287&gA)<<13|nA>>>19|B<<2,B=2097151&uA,IA=eg(cA,EA,136657,0)+B|0,g=p,g=B>>>0>IA>>>0?g+1|0:g,B=IA,g=g+(IA=I>>21)|0,CA=B=B+(I=(2097151&I)<<11|iA>>>21)|0,g=I>>>0>B>>>0?g+1|0:g,C[BA+12|0]=(4095&g)<<20|B>>>12,B=g,I=g,g=CA,C[BA+11|0]=(15&I)<<28|g>>>4,BA=0,g=nA=2097151&iA,C[A+7|0]=(16383&QA)<<18|aA>>>14|g<<7,IA=A,g=2097151&wA,QA=eg(cA,EA,-683901,-1)+g|0,I=p,I=(I=g>>>0>QA>>>0?I+1|0:I)+(g=B>>21)|0,g=I=(B=(2097151&B)<<11|CA>>>21)>>>0>(gA=QA=B+QA|0)>>>0?I+1|0:I,C[IA+14|0]=(127&I)<<25|gA>>>7,QA=0,B=iA=2097151&CA,C[IA+10|0]=(131071&BA)<<15|nA>>>17|B<<4,B=IA,I>>=21,IA=(g=(2097151&g)<<11|gA>>>21)>>>0>(CA=g+(2097151&hA)|0)>>>0?I+1|0:I,C[B+17|0]=(1023&IA)<<22|CA>>>10,I=IA,C[B+16|0]=(3&I)<<30|CA>>>2,B=EA=2097151&gA,C[A+13|0]=(1048575&QA)<<12|iA>>>20|B<<1,g=I,I>>=21,g=(IA=(2097151&g)<<11|CA>>>21)>>>0>(gA=IA+(2097151&tA)|0)>>>0?I+1|0:I,C[(B=A)+20|0]=(8191&g)<<19|gA>>>13,I=g,g=gA,C[B+19|0]=(31&I)<<27|g>>>5,g=iA=2097151&CA,C[B+15|0]=(32767&BA)<<17|EA>>>15|g<<6,g=I,I>>=21,g=(B=(2097151&g)<<11|gA>>>21)>>>0>(EA=B+(2097151&fA)|0)>>>0?I+1|0:I,C[A+21|0]=EA,I=gA,C[A+18|0]=(262143&QA)<<14|iA>>>18|I<<3,B=g,I=g,g=EA,C[A+22|0]=(255&I)<<24|g>>>8,g=I>>21,IA=(I=(2097151&I)<<11|EA>>>21)>>>0>(gA=I+(2097151&pA)|0)>>>0?g+1|0:g,C[A+25|0]=(2047&IA)<<21|gA>>>11,I=IA,IA=gA,C[A+24|0]=(7&I)<<29|IA>>>3,g=I>>21,g=(BA=(2097151&I)<<11|gA>>>21)>>>0>(CA=BA+(2097151&yA)|0)>>>0?g+1|0:g,BA=CA,I=g,C[(IA=A)+27|0]=(63&I)<<26|BA>>>6,IA=0,g=CA=2097151&gA,C[A+23|0]=31&((65535&B)<<16|EA>>>16)|g<<5,g=I,I>>=21,I=(g=(2097151&g)<<11|BA>>>21)>>>0>(QA=g+(2097151&eA)|0)>>>0?I+1|0:I,B=QA,C[A+31|0]=(131071&I)<<15|B>>>17,C[A+30|0]=(511&I)<<23|B>>>9,C[A+29|0]=(1&I)<<31|B>>>1,I=0,gA=BA&=2097151,C[A+26|0]=(524287&IA)<<13|CA>>>19|gA<<2,C[A+28|0]=(16383&I)<<18|gA>>>14|B<<7}(E,r+160|0,r+288|0,r+224|0),fI(r+288|0,64),fI(r+224|0,64),I&&(i[I>>2]=64,i[I+4>>2]=0),h=r+560|0,0}function X(A,I,g){var B,Q=0,E=0;if(g>>>0>=512)return s(0|A,0|I,0|g),A;B=A+g|0;A:if(3&(A^I))if(B>>>0<4)g=A;else if((Q=B-4|0)>>>0>>0)g=A;else for(g=A;C[0|g]=n[0|I],C[g+1|0]=n[I+1|0],C[g+2|0]=n[I+2|0],C[g+3|0]=n[I+3|0],I=I+4|0,Q>>>0>=(g=g+4|0)>>>0;);else{I:if((0|g)<1)g=A;else if(3&A)for(g=A;;){if(C[0|g]=n[0|I],I=I+1|0,B>>>0<=(g=g+1|0)>>>0)break I;if(!(3&g))break}else g=A;if(!((Q=-4&B)>>>0<64||(E=Q+-64|0)>>>0>>0))for(;i[g>>2]=i[I>>2],i[g+4>>2]=i[I+4>>2],i[g+8>>2]=i[I+8>>2],i[g+12>>2]=i[I+12>>2],i[g+16>>2]=i[I+16>>2],i[g+20>>2]=i[I+20>>2],i[g+24>>2]=i[I+24>>2],i[g+28>>2]=i[I+28>>2],i[g+32>>2]=i[I+32>>2],i[g+36>>2]=i[I+36>>2],i[g+40>>2]=i[I+40>>2],i[g+44>>2]=i[I+44>>2],i[g+48>>2]=i[I+48>>2],i[g+52>>2]=i[I+52>>2],i[g+56>>2]=i[I+56>>2],i[g+60>>2]=i[I+60>>2],I=I- -64|0,E>>>0>=(g=g- -64|0)>>>0;);if(g>>>0>=Q>>>0)break A;for(;i[g>>2]=i[I>>2],I=I+4|0,Q>>>0>(g=g+4|0)>>>0;);}if(g>>>0>>0)for(;C[0|g]=n[0|I],I=I+1|0,(0|B)!=(0|(g=g+1|0)););return A}function V(A,I,g,B){var Q,E=0,a=0,r=0,o=0,e=0,t=0,f=0;if(h=Q=h-704|0,g|B)if(E=B<<3|g>>>29,r=(f=i[(a=A)+72>>2])+(e=g<<3)|0,E=E+(o=i[a+76>>2])|0,t=r,i[a+72>>2]=r,E=r>>>0>>0?E+1|0:E,i[a+76>>2]=E,t=(e=(0|E)==(0|o)&f>>>0>t>>>0|E>>>0>>0)+i[(a=r=a- -64|0)>>2]|0,E=i[a+4>>2],E=e>>>0>t>>>0?E+1|0:E,r=(e=B>>>29|0)+t|0,i[a>>2]=r,i[a+4>>2]=r>>>0>>0?E+1|0:E,(0|(E=B))==(0|(t=0-((o=127&((7&o)<<29|f>>>3))>>>0>128)|0))&g>>>0>=(r=128-o|0)>>>0|E>>>0>t>>>0){for(a=0,E=0;C[80+(A+(e=a+o|0)|0)|0]=n[I+a|0],(0|r)!=(0|(a=a+1|0))|(0|(E=a>>>0<1?E+1|0:E))!=(0|t););if(F(A,A+80|0,Q,E=Q+640|0),I=I+r|0,!(B=B-((g>>>0>>0)+t|0)|0)&(g=g-r|0)>>>0>127|B)for(;F(A,I,Q,E),I=I+128|0,!(B=B-(g>>>0<128)|0)&(g=g-128|0)>>>0>127|B;);if(g|B)for(a=0,E=0;C[80+(A+a|0)|0]=n[I+a|0],(0|g)!=(0|(a=o=a+1|0))|(0|B)!=(0|(E=o>>>0<1?E+1|0:E)););fI(Q,704)}else for(a=g,r=(g=!B&g>>>0>1|0!=(0|B))?a:1,f=g?B:0,a=0,E=0;C[80+(A+(B=a+o|0)|0)|0]=n[I+a|0],(0|r)!=(0|(a=g=a+1|0))|(0|(E=g>>>0<1?E+1|0:E))!=(0|f););return h=Q+704|0,0}function W(A,I,g,B,Q,E,n,a){A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,n|=0,a|=0;var r,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,D=0;h=r=h-16|0,i[r+12>>2]=0,pg(a);A:{if(B){w=4&a;I:{g:{B:{for(;;){o=f;Q:{C:{for(;;){if(y=C[g+o|0],255!=(0|(t=w?LA(y):KA(y))))break C;if(!Q)break Q;if(!gg(Q,y))break B;if(!((o=o+1|0)>>>0>>0))break}A=f+1|0,i[r+12>>2]=A>>>0>>0?B:A;break g}if(s=(s<<6)+t|0,(t=e+6|0)>>>0<8)e=t;else{if(e=e-2|0,I>>>0<=c>>>0){i[r+12>>2]=o,i[8960]=68,o=1;break I}C[A+c|0]=s>>>e,c=c+1|0}if((f=o+1|0)>>>0>>0)continue}break}i[r+12>>2]=f;break g}i[r+12>>2]=o}o=0}if(!(e>>>0<=4)){A=-1;break A}}if(A=-1,!((-1<>2];;){g:{if(I>>>0<=E>>>0)i[8960]=68;else{if(61==(0|(n=C[A+E|0]))){Q=Q-1|0;break g}if(B&&gg(B,n))break g;i[8960]=28}a=-1;break I}if(E=E+1|0,i[g>>2]=E,!Q)break}return a}(g,B,r+12|0,Q,e>>>1|0)))){A=0;I:if(Q&&!((o=i[r+12>>2])>>>0>=B>>>0)){g:{for(;;){if(!gg(Q,C[g+o|0]))break g;if((0|(o=o+1|0))==(0|B))break}i[r+12>>2]=B;break I}i[r+12>>2]=o}D=c}}return I=i[r+12>>2],n?i[n>>2]=I+g:(0|I)!=(0|B)&&(i[8960]=28,A=-1),E&&(i[E>>2]=D),h=r+16|0,0|A}function T(A,I,g){var B,Q,C,E=0;h=B=h-16|0,Q=i[A+20>>2],i[A+20>>2]=0,C=i[A+4>>2],i[A+4>>2]=0,E=-26;A:{I:{g:switch(g-1|0){case 1:if(E=-32,XA(I,35621,9))break A;I=I+9|0;break I;case 0:break g;default:break A}if(E=-32,XA(I,35631,8))break A;I=I+8|0}if(!XA(I,35640,3)&&(I=bA(I+3|0,B+12|0))){if(E=-26,19!=i[B+12>>2])break A;if(!XA(I,35644,3)&&(I=bA(I+3|0,B+12|0))&&(i[A+44>>2]=i[B+12>>2],!XA(I,35648,3)&&(I=bA(I+3|0,B+12|0))&&(i[A+40>>2]=i[B+12>>2],!XA(I,35652,3)&&(I=bA(I+3|0,B+12|0))&&(g=i[B+12>>2],i[A+48>>2]=g,i[A+52>>2]=g,36==(0|(g=n[0|I]))&&(i[B+12>>2]=Q,I=36==(0|g)?I+1|0:I,!W(i[A+16>>2],Q,I,YA(I),0,B+12|0,B+8|0,3)&&(i[A+20>>2]=i[B+12>>2],I=i[B+8>>2],36==(0|(g=n[0|I]))&&(i[B+12>>2]=C,I=36==(0|g)?I+1|0:I,!W(i[A>>2],C,I,YA(I),0,B+12|0,B+8|0,3)))))))){if(i[A+4>>2]=i[B+12>>2],I=i[B+8>>2],E=oA(A))break A;return h=B+16|0,n[0|I]?-32:0}}E=-32}return h=B+16|0,E}function j(A,I){var g;for(h=g=h-192|0,H(g+144|0,I),H(g+96|0,g+144|0),H(g+96|0,g+96|0),_(g+96|0,I,g+96|0),_(g+144|0,g+144|0,g+96|0),H(g+48|0,g+144|0),_(g+96|0,g+96|0,g+48|0),H(g+48|0,g+96|0),I=1;H(g+48|0,g+48|0),5!=(0|(I=I+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),I=1;H(g+48|0,g+48|0),10!=(0|(I=I+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),I=1;H(g,g),20!=(0|(I=I+1|0)););for(_(g+48|0,g,g+48|0),I=1;H(g+48|0,g+48|0),11!=(0|(I=I+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),I=1;H(g+48|0,g+48|0),50!=(0|(I=I+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),I=1;H(g,g),100!=(0|(I=I+1|0)););for(_(g+48|0,g,g+48|0),I=1;H(g+48|0,g+48|0),51!=(0|(I=I+1|0)););for(_(g+96|0,g+48|0,g+96|0),I=1;H(g+96|0,g+96|0),6!=(0|(I=I+1|0)););_(A,g+96|0,g+144|0),h=g+192|0}function Z(A,I){var g,B,Q,E,n,a,o,e,t,f,c=0,y=0,s=0,w=0,h=0,D=0,u=0;(y=s=i[A+60>>2])|(c=i[A+56>>2])&&(s=c,C[(w=c+A|0)- -64|0]=1,!(y=(c=c+1|0)>>>0<1?y+1|0:y)&c>>>0<=15&&EA(w+65|0,0,15-s|0),C[A+80|0]=1,S(A,A- -64|0,16,0)),t=i[A+52>>2],f=i[A+48>>2],s=i[A+44>>2],u=i[A+24>>2],h=i[A+28>>2]+(u>>>26|0)|0,c=i[A+32>>2]+(h>>>26|0)|0,e=(g=(E=(-67108864|(Q=i[A+36>>2]+(c>>>26|0)|0))+((o=(a=67108863&c)+((h=(D=67108863&h)+((y=(c=(67108863&u)+((y=i[A+20>>2]+r(Q>>>26|0,5)|0)>>>26|0)|0)+((n=5+(w=67108863&y)|0)>>>26|0)|0)>>>26|0)|0)>>>26|0)|0)>>>26|0)|0)>>31)&c|(B=67108863&(u=(E>>>31|0)-1|0))&y,y=0,y=(c=w&g|B&n|e<<26)>>>0>(w=c+i[A+40>>2]|0)>>>0?1:y,xI(I,w),h=(c=(D=D&g|h&B)<<20|e>>>6)+s|0,s=0,s=c>>>0>h>>>0?1:s,c=y,y=s,y=c>>>0>(h=c+h|0)>>>0?y+1|0:y,xI(I+4|0,h),s=0,s=(c=(w=g&a|B&o)<<14|D>>>12)>>>0>(D=c+f|0)>>>0?1:s,c=y,y=s,y=c>>>0>(D=c+D|0)>>>0?y+1|0:y,xI(I+8|0,D),xI(s=I+12|0,y=y+(w=(I=(u&E|g&Q)<<8|w>>>18)+t|0)|0),fI(A,88)}function O(A,I,g,B,Q){A|=0,I|=0,g|=0,B|=0;var E=0,i=0,a=0,o=0,f=0,c=0,y=0,s=0,w=0;pg(Q|=0),i=(E=(B>>>0)/3|0)<<2,(E=r(E,-3)+B|0)&&(i=2&Q?(2|i)+(E>>>1|0)|0:i+4|0);A:{I:{g:{B:{if(I>>>0>i>>>0){if(!(4&Q)){if(a=0,!B)break g;Q=0,E=0;break B}if(a=0,!B)break g;for(Q=0,E=0;;){for(f=n[g+o|0]|f<<8,Q=Q+8|0;c=E,y=Q,s=A+E|0,w=CI(f>>>(Q=Q-6|0)&63),C[0|s]=w,E=E+1|0,Q>>>0>5;);if((0|(o=o+1|0))==(0|B))break}if(a=E,!Q)break g;s=A+E|0,w=CI(f<<12-y&63),C[0|s]=w,a=c+2|0;break g}OI(),e()}for(;;){for(f=n[g+o|0]|f<<8,Q=Q+8|0;c=E,y=Q,s=A+E|0,w=EI(f>>>(Q=Q-6|0)&63),C[0|s]=w,E=E+1|0,Q>>>0>5;);if((0|(o=o+1|0))==(0|B))break}a=E,Q&&(s=A+E|0,w=EI(f<<12-y&63),C[0|s]=w,a=c+2|0)}if((E=a)>>>0<=i>>>0){if(E>>>0>>0)break I;i=E;break A}t(35568,35587,230,35603),e()}EA(A+E|0,61,i-E|0)}return EA(A+i|0,0,(I>>>0>(g=i+1|0)>>>0?I:g)-i|0),0|A}function z(A,I,g,B){var Q=0,E=0,a=0,r=0,o=0,e=0;A:{if((Q=i[A+56>>2])|(E=i[A+60>>2])){if(e=A,o=a=16-Q|0,o=(a=(0|(r=0-((Q>>>0>16)+E|0)|0))==(0|B)&g>>>0>>0|B>>>0>>0)?g:o,(a=r=a?B:r)|o){if(C[(A+Q|0)- -64|0]=n[0|I],E=1,Q=0,1!=(0|o)|a)for(;r=E+i[A+56>>2]|0,C[(A+r|0)- -64|0]=n[I+E|0],(0|o)!=(0|(E=E+1|0))|(0|(Q=E>>>0<1?Q+1|0:Q))!=(0|a););Q=i[A+56>>2],E=i[A+60>>2]}if(r=Q+o|0,Q=E+a|0,E=r,i[e+56>>2]=E,Q=E>>>0>>0?Q+1|0:Q,i[e+60>>2]=Q,!Q&E>>>0<16)break A;S(A,A- -64|0,16,0),i[A+56>>2]=0,i[A+60>>2]=0,g=(Q=g)-(E=o)|0,B=B-((Q>>>0>>0)+a|0)|0,I=I+E|0}if(!B&g>>>0>=16|B&&(S(A,I,Q=-16&g,B),g&=15,B=0,I=I+Q|0),g|B){for(E=0,Q=0;e=E+i[A+56>>2]|0,C[(A+e|0)- -64|0]=n[I+E|0],(0|g)!=(0|(E=E+1|0))|(0|B)!=(0|(Q=E>>>0<1?Q+1|0:Q)););I=A,Q=g+i[A+56>>2]|0,A=B+i[A+60>>2]|0,i[I+56>>2]=Q,i[I+60>>2]=g>>>0>Q>>>0?A+1|0:A}}}function $(A,I){var g=0,B=0,Q=0,C=0,E=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0;A:if(A&&(2!=i[A+36>>2]||(Q=i[I>>2],n[I+8|0]<2&&!Q)?(function(A,I,g){var B,Q=0,C=0,E=0;if(h=B=h-4096|0,vg(B+3072|0),vg(B+2048|0),!(!A|!I)&&(i[B+2048>>2]=i[I>>2],i[B+2052>>2]=0,i[B+2056>>2]=i[I+4>>2],i[B+2060>>2]=0,i[B+2064>>2]=n[I+8|0],i[B+2068>>2]=0,i[B+2072>>2]=i[A+16>>2],i[B+2076>>2]=0,i[B+2080>>2]=i[A+8>>2],i[B+2084>>2]=0,i[B+2088>>2]=i[A+36>>2],i[B+2092>>2]=0,i[A+20>>2]))for(I=0;(E=127&I)||(Q=i[B+2100>>2],Q=(C=i[B+2096>>2]+1|0)>>>0<1?Q+1|0:Q,i[B+2096>>2]=C,i[B+2100>>2]=Q,vg(B),vg(B+1024|0),Y(B+3072|0,B+2048|0,B),Y(B+3072|0,B,B+1024|0)),E=i[4+(C=(B+1024|0)+(E<<3)|0)>>2],i[(Q=(I<<3)+g|0)>>2]=i[C>>2],i[Q+4>>2]=E,(I=I+1|0)>>>0>2];);h=B+4096|0}(A,I,t=i[A+4>>2]),Q=i[I>>2],B=0):(t=i[A+4>>2],B=1),c=B,!((E=!((B=n[I+8|0])|Q)<<1)>>>0>=(g=i[A+20>>2])>>>0)))for(C=i[A+24>>2],g=(Q=(r(C,i[I+4>>2])+E|0)+r(g,B)|0)+((Q>>>0)%(C>>>0)|0?-1:C-1|0)|0;;){if(f=1==((Q>>>0)%(C>>>0)|0)?Q-1|0:g,c?(o=i[A>>2],g=i[o+4>>2]+(f<<10)|0):(o=i[A>>2],g=(E<<3)+t|0),B=i[g+4>>2],y=i[g>>2],g=i[A+28>>2],i[I+12>>2]=E,B=(B>>>0)%(g>>>0)|0,e=i[I+4>>2],g=n[I+8|0]?B:e,o=i[o+4>>2],s=C,w=B,C=i[I>>2],e=(o+(r(s,g=(B=C)?w:g)<<10)|0)+(FA(A,I,y,!0&(0|g)==(0|e))<<10)|0,B=o+(f<<10)|0,g=o+(Q<<10)|0,C?Y(B,e,g):b(B,e,g),(E=E+1|0)>>>0>=a[A+20>>2])break A;Q=Q+1|0,g=f+1|0,C=i[A+24>>2]}}function AA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y=0,s=0,w=0,h=0,D=0,u=0,p=0,l=0,F=0;B=i[I+4>>2],Q=i[A+4>>2],C=i[I+8>>2],s=i[A+8>>2],E=i[I+12>>2],w=i[A+12>>2],n=i[I+16>>2],h=i[A+16>>2],a=i[I+20>>2],D=i[A+20>>2],r=i[I+24>>2],u=i[A+24>>2],o=i[I+28>>2],p=i[A+28>>2],e=i[I+32>>2],l=i[A+32>>2],t=i[I+36>>2],F=i[A+36>>2],c=(g=0-g|0)&((f=i[I>>2])^(y=i[A>>2])),i[A>>2]=c^y,y=F,F=g&(F^t),i[A+36>>2]=y^F,y=l,l=g&(l^e),i[A+32>>2]=y^l,y=p,p=g&(p^o),i[A+28>>2]=y^p,y=u,u=g&(u^r),i[A+24>>2]=y^u,y=D,D=g&(D^a),i[A+20>>2]=y^D,y=h,h=g&(h^n),i[A+16>>2]=y^h,y=w,w=g&(w^E),i[A+12>>2]=y^w,y=s,s=g&(s^C),i[A+8>>2]=y^s,y=A,A=g&(B^Q),i[y+4>>2]=A^Q,i[I+36>>2]=F^t,i[I+32>>2]=l^e,i[I+28>>2]=p^o,i[I+24>>2]=u^r,i[I+20>>2]=D^a,i[I+16>>2]=h^n,i[I+12>>2]=w^E,i[I+8>>2]=s^C,i[I+4>>2]=A^B,i[I>>2]=f^c}function IA(A,I){var g;i[A>>2]=67108863&(n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24),i[A+4>>2]=(n[I+3|0]|n[I+4|0]<<8|n[I+5|0]<<16|n[I+6|0]<<24)>>>2&67108611,i[A+8>>2]=(n[I+6|0]|n[I+7|0]<<8|n[I+8|0]<<16|n[I+9|0]<<24)>>>4&67092735,i[A+12>>2]=(n[I+9|0]|n[I+10|0]<<8|n[I+11|0]<<16|n[I+12|0]<<24)>>>6&66076671,g=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,i[A+20>>2]=0,i[A+24>>2]=0,i[A+28>>2]=0,i[A+32>>2]=0,i[A+36>>2]=0,i[A+16>>2]=g>>>8&1048575,i[A+40>>2]=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,i[A+44>>2]=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,i[A+48>>2]=n[I+24|0]|n[I+25|0]<<8|n[I+26|0]<<16|n[I+27|0]<<24,I=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24,C[A+80|0]=0,i[A+56>>2]=0,i[A+60>>2]=0,i[A+52>>2]=I}function gA(A,I,g){var B=0;A:if((0|A)!=(0|I)){if((I-A|0)-g>>>0<=0-(g<<1)>>>0)return X(A,I,g);if(B=3&(A^I),A>>>0>>0){if(B)B=A;else{if(3&A)for(B=A;;){if(!g)break A;if(C[0|B]=n[0|I],I=I+1|0,g=g-1|0,!(3&(B=B+1|0)))break}else B=A;if(!(g>>>0<=3))for(;i[B>>2]=i[I>>2],I=I+4|0,B=B+4|0,(g=g-4|0)>>>0>3;);}if(g)for(;C[0|B]=n[0|I],B=B+1|0,I=I+1|0,g=g-1|0;);}else{if(!B){if(A+g&3)for(;;){if(!g)break A;if(C[0|(B=(g=g-1|0)+A|0)]=n[I+g|0],!(3&B))break}if(!(g>>>0<=3))for(;i[(g=g-4|0)+A>>2]=i[I+g>>2],g>>>0>3;);}if(!g)break A;for(;C[(g=g-1|0)+A|0]=n[I+g|0],g;);}}return A}function BA(A,I){var g,B=0;h=g=h-48|0,function(A,I){var g,B,Q,C,E,n,a,o,e=0;B=i[I+28>>2],Q=i[I+24>>2],C=i[I+20>>2],E=i[I+16>>2],n=i[I+12>>2],a=i[I+8>>2],o=i[I+4>>2],e=i[I>>2],g=i[I+36>>2],I=i[I+32>>2],e=r(((B+(Q+(C+(E+(n+(a+(o+(e+(r(g,19)+16777216>>>25|0)>>26)>>25)>>26)>>25)>>26)>>25)>>26)>>25)+I>>26)+g>>25,19)+e|0,i[A>>2]=67108863&e,e=o+(e>>26)|0,i[A+4>>2]=33554431&e,e=a+(e>>25)|0,i[A+8>>2]=67108863&e,e=n+(e>>26)|0,i[A+12>>2]=33554431&e,e=E+(e>>25)|0,i[A+16>>2]=67108863&e,e=C+(e>>26)|0,i[A+20>>2]=33554431&e,e=Q+(e>>25)|0,i[A+24>>2]=67108863&e,e=B+(e>>26)|0,i[A+28>>2]=33554431&e,I=I+(e>>25)|0,i[A+32>>2]=67108863&I,i[A+36>>2]=g+(I>>26)&33554431}(g,I),I=i[g>>2],C[0|A]=I,C[A+2|0]=I>>>16,C[A+1|0]=I>>>8,B=i[g+4>>2],C[A+5|0]=B>>>14,C[A+4|0]=B>>>6,C[A+3|0]=B<<2|I>>>24,I=i[g+8>>2],C[A+8|0]=I>>>13,C[A+7|0]=I>>>5,C[A+6|0]=I<<3|B>>>22,B=i[g+12>>2],C[A+11|0]=B>>>11,C[A+10|0]=B>>>3,C[A+9|0]=B<<5|I>>>21,I=i[g+16>>2],C[A+15|0]=I>>>18,C[A+14|0]=I>>>10,C[A+13|0]=I>>>2,C[A+12|0]=I<<6|B>>>19,I=i[g+20>>2],C[A+16|0]=I,C[A+18|0]=I>>>16,C[A+17|0]=I>>>8,B=i[g+24>>2],C[A+21|0]=B>>>15,C[A+20|0]=B>>>7,C[A+19|0]=B<<1|I>>>24,I=i[g+28>>2],C[A+24|0]=I>>>13,C[A+23|0]=I>>>5,C[A+22|0]=I<<3|B>>>23,B=i[g+32>>2],C[A+27|0]=B>>>12,C[A+26|0]=B>>>4,C[A+25|0]=B<<4|I>>>21,I=i[g+36>>2],C[A+31|0]=I>>>18,C[A+30|0]=I>>>10,C[A+29|0]=I>>>2,C[A+28|0]=I<<6|B>>>20,h=g+48|0}function QA(A,I,g,B){var Q=0,E=0,i=0,a=0,r=0,o=0;A:if(g|B)for(o=A+224|0,i=A+96|0,Q=n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24;;){if(a=96+(A+Q|0)|0,r=E=256-Q|0,!B&g>>>0<=E>>>0){X(a,I,g),I=g+(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)|0,C[A+352|0]=I,C[A+353|0]=I>>>8,C[A+354|0]=I>>>16,C[A+355|0]=I>>>24;break A}if(X(a,I,E),Q=(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)+E|0,C[A+352|0]=Q,C[A+353|0]=Q>>>8,C[A+354|0]=Q>>>16,C[A+355|0]=Q>>>24,iA(A,128),l(A,i),X(i,o,128),Q=(n[A+352|0]|n[A+353|0]<<8|n[A+354|0]<<16|n[A+355|0]<<24)-128|0,C[A+352|0]=Q,C[A+353|0]=Q>>>8,C[A+354|0]=Q>>>16,C[A+355|0]=Q>>>24,I=I+E|0,!((g=(E=g)-r|0)|(B=B-(E>>>0>>0)|0)))break}return 0}function CA(A,I){var g,B=0,Q=0,E=0,i=0;for(h=g=h-464|0;Q=B<<1,i=n[I+B|0],C[Q+(g+400|0)|0]=15&i,C[(g+400|0)+(1|Q)|0]=i>>>4,32!=(0|(B=B+1|0)););for(B=0;I=((Q=(I=B)+n[0|(B=(g+400|0)+E|0)]|0)<<24)- -134217728|0,C[0|B]=Q-(I>>24&240),B=I>>28,63!=(0|(E=E+1|0)););for(C[g+463|0]=n[g+463|0]+B,zI(A),B=1;fg(g,B>>>1|0,C[(g+400|0)+B|0]),OA(g+240|0,A,g),DI(A,g+240|0),I=B>>>0<62,B=B+2|0,I;);for(JI(g+240|0,A),_I(g+120|0,g+240|0),AI(g+240|0,g+120|0),_I(g+120|0,g+240|0),AI(g+240|0,g+120|0),_I(g+120|0,g+240|0),AI(g+240|0,g+120|0),DI(A,g+240|0),B=0;fg(g,B>>>1|0,C[(g+400|0)+B|0]),OA(g+240|0,A,g),DI(A,g+240|0),I=B>>>0<62,B=B+2|0,I;);h=g+464|0}function EA(A,I,g){var B=0,Q=0,E=0,n=0;if(g&&(C[(B=A+g|0)-1|0]=I,C[0|A]=I,!(g>>>0<3||(C[B-2|0]=I,C[A+1|0]=I,C[B-3|0]=I,C[A+2|0]=I,g>>>0<7||(C[B-4|0]=I,C[A+3|0]=I,g>>>0<9||(Q=(B=0-A&3)+A|0,I=r(255&I,16843009),i[Q>>2]=I,i[(B=(g=g-B&-4)+Q|0)-4>>2]=I,g>>>0<9||(i[Q+8>>2]=I,i[Q+4>>2]=I,i[B-8>>2]=I,i[B-12>>2]=I,g>>>0<25||(i[Q+24>>2]=I,i[Q+20>>2]=I,i[Q+16>>2]=I,i[Q+12>>2]=I,i[B-16>>2]=I,i[B-20>>2]=I,i[B-24>>2]=I,i[B-28>>2]=I,(g=g-(n=4&Q|24)|0)>>>0<32))))))))for(B=I,E=I,I=Q+n|0;i[I+24>>2]=E,i[I+28>>2]=B,i[I+16>>2]=E,i[I+20>>2]=B,i[I+8>>2]=E,i[I+12>>2]=B,i[I>>2]=E,i[I+4>>2]=B,I=I+32|0,(g=g-32|0)>>>0>31;);return A}function iA(A,I){var g,B,Q,E=0,i=0;i=E=A- -64|0,B=1+(g=n[E+4|0]|n[E+5|0]<<8|n[E+6|0]<<16|n[E+7|0]<<24)|0,E=(I=I+(E=Q=n[0|E]|n[E+1|0]<<8|n[E+2|0]<<16|n[E+3|0]<<24)|0)>>>0>>0?B:g,C[0|i]=I,C[i+1|0]=I>>>8,C[i+2|0]=I>>>16,C[i+3|0]=I>>>24,C[i+4|0]=E,C[i+5|0]=E>>>8,C[i+6|0]=E>>>16,C[i+7|0]=E>>>24,I=(E=(0|E)==(0|g)&I>>>0>>0|E>>>0>>0)+(n[A+72|0]|n[A+73|0]<<8|n[A+74|0]<<16|n[A+75|0]<<24)|0,i=n[A+76|0]|n[A+77|0]<<8|n[A+78|0]<<16|n[A+79|0]<<24,E=I>>>0>>0?i+1|0:i,C[A+72|0]=I,C[A+73|0]=I>>>8,C[A+74|0]=I>>>16,C[A+75|0]=I>>>24,C[A+76|0]=E,C[A+77|0]=E>>>8,C[A+78|0]=E>>>16,C[A+79|0]=E>>>24}function nA(A,I,g,B,Q,C,E){var n,a,r,o,e=0;return h=n=h-352|0,K(n,C,E),!Q&B>>>0<=g-A>>>0|A>>>0>=g>>>0&&!(!Q&B>>>0>A-g>>>0|Q&&A>>>0>g>>>0)||(g=gA(A,g,B)),i[n+56>>2]=0,i[n+60>>2]=0,i[n+48>>2]=0,i[n+52>>2]=0,i[n+40>>2]=0,i[n+44>>2]=0,i[n+32>>2]=0,i[n+36>>2]=0,(a=!((E=(e=!Q&B>>>0>32|0!=(0|Q))?32:B)|(e=e?0:Q)))||X(n- -64|0,g,E),o=C+16|0,$I(n+32|0,n+32|0,r=E+32|0,C=r>>>0<32?e+1|0:e,o,n),lg(n+96|0,n+32|0),a||X(A,n- -64|0,E),fI(n+32|0,64),!Q&B>>>0>=33|Q&&Ag(A+E|0,C=g+E|0,(g=B)-E|0,Q-(e+(g>>>0>>0)|0)|0,o,n),fI(n,32),yg(n+96|0,A,B,Q),Fg(n+96|0,I),fI(n+96|0,256),h=n+352|0,0}function aA(A,I){i[A>>2]=1634760805,i[A+4>>2]=857760878,i[A+8>>2]=2036477234,i[A+12>>2]=1797285236,i[A+16>>2]=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,i[A+20>>2]=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,i[A+24>>2]=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,i[A+28>>2]=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,i[A+32>>2]=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,i[A+36>>2]=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,i[A+40>>2]=n[I+24|0]|n[I+25|0]<<8|n[I+26|0]<<16|n[I+27|0]<<24,i[A+44>>2]=n[I+28|0]|n[I+29|0]<<8|n[I+30|0]<<16|n[I+31|0]<<24}function rA(A,I,g,B,Q,C,E){var n,a,r=0,o=0;h=n=h-96|0,K(n,C,E),a=C+16|0,Vg[i[8952]](n+32|0,32,0,a,n),C=-1;A:{if(!(0|Vg[i[8946]](g,I,B,Q,n+32|0))){if(C=0,!A)break A;!Q&B>>>0<=A-I>>>0|A>>>0<=I>>>0&&!(!Q&B>>>0>I-A>>>0|Q&&A>>>0>>0)||(I=gA(A,I,B)),g=(C=!Q&B>>>0>32|0!=(0|Q))?32:B,E=C=C?0:Q,g|C?(o=X(n- -64|0,I,g),C=E,$I(n+32|0,n+32|0,r=g+32|0,C=r>>>0<32?C+1|0:C,a,n),X(A,o,g)):(C=E,$I(n+32|0,n+32|0,r=g+32|0,C=r>>>0<32?C+1|0:C,a,n)),C=0,!Q&B>>>0<33||Ag((r=A)+(A=g)|0,A+I|0,B-A|0,Q-(E+(A>>>0>B>>>0)|0)|0,a,n)}fI(n,32)}return h=n+96|0,C}function oA(A){var I=0,g=0,B=0;if(!A)return-25;if(!i[A>>2])return-1;A:{I:{if(I=-2,!(a[A+4>>2]<16)&&(i[A+8>>2]||(I=-18,!i[A+12>>2]))){if(g=i[A+20>>2],!i[A+16>>2])break I;if(I=-6,!(g>>>0<8)&&(i[A+24>>2]||(I=-20,!i[A+28>>2]))&&(i[A+32>>2]||(I=-21,!i[A+36>>2]))){if(!(g=i[A+48>>2]))return-16;if(I=-17,!(g>>>0>16777215||(I=-14,(B=i[A+44>>2])>>>0<8||(I=-15,B>>>0>2097152||(I=-14,g<<3>>>0>B>>>0))))){if(!i[A+40>>2])return-12;if(A=i[A+52>>2])break A;I=-28}}}return I}return g?-19:-6}return A>>>0>16777215?-29:0}function eA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y,s,w,h,D,u,p,l;f=i[I+4>>2],B=i[A+4>>2],c=i[I+8>>2],Q=i[A+8>>2],y=i[I+12>>2],C=i[A+12>>2],s=i[I+16>>2],E=i[A+16>>2],w=i[I+20>>2],n=i[A+20>>2],h=i[I+24>>2],a=i[A+24>>2],D=i[I+28>>2],r=i[A+28>>2],u=i[I+32>>2],o=i[A+32>>2],p=i[I+36>>2],e=i[A+36>>2],t=i[A>>2],l=i[I>>2]^t,I=0-g|0,i[A>>2]=t^l&I,i[A+36>>2]=I&(e^p)^e,i[A+32>>2]=I&(o^u)^o,i[A+28>>2]=I&(r^D)^r,i[A+24>>2]=I&(a^h)^a,i[A+20>>2]=I&(n^w)^n,i[A+16>>2]=I&(E^s)^E,i[A+12>>2]=I&(C^y)^C,i[A+8>>2]=I&(Q^c)^Q,i[A+4>>2]=I&(B^f)^B}function tA(A,I){for(var g=0,B=0,Q=0,E=0,i=0,a=0,r=0,o=0;C[A+g|0]=n[(g>>>3|0)+I|0]>>>(7&g)&1,256!=(0|(g=g+1|0)););for(;;){a=(I=a)+1|0;A:if(n[0|(i=A+I|0)]&&(g=a,Q=1,!(I>>>0>254)))for(;;){I:if(E=C[0|(B=A+g|0)])if((0|(o=(r=C[0|i])+(E<<=Q)|0))<=15)C[0|i]=o,C[0|B]=0;else{if((0|(B=r-E|0))<-15)break A;for(C[0|i]=B;;){if(!n[0|(B=A+g|0)]){C[0|B]=1;break I}if(C[0|B]=0,B=g>>>0<255,g=g+1|0,!B)break}}if(Q>>>0>5)break A;if(!((g=I+(Q=Q+1|0)|0)>>>0<256))break}if(256==(0|a))break}}function fA(A,I,g,B){var Q,C,E,n,a=0;h=Q=h+-64|0,EA(Q+8|0,0,52),a=YA(A),i[Q+20>>2]=a,i[Q+36>>2]=a,i[Q+4>>2]=a,C=k(a),i[Q+32>>2]=C,E=k(a),i[Q+16>>2]=E,n=k(a),i[Q>>2]=n;A:if(!n|!C|!E||!(a=k(a)))m(C),m(E),m(n),A=-22;else{if(A=T(Q,A,B)){m(i[Q+32>>2]),m(i[Q+16>>2]),m(i[Q>>2]),m(a);break A}A=0,I=pA(i[Q+40>>2],i[Q+44>>2],i[Q+52>>2],I,g,i[Q+16>>2],i[Q+20>>2],a,i[Q+4>>2],0,0,B),m(i[Q+32>>2]),m(i[Q+16>>2]),(I||zA(a,i[Q>>2],i[Q+4>>2]))&&(A=-35),m(a),m(i[Q>>2])}return h=Q- -64|0,A}function cA(A,I){var g,B,Q=0;h=g=h-288|0,d(B=A+40|0,I),wg(Q=A+80|0),H(g+240|0,B),_(g+192|0,g+240|0,2128),yA(g+240|0,g+240|0,Q),sA(g+192|0,g+192|0,Q),H(g+144|0,g+192|0),_(g+144|0,g+144|0,g+192|0),H(A,g+144|0),_(A,A,g+192|0),_(A,A,g+240|0),function(A,I){var g,B=0;for(h=g=h-144|0,H(g+96|0,I),H(g+48|0,g+96|0),H(g+48|0,g+48|0),_(g+48|0,I,g+48|0),_(g+96|0,g+96|0,g+48|0),H(g+96|0,g+96|0),_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),B=1;H(g+48|0,g+48|0),5!=(0|(B=B+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),B=1;H(g+48|0,g+48|0),10!=(0|(B=B+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),B=1;H(g,g),20!=(0|(B=B+1|0)););for(_(g+48|0,g,g+48|0),B=1;H(g+48|0,g+48|0),11!=(0|(B=B+1|0)););for(_(g+96|0,g+48|0,g+96|0),H(g+48|0,g+96|0),B=1;H(g+48|0,g+48|0),50!=(0|(B=B+1|0)););for(_(g+48|0,g+48|0,g+96|0),H(g,g+48|0),B=1;H(g,g),100!=(0|(B=B+1|0)););for(_(g+48|0,g,g+48|0),B=1;H(g+48|0,g+48|0),51!=(0|(B=B+1|0)););_(g+96|0,g+48|0,g+96|0),H(g+96|0,g+96|0),H(g+96|0,g+96|0),_(A,g+96|0,I),h=g+144|0}(A,A),_(A,A,g+144|0),_(A,A,g+240|0),H(g+96|0,A),_(g+96|0,g+96|0,g+192|0),yA(g+48|0,g+96|0,g+240|0);A:{if(!RI(g+48|0)){if(sA(g,g+96|0,g+240|0),Q=-1,!RI(g))break A;_(A,A,2176)}(0|KI(A))==(n[I+31|0]>>>7|0)&&mA(A,A),_(A+120|0,A,B),Q=0}return h=g+288|0,Q}function yA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y,s,w,h,D,u;B=i[g+4>>2],Q=i[I+4>>2],C=i[g+8>>2],E=i[I+8>>2],n=i[g+12>>2],a=i[I+12>>2],r=i[g+16>>2],o=i[I+16>>2],e=i[g+20>>2],t=i[I+20>>2],f=i[g+24>>2],c=i[I+24>>2],y=i[g+28>>2],s=i[I+28>>2],w=i[g+32>>2],h=i[I+32>>2],D=i[g+36>>2],u=i[I+36>>2],i[A>>2]=i[I>>2]-i[g>>2],i[A+36>>2]=u-D,i[A+32>>2]=h-w,i[A+28>>2]=s-y,i[A+24>>2]=c-f,i[A+20>>2]=t-e,i[A+16>>2]=o-r,i[A+12>>2]=a-n,i[A+8>>2]=E-C,i[A+4>>2]=Q-B}function sA(A,I,g){var B,Q,C,E,n,a,r,o,e,t,f,c,y,s,w,h,D,u;B=i[g+4>>2],Q=i[I+4>>2],C=i[g+8>>2],E=i[I+8>>2],n=i[g+12>>2],a=i[I+12>>2],r=i[g+16>>2],o=i[I+16>>2],e=i[g+20>>2],t=i[I+20>>2],f=i[g+24>>2],c=i[I+24>>2],y=i[g+28>>2],s=i[I+28>>2],w=i[g+32>>2],h=i[I+32>>2],D=i[g+36>>2],u=i[I+36>>2],i[A>>2]=i[g>>2]+i[I>>2],i[A+36>>2]=D+u,i[A+32>>2]=w+h,i[A+28>>2]=y+s,i[A+24>>2]=f+c,i[A+20>>2]=e+t,i[A+16>>2]=r+o,i[A+12>>2]=n+a,i[A+8>>2]=C+E,i[A+4>>2]=B+Q}function wA(A){var I,g=0,B=0,Q=0,E=0;for(C[11+(I=h-16|0)|0]=0,C[I+12|0]=0,C[I+13|0]=0,C[I+14|0]=0,i[I+8>>2]=0;;){for(Q=n[A+B|0],g=0;C[0|(E=(I+8|0)+g|0)]=n[0|E]|Q^n[(3232+(g<<5)|0)+B|0],7!=(0|(g=g+1|0)););if(31==(0|(B=B+1|0)))break}for(B=127&n[A+31|0],A=0,g=0;C[0|(Q=(I+8|0)+g|0)]=n[0|Q]|B^n[3263+(g<<5)|0],7!=(0|(g=g+1|0)););for(g=0;g=n[(I+8|0)+A|0]-1|g,7!=(0|(A=A+1|0)););return g>>>8&1}function hA(A,I){var g=0,B=0,Q=0,E=0,i=0;for(EA(X(A,1952,64)- -64|0,0,293);Q=B=(g=E<<3)+A|0,g=I+g|0,i=n[0|B]|n[B+1|0]<<8|n[B+2|0]<<16|n[B+3|0]<<24,B=(n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24)^(n[B+4|0]|n[B+5|0]<<8|n[B+6|0]<<16|n[B+7|0]<<24),g=(n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24)^i,C[0|Q]=g,C[Q+1|0]=g>>>8,C[Q+2|0]=g>>>16,C[Q+3|0]=g>>>24,C[Q+4|0]=B,C[Q+5|0]=B>>>8,C[Q+6|0]=B>>>16,C[Q+7|0]=B>>>24,8!=(0|(E=E+1|0)););}function DA(A,I,g,B,Q){var C,E=0;h=C=h+-64|0;A:{I:{if(E=!g,(g=YA(A))>>>0<128&&E){if(i[C+56>>2]=0,i[C+48>>2]=0,i[C+52>>2]=0,i[C+40>>2]=0,i[C+44>>2]=0,E=function(A){var I=0,g=0;return I=0,A&&(g=A,I=A,(1|A)>>>0<65536||(I=g)),g=I,!(A=k(I))|!(3&n[A-4|0])||EA(A,0,g),A}(g))break I}else i[8960]=28;A=-1;break A}i[C+32>>2]=0,i[C+36>>2]=0,i[C+8>>2]=E,i[C+16>>2]=E,i[C+20>>2]=g,i[C>>2]=E,i[C+12>>2]=g,i[C+24>>2]=0,i[C+28>>2]=0,i[C+4>>2]=g,T(C,A,Q)?(i[8960]=28,A=-1):(A=1,(0|I)==i[C+40>>2]&&(A=i[C+44>>2]!=(B>>>10|0))),m(E)}return h=C- -64|0,A}function uA(A,I){var g,B=0,Q=0,E=0,o=0;if(h=g=h-48|0,!((B=oA(A))||(B=-26,I-1>>>0>1||(E=i[A+44>>2],B=i[A+48>>2],i[g>>2]=0,Q=i[A+40>>2],i[g+28>>2]=B,i[g+12>>2]=-1,i[g+8>>2]=Q,B=((Q=E>>>0<(Q=B<<3)>>>0?Q:E)>>>0)/((E=B<<2)>>>0)|0,i[g+20>>2]=B,i[g+24>>2]=B<<2,i[g+16>>2]=r(B,E),B=i[A+52>>2],i[g+36>>2]=I,i[g+32>>2]=B,B=function(A,I){var g,B=0;return h=g=h-80|0,B=-25,!A|!I||(B=k(i[A+20>>2]<<3),i[A+4>>2]=B,B?(B=function(A,I){var g,B=0,Q=0;h=g=h-16|0,Q=-22;A:if(!(!A|!I)&&1024==(((B=I<<10)>>>0)/(I>>>0)|0)&&(I=k(12),i[A>>2]=I,I)){i[I>>2]=0,i[I+4>>2]=0,I=function(A,I){if(I>>>0>4294967168)A=48;else{if(!(I=function(A){var I=0,g=0,B=0,Q=0,C=0,E=0;return A>>>0>=4294967168?(i[8960]=48,0):(A=k(76+(B=A>>>0<11?16:A+11&-8)|0))?(I=A-8|0,63&A?(Q=(-8&(E=i[(C=A-4|0)>>2]))-(g=(A=(A=(A+63&-64)-8|0)-I>>>0>15?A:A- -64|0)-I|0)|0,3&E?(i[A+4>>2]=Q|1&i[A+4>>2]|2,i[4+(Q=A+Q|0)>>2]=1|i[Q+4>>2],i[C>>2]=g|1&i[C>>2]|2,i[A+4>>2]=1|i[A+4>>2],v(I,g)):(I=i[I>>2],i[A+4>>2]=Q,i[A>>2]=I+g)):A=I,3&(I=i[A+4>>2])&&((g=-8&I)>>>0<=B+16>>>0||(i[A+4>>2]=B|1&I|2,I=A+B|0,B=g-B|0,i[I+4>>2]=3|B,i[4+(g=A+g|0)>>2]=1|i[g+4>>2],v(I,B))),A+8|0):0}(I)))return 48;i[A>>2]=I,A=0}return A}(g+12|0,B),i[8960]=I;I:{if(I)i[g+12>>2]=0;else if(I=i[g+12>>2])break I;m(i[A>>2]),i[A>>2]=0;break A}i[i[A>>2]>>2]=I,i[i[A>>2]+4>>2]=I,i[i[A>>2]+8>>2]=B,Q=0}return h=g+16|0,Q}(A,i[A+16>>2]))?eI(A,i[I+56>>2]):(function(A,I,g){var B,Q=0;B=Q=h,h=Q=Q-448&-64,!A|!I||(iI(Q- -64|0,0,0,64),xI(Q+60|0,i[I+48>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+4>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+44>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+40>>2]),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,19),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,g),hg(Q- -64|0,Q+60|0,4,0),xI(Q+60|0,i[I+12>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+8>>2])&&(hg(Q- -64|0,g,i[I+12>>2],0),1&C[I+56|0]&&(fI(i[I+8>>2],i[I+12>>2]),i[I+12>>2]=0)),xI(Q+60|0,i[I+20>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+16>>2])&&hg(Q- -64|0,g,i[I+20>>2],0),xI(Q+60|0,i[I+28>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+24>>2])&&(hg(Q- -64|0,g,i[I+28>>2],0),2&n[I+56|0]&&(fI(i[I+24>>2],i[I+28>>2]),i[I+28>>2]=0)),xI(Q+60|0,i[I+36>>2]),hg(Q- -64|0,Q+60|0,4,0),(g=i[I+32>>2])&&hg(Q- -64|0,g,i[I+36>>2],0),dI(Q- -64|0,A,64)),h=B}(g,I,i[A+36>>2]),fI(g- -64|0,8),function(A,I){var g,B=0,Q=0,C=0;if(h=g=h-1024|0,i[I+28>>2])for(C=A+68|0,Q=A- -64|0;xI(Q,0),xI(C,B),J(g,1024,A,72),TA(i[i[I>>2]+4>>2]+(r(i[I+24>>2],B)<<10)|0,g),xI(Q,1),J(g,1024,A,72),TA(1024+(i[i[I>>2]+4>>2]+(r(i[I+24>>2],B)<<10)|0)|0,g),(B=B+1|0)>>>0>2];);fI(g,1024),h=g+1024|0}(g,A),fI(g,72),B=0):B=-22),h=g+80|0,B}(g,A))))){if(i[g+8>>2])for(;kA(g,o),(o=o+1|0)>>>0>2];);!function(A,I){var g,B=0,Q=0;if(h=g=h-2048|0,!(!A|!I)){if(Yg(g+1024|0,(i[i[I>>2]+4>>2]+(i[I+24>>2]<<10)|0)-1024|0),a[I+28>>2]>=2)for(B=1;Q=i[I+24>>2],QI(g+1024|0,(i[i[I>>2]+4>>2]+(Q+r(B,Q)<<10)|0)-1024|0),(B=B+1|0)>>>0>2];);!function(A,I){for(var g=0,B=0;tI((g=B<<3)+A|0,i[(g=I+g|0)>>2],i[g+4>>2]),128!=(0|(B=B+1|0)););}(g,g+1024|0),J(i[A>>2],i[A+4>>2],g,1024),fI(g+1024|0,1024),fI(g,1024),eI(I,i[A+56>>2])}h=g+2048|0}(A,g),B=0}return h=g+48|0,B}function pA(A,I,g,B,Q,C,E,n,a,r,o,e){var t,f;return h=t=h+-64|0,(f=k(a))?(i[t+32>>2]=0,i[t+36>>2]=0,i[t+24>>2]=0,i[t+28>>2]=0,i[t+20>>2]=E,i[t+16>>2]=C,i[t+12>>2]=Q,i[t+8>>2]=B,i[t+4>>2]=a,i[t>>2]=f,i[t+56>>2]=0,i[t+52>>2]=g,i[t+48>>2]=g,i[t+44>>2]=I,i[t+40>>2]=A,(g=uA(t,e))?fI(f,a):!r|!o||!R(r,o,t,e)?(n&&X(n,f,a),fI(f,a),g=0):(fI(f,a),fI(r,o),g=-31),m(f)):g=-22,h=t- -64|0,g}function lA(A,I,g,B,Q,E){var i,a,o=0,e=0,t=0;return h=i=h-592|0,o=-1,function(A){var I=0,g=0,B=0,Q=0,C=0;for(I=32,g=1;C=(B=n[(I=I-1|0)+A|0])-(Q=n[I+3456|0])>>8&g|255&C,g&=65535+(B^Q)>>>8,I;);return 0!=(0|C)}(a=A+32|0)&&(wA(A)||function(A){var I=0,g=0;for(g=127&(-1^n[A+31|0]),I=30;g=-1^n[A+I|0]|g,I=I-1|0;);return 1&(((255&g)-1&236-n[0|A])>>>8^-1)}(Q)&&(wA(Q)||cA(i+128|0,Q)||(ig(i+384|0,E),V(i+384|0,A,32,0),V(i+384|0,Q,32,0),V(i+384|0,I,g,B),UI(i+384|0,i+320|0),G(i+320|0),function(A,I,g,B){var Q;h=Q=h-2272|0,tA(Q+2016|0,I),tA(Q+1760|0,B),FI(Q+480|0,g),JI(Q+320|0,g),DI(Q,Q+320|0),VA(Q+320|0,Q,Q+480|0),DI(Q+160|0,Q+320|0),FI(I=Q+640|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+800|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+960|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+1120|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+1280|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(I=Q+1440|0,Q+160|0),VA(Q+320|0,Q,I),DI(Q+160|0,Q+320|0),FI(Q+1600|0,Q+160|0),Ug(A),wg(A+40|0),wg(A+80|0),B=255;A:{for(;;){if(!(n[(g=B)+(Q+2016|0)|0]|n[(Q+1760|0)+g|0])){if(B=g-1|0,g)continue;break A}break}if(!((0|g)<0))for(;AI(Q+320|0,A),(0|(g=C[(I=g)+(Q+2016|0)|0]))>=1?(DI(Q+160|0,Q+320|0),VA(Q+320|0,Q+160|0,(Q+480|0)+r((254&g)>>>1|0,160)|0)):(0|g)>-1||(DI(Q+160|0,Q+320|0),WA(Q+320|0,Q+160|0,(Q+480|0)+r((0-g&254)>>>1|0,160)|0)),(0|(g=C[I+(Q+1760|0)|0]))>=1?(DI(Q+160|0,Q+320|0),OA(Q+320|0,Q+160|0,r((254&g)>>>1|0,120)+2272|0)):(0|g)>-1||(DI(Q+160|0,Q+320|0),ZA(Q+320|0,Q+160|0,r((0-g&254)>>>1|0,120)+2272|0)),_I(A,Q+320|0),g=I-1|0,(0|I)>0;);}h=Q+2272|0}(i+8|0,i+320|0,i+128|0,a),nI(i+288|0,i+8|0),e=-1,t=Gg(i+288|0,A),o=((i+288|0)==(0|A)?e:t)|zA(A,i+288|0,32)))),h=i+592|0,o}function FA(A,I,g,B){var Q=0,C=0;A:if(i[I>>2])C=i[A+24>>2],Q=i[A+20>>2],B=B?i[I+12>>2]+(C+(-1^Q)|0)|0:(C-Q|0)-!i[I+12>>2]|0,C=0,3!=(0|(I=n[I+8|0]))&&(C=r(Q,I+1|0));else{if(!(Q=n[I+8|0])){B=i[I+12>>2]-1|0,C=0;break A}if(Q=r(Q,i[A+20>>2]),I=i[I+12>>2],B){B=(I+Q|0)-1|0,C=0;break A}B=Q-!I|0,C=0}return I=C+(Q=B-1|0)|0,eg(g,0,g,0),eg(B,0,p,0),function(A,I,g){var B=0,Q=0,C=0,E=0,i=0,n=0,a=0,e=0,t=0;A:{I:{g:{B:{Q:{C:{E:{i:{n:{if(Q=I){if(!(B=g))break n;break i}return D=A-r((A>>>0)/(g>>>0)|0,g)|0,u=0,void(p=0)}if(!A)break E;break C}if(!((E=B-1|0)&B))break Q;i=0-(E=(o(B)+33|0)-o(Q)|0)|0;break g}return D=0,u=Q,void(p=0)}if((B=32-o(Q)|0)>>>0<31)break B;break I}if(D=A&E,u=0,1==(0|B))break A;return g=31&(A=B?31-o(B-1^B)|0:32),void(p=(63&A)>>>0>=32?0:I>>>g|0)}E=B+1|0,i=63-B|0}if(B=I,C=31&(Q=63&E),Q>>>0>=32?(Q=0,C=B>>>C|0):(Q=B>>>C|0,C=((1<>>C),B=31&(i&=63),i>>>0>=32?(I=A<>>32-B|I<>>31)-(e=g&(n=i-((Q=Q<<1|C>>>31)+(B>>>0>>0)|0)>>31))|0,Q=Q-(a>>>0>>0)|0,I=I<<1|A>>>31,A=t|A<<1,t=1&n,E=E-1|0;);return D=C,u=Q,void(p=I<<1|A>>>31)}D=A,u=I,I=0}p=I}(I-(g=p)|0,(I>>>0>>0)-(I>>>0>>0)|0,i[A+24>>2]),p=u,D}function GA(A,I,g,B,Q,C,E,i,n,a){var r;return h=r=h-352|0,_g(r+32|0,64,n,a),lg(r+96|0,r+32|0),fI(r+32|0,64),yg(r+96|0,C,E,i),yg(r+96|0,34688,0-E&15,0),yg(r+96|0,I,g,B),yg(r+96|0,34688,0-g&15,0),tI(r+24|0,E,i),yg(r+96|0,r+24|0,8,0),tI(r+24|0,g,B),yg(r+96|0,r+24|0,8,0),Fg(r+96|0,r),fI(r+96|0,256),Q=kg(r,Q),fI(r,16),A&&(Q?(EA(A,0,g),Q=-1):(BI(A,I,g,B,n,1,a),Q=0)),h=r+352|0,Q}function kA(A,I){var g,B=0,Q=0,E=0;if(h=g=h-32|0,!(!A|!i[A+28>>2]))for(i[g+16>>2]=I,B=1;;){if(C[g+24|0]=Q,I=0,E=0,B)for(;i[g+28>>2]=0,B=i[g+28>>2],i[g+8>>2]=i[g+24>>2],i[g+12>>2]=B,i[g+20>>2]=I,B=i[g+20>>2],i[g>>2]=i[g+16>>2],i[g+4>>2]=B,$(A,g),(I=I+1|0)>>>0<(E=i[A+28>>2])>>>0;);if(B=E,4==(0|(Q=Q+1|0)))break}h=g+32|0}function _A(A,I,g,B,Q,C,E,n,a,r,o){var e;return h=e=h-336|0,_g(e+16|0,64,r,o),lg(e+80|0,e+16|0),fI(e+16|0,64),yg(e+80|0,E,n,a),yg(e+80|0,34688,0-n&15,0),BI(A,B,Q,C,r,1,o),yg(e+80|0,A,Q,C),yg(e+80|0,34688,0-Q&15,0),tI(e+8|0,n,a),yg(e+80|0,e+8|0,8,0),tI(e+8|0,Q,C),yg(e+80|0,e+8|0,8,0),Fg(e+80|0,I),fI(e+80|0,256),g&&(i[g>>2]=16,i[g+4>>2]=0),h=e+336|0,0}function HA(A,I,g,B,Q,C,E,i,n,a){var r;return h=r=h-352|0,og(r+32|0,n,a),lg(r+96|0,r+32|0),fI(r+32|0,64),yg(r+96|0,C,E,i),tI(r+24|0,E,i),yg(r+96|0,r+24|0,8,0),yg(r+96|0,I,g,B),tI(r+24|0,g,B),yg(r+96|0,r+24|0,8,0),Fg(r+96|0,r),fI(r+96|0,256),Q=kg(r,Q),fI(r,16),A&&(Q?(EA(A,0,g),Q=-1):(NI(A,I,g,B,n,a),Q=0)),h=r+352|0,Q}function YA(A){var I=0,g=0,B=0;A:{I:if(3&(I=A)){if(!n[0|A])return 0;for(;;){if(!(3&(I=I+1|0)))break I;if(!n[0|I])break}break A}for(;g=I,I=I+4|0,!((-1^(B=i[g>>2]))&B-16843009&-2139062144););if(!(255&B))return g-A|0;for(;B=n[g+1|0],g=I=g+1|0,B;);}return I-A|0}function bA(A,I){var g,B=0,Q=0,C=0,E=0,a=0;A:if(!(((g=n[0|A])-48&255)>>>0>9)){for(Q=g,B=A;;){if(E=B,C>>>0>429496729)break A;if((Q=(255&Q)-48|0)>>>0>(-1^(B=r(C,10)))>>>0)break A;if(C=B+Q|0,!(((Q=n[0|(B=E+1|0)])-48&255)>>>0<10))break}(0|A)==(0|B)|(48==(0|g)?(0|A)!=(0|E):0)||(i[I>>2]=C,a=B)}return a}function mA(A,I){var g,B,Q,C,E,n,a,r,o;g=i[I+4>>2],B=i[I+8>>2],Q=i[I+12>>2],C=i[I+16>>2],E=i[I+20>>2],n=i[I+24>>2],a=i[I+28>>2],r=i[I+32>>2],o=i[I+36>>2],i[A>>2]=0-i[I>>2],i[A+36>>2]=0-o,i[A+32>>2]=0-r,i[A+28>>2]=0-a,i[A+24>>2]=0-n,i[A+20>>2]=0-E,i[A+16>>2]=0-C,i[A+12>>2]=0-Q,i[A+8>>2]=0-B,i[A+4>>2]=0-g}function vA(A,I,g){var B=0;B=I<<8&16711680|I<<24,B|=255&(g<<8|I>>>24)|65280&(g<<24|I>>>8),I=-16777216&((255&g)<<24|I>>>8)|16711680&((16777215&g)<<8|I>>>24)|g>>>8&65280|g>>>24|0,C[0|A]=I,C[A+1|0]=I>>>8,C[A+2|0]=I>>>16,C[A+3|0]=I>>>24,I=B,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24}function UA(A,I,g){var B;B=A,g?(i[A+48>>2]=n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,g=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24):(i[A+48>>2]=0,g=0),i[B+52>>2]=g,i[A+56>>2]=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,i[A+60>>2]=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24}function SA(A,I){var g,B,Q,C,E,n,a,r,o;g=i[I+8>>2],B=i[I+12>>2],Q=i[I+16>>2],C=i[I+20>>2],E=i[I+24>>2],n=i[I+28>>2],a=i[I>>2],r=i[I+4>>2],o=i[I+36>>2],i[A+32>>2]=i[I+32>>2],i[A+36>>2]=o,i[A+24>>2]=E,i[A+28>>2]=n,i[A+16>>2]=Q,i[A+20>>2]=C,i[A+8>>2]=g,i[A+12>>2]=B,i[A>>2]=a,i[A+4>>2]=r}function NA(A,I,g,B,Q,C,E,a,r,o,e){var t;return h=t=h-48|0,i[t+8>>2]=0,i[t>>2]=0,i[t+4>>2]=0,x(t+16|0,o,e),e=n[o+16|0]|n[o+17|0]<<8|n[o+18|0]<<16|n[o+19|0]<<24,o=n[o+20|0]|n[o+21|0]<<8|n[o+22|0]<<16|n[o+23|0]<<24,i[t+4>>2]=e,i[t+8>>2]=o,function(A,I,g,B,Q,C,E,n,a,r,o){var e;h=e=h-336|0,rg(e+16|0,64,r,o),lg(e+80|0,e+16|0),fI(e+16|0,64),yg(e+80|0,E,n,a),yg(e+80|0,34704,0-n&15,0),SI(A,B,Q,C,r,1,o),yg(e+80|0,A,Q,C),yg(e+80|0,34704,0-Q&15,0),tI(e+8|0,n,a),yg(e+80|0,e+8|0,8,0),tI(e+8|0,Q,C),yg(e+80|0,e+8|0,8,0),Fg(e+80|0,I),fI(e+80|0,256),g&&(i[g>>2]=16,i[g+4>>2]=0),h=e+336|0}(A,I,g,B,Q,C,E,a,r,t,t+16|0),fI(t+16|0,32),h=t+48|0,0}function MA(A,I,g,B,Q,C,E,a,r,o){var e;return h=e=h-48|0,i[e+8>>2]=0,i[e>>2]=0,i[e+4>>2]=0,x(e+16|0,r,o),o=n[r+16|0]|n[r+17|0]<<8|n[r+18|0]<<16|n[r+19|0]<<24,r=n[r+20|0]|n[r+21|0]<<8|n[r+22|0]<<16|n[r+23|0]<<24,i[e+4>>2]=o,i[e+8>>2]=r,A=function(A,I,g,B,Q,C,E,i,n,a){var r;return h=r=h-352|0,rg(r+32|0,64,n,a),lg(r+96|0,r+32|0),fI(r+32|0,64),yg(r+96|0,C,E,i),yg(r+96|0,34704,0-E&15,0),yg(r+96|0,I,g,B),yg(r+96|0,34704,0-g&15,0),tI(r+24|0,E,i),yg(r+96|0,r+24|0,8,0),tI(r+24|0,g,B),yg(r+96|0,r+24|0,8,0),Fg(r+96|0,r),fI(r+96|0,256),Q=kg(r,Q),fI(r,16),A&&(Q?(EA(A,0,g),Q=-1):(SI(A,I,g,B,n,1,a),Q=0)),h=r+352|0,Q}(A,I,g,B,Q,C,E,a,e,e+16|0),fI(e+16|0,32),h=e+48|0,A}function dA(A){var I;return I=n[0|A]|n[A+1|0]<<8|n[A+2|0]<<16|n[A+3|0]<<24,A=n[A+4|0]|n[A+5|0]<<8|n[A+6|0]<<16|n[A+7|0]<<24,p=65280&(A<<24|I>>>8)|255&(A<<8|I>>>24)|I<<8&16711680|I<<24,-16777216&((255&A)<<24|I>>>8)|16711680&((16777215&A)<<8|I>>>24)|A>>>8&65280|A>>>24|0}function PA(A,I,g,B,Q,C,E,n,a,r,o){var e;return h=e=h-336|0,og(e+16|0,r,o),lg(e+80|0,e+16|0),fI(e+16|0,64),yg(e+80|0,E,n,a),tI(e+8|0,n,a),yg(e+80|0,e+8|0,8,0),NI(A,B,Q,C,r,o),yg(e+80|0,A,Q,C),tI(e+8|0,Q,C),yg(e+80|0,e+8|0,8,0),Fg(e+80|0,I),fI(e+80|0,256),g&&(i[g>>2]=16,i[g+4>>2]=0),h=e+336|0,0}function RA(A,I,g,B){var Q;if(h=Q=h-192|0,!(!g|(I-1&255)>>>0>=64|(B-1&255)>>>0>=64))return E[Q+130>>1]=257,C[Q+129|0]=B,C[Q+128|0]=I,WI(Q+128|4),tI(Q+128|8,0,0),EA(Q+144|0,0,48),hA(A,Q+128|0),EA(B+Q|0,0,128-B|0),QA(I=A,A=X(Q,g,B),128,0),fI(A,128),h=A+192|0,0;OI(),e()}function JA(A,I,g){i[A+48>>2]=g?n[0|g]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24:0,i[A+52>>2]=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,i[A+56>>2]=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,i[A+60>>2]=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24}function xA(A,I,g,B,Q,C,E){var n;return h=n=h-16|0,A=EA(A,0,128),E>>>0<2147483649&&!(B|C)?E>>>0>8191&&Q|C?(cI(n,16),A=pA(Q,E>>>10|0,1,I,g,n,16,0,32,A,128,2)?-1:0):(i[8960]=28,A=-1):(i[8960]=22,A=-1),h=n+16|0,A}function LA(A){var I=0;return(0-(I=A+4&(A+65488>>>8^-1)&(57-A>>>8^-1)&255|((I=A-65|0)>>>8^-1)&I&(90-A>>>8^-1)&255|A+185&(A+65439>>>8^-1)&(122-A>>>8^-1)&255|63&(1+(16288^A)>>>8^-1)|62&(1+(16338^A)>>>8^-1))>>>8^-1)&1+(65470^A)>>>8&255|I}function KA(A){var I=0;return(0-(I=A+4&(A+65488>>>8^-1)&(57-A>>>8^-1)&255|((I=A-65|0)>>>8^-1)&I&(90-A>>>8^-1)&255|A+185&(A+65439>>>8^-1)&(122-A>>>8^-1)&255|63&(1+(16336^A)>>>8^-1)|62&(1+(16340^A)>>>8^-1))>>>8^-1)&1+(65470^A)>>>8&255|I}function qA(A,I){var g,B,Q=0,E=0,i=0,n=0;for(h=g=h-16|0,Q=10;n=Q,i=(I>>>0)/10|0,C[0|(E=(Q=Q-1|0)+(g+6|0)|0)]=I-r(i,10)|48,!(I>>>0<10)&&(I=i,Q););B=X(I=A,E,A=11-n|0)+A|0,C[0|B]=0,h=g+16|0}function XA(A,I,g){var B=0,Q=0,C=0;if(!g)return 0;A:if(B=n[0|A]){for(;;){if((0|(Q=n[0|I]))==(0|B)&&!(!(g=g-1|0)|!Q)){if(I=I+1|0,B=n[A+1|0],A=A+1|0,B)continue;break A}break}C=B}return(255&C)-n[0|I]|0}function VA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g),_(B,B,g+40|0),_(C=A+120|0,g+120|0,I+120|0),_(A,I+80|0,g+80|0),sA(Q,A,A),yA(A,E,B),sA(B,E,B),sA(E,Q,C),yA(C,Q,C),h=Q+48|0}function WA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g+40|0),_(B,B,g),_(C=A+120|0,g+120|0,I+120|0),_(A,I+80|0,g+80|0),sA(Q,A,A),yA(A,E,B),sA(B,E,B),yA(E,Q,C),sA(C,Q,C),h=Q+48|0}function TA(A,I){for(var g=0,B=0,Q=0,C=0;Q=(g=B<<3)+A|0,C=n[0|(g=I+g|0)]|n[g+1|0]<<8|n[g+2|0]<<16|n[g+3|0]<<24,g=n[g+4|0]|n[g+5|0]<<8|n[g+6|0]<<16|n[g+7|0]<<24,i[Q>>2]=C,i[Q+4>>2]=g,128!=(0|(B=B+1|0)););}function jA(A,I,g){var B;if(i[12+(B=h-16|0)>>2]=A,i[B+8>>2]=I,I=0,i[B+4>>2]=0,(0|g)>=1)for(;i[B+4>>2]=i[B+4>>2]|n[i[B+8>>2]+I|0]^n[i[B+12>>2]+I|0],(0|g)!=(0|(I=I+1|0)););return(i[B+4>>2]-1>>>8&1)-1|0}function ZA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g+40|0),_(B,B,g),_(C=A+120|0,g+80|0,I+120|0),sA(Q,I=I+80|0,I),yA(A,E,B),sA(B,E,B),yA(E,Q,C),sA(C,Q,C),h=Q+48|0}function OA(A,I,g){var B,Q,C,E=0;h=Q=h-48|0,sA(A,E=I+40|0,I),yA(B=A+40|0,E,I),_(E=A+80|0,A,g),_(B,B,g+40|0),_(C=A+120|0,g+80|0,I+120|0),sA(Q,I=I+80|0,I),yA(A,E,B),sA(B,E,B),sA(E,Q,C),yA(C,Q,C),h=Q+48|0}function zA(A,I,g){var B;if(i[12+(B=h-16|0)>>2]=A,i[B+8>>2]=I,I=0,C[B+7|0]=0,g)for(;C[B+7|0]=n[B+7|0]|n[i[B+8>>2]+I|0]^n[i[B+12>>2]+I|0],(0|g)!=(0|(I=I+1|0)););return(n[B+7|0]-1>>>8&1)-1|0}function $A(A,I,g){var B,Q=0,E=0;if(h=B=h-16|0,C[B+15|0]=0,E=-1,!(0|Vg[i[8950]](A,I,g))){for(;C[B+15|0]=n[A+Q|0]|n[B+15|0],32!=(0|(Q=Q+1|0)););E=0-(n[B+15|0]-1>>>8&1)|0}return h=B+16|0,E}function AI(A,I){var g,B,Q,C,E;h=B=h-48|0,H(A,I),H(g=A+80|0,E=I+40|0),function(A,I){var g,B,Q,C,E,n,a,o,e,t,f,c,y,s,w,h,D,u,l,F,G,k,_,H,Y,b,m,v,U,S,N,M,d,P,R,J,x,L,K=0,q=0,X=0,V=0,W=0,T=0,j=0,Z=0,O=0,z=0,$=0,AA=0,IA=0,gA=0,BA=0,QA=0,CA=0,EA=0,iA=0,nA=0;E=K=(W=i[I+12>>2])<<1,n=K>>31,a=K=(O=i[I+4>>2])<<1,K=eg(E,n,K,g=K>>31),X=p,q=K,k=K=gA=i[I+8>>2],V=eg(K,z=K>>31,K,z),K=p+X|0,K=(q=q+V|0)>>>0>>0?K+1|0:K,V=q,B=q=BA=i[I+16>>2],o=q>>31,e=q=(QA=i[I>>2])<<1,X=eg(B,o,q,Q=q>>31),K=p+K|0,K=(q=V+X|0)>>>0>>0?K+1|0:K,j=q,X=i[I+28>>2],l=q=r(X,38),U=X,V=eg(q,h=q>>31,X,_=X>>31),K=p+K|0,K=(q=j+V|0)>>>0>>0?K+1|0:K,T=q,j=i[I+32>>2],Z=eg(f=q=r(j,19),c=q>>31,q=(V=i[I+24>>2])<<1,q>>31),q=p+K|0,q=Z>>>0>($=T+Z|0)>>>0?q+1|0:q,T=$,IA=i[I+36>>2],t=K=r(IA,38),C=K>>31,D=I=($=i[I+20>>2])<<1,Z=eg(K,C,I,s=I>>31),I=p+q|0,H=(K=T+Z|0)<<1,P=K=(K>>>0>>0?I+1|0:I)<<1|K>>>31,S=I=H+33554432|0,R=K=I>>>0<33554432?K+1|0:K,I=K>>26,K=(67108863&K)<<6|S>>>26,q=eg(a,g,B,o),Z=p,T=K,u=K=gA<<1,CA=W,W=eg(K,w=K>>31,W,Y=W>>31),K=p+Z|0,K=(q=W+q|0)>>>0>>0?K+1|0:K,gA=$,W=(Z=eg($,F=$>>31,e,Q))+q|0,q=p+K|0,q=W>>>0>>0?q+1|0:q,BA=W,N=K=X<<1,W=eg(f,c,K,b=K>>31),K=p+q|0,K=(X=BA+W|0)>>>0>>0?K+1|0:K,q=X,W=V,X=eg(t,C,V,y=V>>31),K=p+K|0,K=(q=q+X|0)>>>0>>0?K+1|0:K,X=q,I=I+(q=K<<1|q>>>31)|0,EA=K=T+(X<<=1)|0,K=K>>>0>>0?I+1|0:I,J=I=EA+16777216|0,I=(33554431&(K=I>>>0<16777216?K+1|0:K))<<7|I>>>25,X=K>>25,K=eg(E,n,CA,Y),q=p,T=I,I=(Z=eg(B,o,u,w))+K|0,K=p+q|0,K=I>>>0>>0?K+1|0:K,q=eg(a,g,D,s),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(Z=eg(e,Q,V,y))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,Z=j,j=eg(f,c,j,G=j>>31),K=p+I|0,K=(q=j+q|0)>>>0>>0?K+1|0:K,I=(j=eg(t,C,N,b))+q|0,q=p+K|0,I=((K=I)>>>0>>0?q+1|0:q)<<1|K>>>31,j=K<<1,K=I+X|0,K=(q=T+j|0)>>>0>>0?K+1|0:K,iA=q=(I=q)+33554432|0,X=K=q>>>0<33554432?K+1|0:K,K=-67108864&q,i[A+24>>2]=I-K,j=A,I=eg(I=r($,38),I>>31,$,F),K=p,T=I,$=eg(I=QA,q=I>>31,I,q),q=p+K|0,q=(I=T+$|0)>>>0<$>>>0?q+1|0:q,K=I,AA=I=r(V,19),m=I>>31,M=I=B<<1,I=K+(V=eg(AA,m,I,v=I>>31))|0,K=p+q|0,K=I>>>0>>0?K+1|0:K,q=eg(E,n,l,h),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(V=eg(f,c,u,w))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,V=eg(a,g,t,C),K=p+I|0,x=K=((I=q=V+q|0)>>>0>>0?K+1|0:K)<<1|I>>>31,QA=I=33554432+($=I<<1)|0,BA=q=I>>>0<33554432?K+1|0:K,I=(67108863&q)<<6|I>>>26,V=q>>26,K=eg(AA,m,D,s),q=p,nA=I,I=(O=eg(e,Q,T=O,d=T>>31))+K|0,K=p+q|0,K=I>>>0>>0?K+1|0:K,q=(O=eg(B,o,l,h))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,O=eg(f,c,E,n),K=p+I|0,K=(q=O+q|0)>>>0>>0?K+1|0:K,I=(O=eg(t,C,k,z))+q|0,q=p+K|0,I=((K=I)>>>0>>0?q+1|0:q)<<1|K>>>31,O=K<<1,K=I+V|0,K=(q=nA+O|0)>>>0>>0?K+1|0:K,O=q,(I=q+16777216|0)>>>0<16777216&&(K=K+1|0),nA=I,q=I,I=K>>25,K=(33554431&K)<<7|q>>>25,V=I,I=eg(e,Q,k,z),q=p,L=K,T=eg(a,g,T,d),K=p+q|0,K=(I=T+I|0)>>>0>>0?K+1|0:K,T=eg(AA,m,W,y),q=p+K|0,q=(I=T+I|0)>>>0>>0?q+1|0:q,T=eg(D,s,l,h),K=p+q|0,K=(I=T+I|0)>>>0>>0?K+1|0:K,q=eg(f,c,M,v),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(T=eg(t,C,E,n))+I|0,I=p+K|0,K=(K=(I=q>>>0>>0?I+1|0:I)<<1|q>>>31)+V|0,q=K=(I=L+(q<<=1)|0)>>>0>>0?K+1|0:K,T=K=I+33554432|0,V=q=K>>>0<33554432?q+1|0:q,K&=-67108864,i[j+8>>2]=I-K,I=eg(u,w,gA,F),q=p,K=(AA=eg(B,o,E,n))+I|0,I=p+q|0,I=K>>>0>>0?I+1|0:I,q=(AA=eg(a,g,W,y))+K|0,K=p+I|0,K=q>>>0>>0?K+1|0:K,I=(AA=eg(e,Q,U,_))+q|0,q=p+K|0,q=I>>>0>>0?q+1|0:q,AA=eg(t,C,Z,G),K=p+q|0,K=(K=(K=(I=AA+I|0)>>>0>>0?K+1|0:K)<<1|I>>>31)+(q=X>>26)|0,q=I=(X=(67108863&X)<<6|iA>>>26)+(I<<1)|0,I=K=I>>>0>>0?K+1|0:K,iA=K=q+16777216|0,X=I=K>>>0<16777216?I+1|0:I,I=-33554432&K,i[j+28>>2]=q-I,I=eg(e,Q,CA,Y),K=p,q=eg(a,g,k,z),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(W,y,l,h),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(z=eg(f,c,D,s))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,K=(z=eg(t,C,B,o))+q|0,q=p+I|0,I=K,K=(K>>>0>>0?q+1|0:q)<<1|K>>>31,q=I<<1,K=(I=V>>26)+K|0,K=(q=q+(V=(67108863&V)<<6|T>>>26)|0)>>>0>>0?K+1|0:K,CA=q=(I=q)+16777216|0,V=K=q>>>0<16777216?K+1|0:K,K=-33554432&q,i[j+12>>2]=I-K,z=A,I=eg(W,y,u,w),K=p,q=eg(B,o,B,o),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(E,n,D,s),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=eg(a,g,N,b),K=p+K|0,K=(I=q+I|0)>>>0>>0?K+1|0:K,q=(j=eg(e,Q,Z,G))+I|0,I=p+K|0,I=q>>>0>>0?I+1|0:I,K=(IA=eg(t,C,j=IA,T=j>>31))+q|0,q=p+I|0,A=(I=K)<<1,K=(I=X>>25)+(K=(K>>>0>>0?q+1|0:q)<<1|K>>>31)|0,K=(q=A+(X=(33554431&X)<<7|iA>>>25)|0)>>>0>>0?K+1|0:K,IA=q=(I=q)+33554432|0,X=K=q>>>0<33554432?K+1|0:K,K=-67108864&q,i[z+32>>2]=I-K,K=V>>25,q=(V=(33554431&V)<<7|CA>>>25)+(H-(I=-67108864&S)|0)|0,I=K+(P-((I>>>0>H>>>0)+R|0)|0)|0,K=I=q>>>0>>0?I+1|0:I,V=I=q+33554432|0,I=((67108863&(K=I>>>0<33554432?K+1|0:K))<<6|I>>>26)+(EA=EA-(-33554432&J)|0)|0,i[z+20>>2]=I,I=-67108864&V,i[z+16>>2]=q-I,I=eg(E,n,W,y),q=p,K=(W=eg(gA,F,M,v))+I|0,I=p+q|0,I=K>>>0>>0?I+1|0:I,q=(W=eg(u,w,U,_))+K|0,K=p+I|0,K=q>>>0>>0?K+1|0:K,I=(W=eg(a,g,Z,G))+q|0,q=p+K|0,q=I>>>0>>0?q+1|0:q,W=eg(e,Q,j,T),K=p+q|0,K=(K=(K=(I=W+I|0)>>>0>>0?K+1|0:K)<<1|I>>>31)+(q=X>>26)|0,K=(I=(X=(67108863&X)<<6|IA>>>26)+(I<<1)|0)>>>0>>0?K+1|0:K,q=I,X=I,I=K,I=(K=q+16777216|0)>>>0<16777216?I+1|0:I,q=-33554432&K,i[z+36>>2]=X-q,V=O-(-33554432&nA)|0,I=(K=eg((33554431&I)<<7|K>>>25,I>>25,19,0))+($-(q=-67108864&QA)|0)|0,q=p+(x-((q>>>0>$>>>0)+BA|0)|0)|0,q=I>>>0>>0?q+1|0:q,K=I,I=q,I=((67108863&(I=(q=K+33554432|0)>>>0<33554432?I+1|0:I))<<6|q>>>26)+V|0,i[z+4>>2]=I,A=-67108864&q,i[z>>2]=K-A}(C=A+120|0,I+80|0),sA(Q=A+40|0,I,E),H(B,Q),sA(Q,g,A),yA(g,g,A),yA(A,B,Q),yA(C,C,g),h=B+48|0}function II(A){var I,g;return(A=(I=i[8943])+(g=A+3&-4)|0)>>>0<=I>>>0&&(0|g)>=1||A>>>0>Wg()<<16>>>0&&!(0|w(0|A))?(i[8960]=48,-1):(i[8943]=A,I)}function gI(A,I){var g;return h=g=h+-64|0,(I-1&255)>>>0>=64&&(OI(),e()),C[g+3|0]=1,C[g+1|0]=0,C[g+2|0]=1,C[0|g]=I,WI(4|g),tI(8|g,0,0),EA(g+16|0,0,48),hA(A,g),h=g- -64|0,0}function BI(A,I,g,B,Q,C,E){var i=0,n=0;i=B,1==(((i=(n=g+63|0)>>>0<63?i+1|0:i)>>>6|0)+(0!=(0|(i=(63&i)<<26|n>>>6)))|0)&(n=0-i|0)>>>0>>0&&(OI(),e()),SI(A,I,g,B,Q,C,E)}function QI(A,I){for(var g=0,B=0,Q=0,C=0;B=(g=Q<<3)+A|0,C=i[(g=I+g|0)>>2],g=i[B+4>>2]^i[g+4>>2],i[B>>2]=i[B>>2]^C,i[B+4>>2]=g,128!=(0|(Q=Q+1|0)););}function CI(A){var I,g;return 95&(1+(32704^A)>>>8^-1)|45&(1+(16321^A)>>>8^-1)|(I=A+65510>>>8&255)&A+65|(g=A+65484>>>8|0)&A+71&(255^I)|A+252&A+65474>>>8&(-1^g)&255}function EI(A){var I,g;return 47&(1+(16320^A)>>>8^-1)|43&(1+(16321^A)>>>8^-1)|(I=A+65510>>>8&255)&A+65|(g=A+65484>>>8|0)&A+71&(255^I)|A+252&A+65474>>>8&(-1^g)&255}function iI(A,I,g,B){var Q=0;Q=-1;A:if(!(g>>>0>64|B-1>>>0>63)){I:{if(!g||!I){if(!gI(A,255&B))break I;break A}if(RA(A,255&B,I,255&g))break A}Q=0}return Q}function nI(A,I){var g,B,Q;h=g=h-144|0,j(g+96|0,I+80|0),_(g+48|0,I,g+96|0),_(g,I+40|0,g+96|0),BA(A,g),B=A,Q=KI(g+48|0)<<7^n[A+31|0],C[B+31|0]=Q,h=g+144|0}function aI(A,I){var g,B=0;if(C[15+(g=h-16|0)|0]=0,I)for(;C[g+15|0]=n[A+B|0]|n[g+15|0],(0|(B=B+1|0))!=(0|I););return n[g+15|0]-1>>>8&1}function rI(A,I,g,B){var Q;return B=I+B|0,B=(Q=A+g|0)>>>0>>0?B+1|0:B,g=eg(A<<1&-2,1&(I=I<<1|A>>>31),g,0),A=p+B|0,p=A=(I=g+Q|0)>>>0>>0?A+1|0:A,I}function oI(A,I,g){var B,Q=0;if(B=g>>>3|0)for(g=0;vA((Q=g<<3)+A|0,i[(Q=I+Q|0)>>2],i[Q+4>>2]),(0|B)!=(0|(g=g+1|0)););}function eI(A,I){var g=0;!function(A,I){I&&((I=i[A>>2])&&fI(i[I+4>>2],i[A+16>>2]<<10),(I=i[A+4>>2])&&fI(I,i[A+20>>2]<<3))}(A,4&I),m(i[A+4>>2]),i[A+4>>2]=0,(I=i[A>>2])&&(g=i[I>>2])&&m(g),m(I),i[A>>2]=0}function tI(A,I,g){C[0|A]=I,C[A+1|0]=I>>>8,C[A+2|0]=I>>>16,C[A+3|0]=I>>>24,C[A+4|0]=g,C[A+5|0]=g>>>8,C[A+6|0]=g>>>16,C[A+7|0]=g>>>24}function fI(A,I){var g;if(i[12+(g=h-16|0)>>2]=A,I)for(A=0;C[i[g+12>>2]+A|0]=0,(0|I)!=(0|(A=A+1|0)););}function cI(A,I){A|=0;var g=0,B=0,Q=0;if(I|=0)for(;B=A+g|0,Q=YI(),C[0|B]=Q,(0|(g=g+1|0))!=(0|I););}function yI(A,I,g,B,Q){var C,E;return A|=0,I|=0,g|=0,B|=0,h=C=(E=h)-128&-64,IA(C,Q|=0),z(C,I,g,B),Z(C,A),h=E,0}function sI(A){var I=0,g=0,B=0;for(I=1;I=n[0|(B=A+g|0)]+I|0,C[0|B]=I,I=I>>>8|0,4!=(0|(g=g+1|0)););}function wI(A,I,g,B,Q,C,E,i){var n,a=0;return h=n=h-32|0,a=-1,jI(n,E,i)||(a=Qg(A,I,g,B,Q,C,n),fI(n,32)),h=n+32|0,a}function hI(A,I,g,B,Q,C,E,i){var n,a=0;return h=n=h-32|0,a=-1,jI(n,E,i)||(a=Cg(A,I,g,B,Q,C,n),fI(n,32)),h=n+32|0,a}function DI(A,I){var g,B,Q;_(A,I,g=I+120|0),_(A+40|0,B=I+40|0,Q=I+80|0),_(A+80|0,Q,g),_(A+120|0,I,B)}function uI(A,I,g,B,Q,C,E){return!B&g>>>0>=16|B?hI(A,I+16|0,I,g-16|0,B-(g>>>0<16)|0,Q,C,E):-1}function pI(A,I){for(var g=0,B=0;C[0|(B=A+g|0)]=n[0|B]^n[I+g|0],8!=(0|(g=g+1|0)););}function lI(A,I,g){var B,Q;h=B=(Q=h)-384&-64,qI(B,0,0,24),sg(B,I,32,0),sg(B,g,32,0),TI(B,A,24),h=Q}function FI(A,I){var g;sA(A,g=I+40|0,I),yA(A+40|0,g,I),SA(A+80|0,I+80|0),_(A+120|0,I+120|0,2224)}function GI(A,I,g,B,Q,C,E){return I-1>>>0>63|E>>>0>64?-1:function(A,I,g,B,Q,C,E){var i,n=0;if(i=n=h,h=n=n-384&-64,!(!A|(B-1&255)>>>0>=64|(Q|C?!I:0)|E>>>0>=65|(E?!g:0)))return E?RA(n,B,g,E):gI(n,B),QA(n,I,Q,C),M(n,A,B),h=i,0;OI(),e()}(A,g,C,255&I,B,Q,255&E)}function kI(A,I,g,B,Q,C,E){return!B&g>>>0>=4294967280|B&&(OI(),e()),wI(A+16|0,A,I,g,B,Q,C,E)}function _I(A,I){var g;_(A,I,g=I+120|0),_(A+40|0,I+40|0,I=I+80|0),_(A+80|0,I,g)}function HI(A){var I;return I=n[0|A]|n[A+1|0]<<8,A=n[A+2|0],p=A>>>16|0,I|A<<16}function YI(){var A,I;return h=A=h-16|0,C[A+15|0]=0,I=0|f(1024,A+15|0,0),h=A+16|0,0|I}function bI(A,I,g,B,Q){var E;return h=E=h-416|0,function(A,I){var g,B=0,Q=0;for(h=g=h-192|0,MI(A),EA(g- -64|0,54,128),C[g+64|0]=54^n[0|I],B=1;C[0|(Q=(g- -64|0)+B|0)]=n[0|Q]^n[I+B|0],32!=(0|(B=B+1|0)););for(V(A,g- -64|0,128,0),MI(A=A+208|0),EA(g- -64|0,92,128),C[g+64|0]=92^n[0|I],B=1;C[0|(Q=(g- -64|0)+B|0)]=n[0|Q]^n[I+B|0],32!=(0|(B=B+1|0)););V(A,g- -64|0,128,0),fI(g- -64|0,128),fI(g,64),h=g+192|0}(E,Q),V(E,I,g,B),function(A,I){var g,B=0;h=g=h+-64|0,function(A,I){var g;h=g=h+-64|0,UI(A,g),V(A=A+208|0,g,64,0),UI(A,I),fI(g,64),h=g- -64|0}(A,g),B=i[g+28>>2],A=i[g+24>>2],C[I+24|0]=A,C[I+25|0]=A>>>8,C[I+26|0]=A>>>16,C[I+27|0]=A>>>24,C[I+28|0]=B,C[I+29|0]=B>>>8,C[I+30|0]=B>>>16,C[I+31|0]=B>>>24,B=i[g+20>>2],A=i[g+16>>2],C[I+16|0]=A,C[I+17|0]=A>>>8,C[I+18|0]=A>>>16,C[I+19|0]=A>>>24,C[I+20|0]=B,C[I+21|0]=B>>>8,C[I+22|0]=B>>>16,C[I+23|0]=B>>>24,B=i[g+12>>2],A=i[g+8>>2],C[I+8|0]=A,C[I+9|0]=A>>>8,C[I+10|0]=A>>>16,C[I+11|0]=A>>>24,C[I+12|0]=B,C[I+13|0]=B>>>8,C[I+14|0]=B>>>16,C[I+15|0]=B>>>24,B=i[g+4>>2],A=i[g>>2],C[0|I]=A,C[I+1|0]=A>>>8,C[I+2|0]=A>>>16,C[I+3|0]=A>>>24,C[I+4|0]=B,C[I+5|0]=B>>>8,C[I+6|0]=B>>>16,C[I+7|0]=B>>>24,h=g- -64|0}(E,A),h=E+416|0,0}function mI(A,I,g,B){var Q;return h=Q=h-208|0,MI(Q),V(Q,I,g,B),UI(Q,A),h=Q+208|0,0}function vI(A,I){var g=0;return(-1>>>(g=31&I)&A)<>>A}function UI(A,I){var g;h=g=h-704|0,function(A,I){var g,B=0;(g=i[A+72>>2]>>>3&127)>>>0<=111?X(80+(A+g|0)|0,35424,112-g|0):(X((B=A+80|0)+g|0,35424,128-g|0),F(A,B,I,I+640|0),EA(B,0,112)),oI(A+192|0,A- -64|0,16),F(A,A+80|0,I,I+640|0)}(A,g),oI(I,A,64),fI(g,704),fI(A,208),h=g+704|0}function SI(A,I,g,B,Q,C,E){1==(0|B)|B>>>0>1&&(OI(),e()),Vg[i[8957]](A,I,g,B,Q,C,E)}function NI(A,I,g,B,Q,C){1==(0|B)|B>>>0>1&&(OI(),e()),Vg[i[8956]](A,I,g,B,Q,1,0,C)}function MI(A){i[A+64>>2]=0,i[A+68>>2]=0,i[A+72>>2]=0,i[A+76>>2]=0,X(A,34720,64)}function dI(A,I,g){return g>>>0>=256&&(t(2016,2036,107,2089),e()),M(A,I,255&g)}function PI(){var A;h=A=h-16|0,C[A+15|0]=0,f(1062,A+15|0,0),h=A+16|0}function RI(A){var I;return h=I=h-32|0,BA(I,A),A=aI(I,32),h=I+32|0,A}function JI(A,I){var g;h=g=h-128|0,function(A,I){SA(A,I),SA(A+40|0,I+40|0),SA(A+80|0,I+80|0)}(g+8|0,I),AI(A,g+8|0),h=g+128|0}function xI(A,I){C[0|A]=I,C[A+1|0]=I>>>8,C[A+2|0]=I>>>16,C[A+3|0]=I>>>24}function LI(A,I,g){eA(A,I,g),eA(A+40|0,I+40|0,g),eA(A+80|0,I+80|0,g)}function KI(A){var I;return h=I=h-32|0,BA(I,A),h=I+32|0,1&C[0|I]}function qI(A,I,g,B){return 0|iI(A|=0,I|=0,g|=0,B|=0)}function XI(A){C[A+32|0]=1,C[A+33|0]=0,C[A+34|0]=0,C[A+35|0]=0}function VI(A){i[A>>2]=0,i[A+4>>2]=0,i[A+8>>2]=0,i[A+12>>2]=0}function WI(A){C[0|A]=0,C[A+1|0]=0,C[A+2|0]=0,C[A+3|0]=0}function TI(A,I,g){return 0|dI(A|=0,I|=0,g|=0)}function jI(A,I,g){return 0|function(A,I,g){var B,Q=0;return h=B=h-32|0,Q=-1,$A(B,g,I)||(Q=K(A,35552,B)),h=B+32|0,Q}(A|=0,I|=0,g|=0)}function ZI(A,I,g){return 0|$A(A|=0,I|=0,g|=0)}function OI(){var A;(A=i[9105])&&Vg[0|A](),c(),e()}function zI(A){Ug(A),wg(A+40|0),wg(A+80|0),Ug(A+120|0)}function $I(A,I,g,B,Q,C){Vg[i[8953]](A,I,g,B,Q,0,0,C)}function Ag(A,I,g,B,Q,C){Vg[i[8953]](A,I,g,B,Q,1,0,C)}function Ig(A,I){return A|=0,cI(I|=0,32),0|cg(A,I)}function gg(A,I){return A=function(A,I){var g=0,B=0;A:{if(B=255&I){if(3&A)for(;;){if(!(g=n[0|A])|(0|g)==(255&I))break A;if(!(3&(A=A+1|0)))break}I:if(!((-1^(g=i[A>>2]))&g-16843009&-2139062144))for(B=r(B,16843009);;){if((-1^(g^=B))&g-16843009&-2139062144)break I;if(g=i[A+4>>2],A=A+4|0,g-16843009&(-1^g)&-2139062144)break}for(;(B=n[0|(g=A)])&&(A=g+1|0,(0|B)!=(255&I)););return g}return YA(A)+A|0}return A}(A,I),n[0|A]==(255&I)?A:0}function Bg(A,I,g,B,Q,C){return q(A,I,g,B,Q,C,0),0}function Qg(A,I,g,B,Q,C,E){return nA(A,I,g,B,Q,C,E)}function Cg(A,I,g,B,Q,C,E){return rA(A,I,g,B,Q,C,E)}function Eg(A,I,g,B,Q,C,E){return GI(A,I,g,B,Q,C,E)}function ig(A,I){MI(A),I&&V(A,35728,34,0)}function ng(A,I,g,B,Q){return lA(A,I,g,B,Q,0)}function ag(A,I){return 0|cg(A|=0,I|=0)}function rg(A,I,g,B){Vg[i[8955]](A,I,0,g,B)}function og(A,I,g){Vg[i[8954]](A,64,0,I,g)}function eg(A,I,g,B){return function(A,I,g,B){var Q,C,E,i,n=0,a=0;return i=r(n=g>>>16|0,a=A>>>16|0),n=(65535&(a=((E=r(Q=65535&g,C=65535&A))>>>16|0)+r(a,Q)|0))+r(n,C)|0,A=(r(I,g)+i|0)+r(A,B)+(a>>>16)+(n>>>16)|0,p=A,65535&E|n<<16}(A,I,g,B)}function tg(A,I){return(255&(A^I))-1>>>31|0}function fg(A,I,g){!function(A,I,g){var B,Q;h=B=h-128|0,wg(A),wg(A+40|0),Ug(A+80|0),LI(A,I,tg(g=g-((0-(Q=(128&g)>>>7|0)&g)<<1)<<24>>24,1)),LI(A,I+120|0,tg(g,2)),LI(A,I+240|0,tg(g,3)),LI(A,I+360|0,tg(g,4)),LI(A,I+480|0,tg(g,5)),LI(A,I+600|0,tg(g,6)),LI(A,I+720|0,tg(g,7)),LI(A,I+840|0,tg(g,8)),SA(B+8|0,A+40|0),SA(B+48|0,A),mA(B+88|0,A+80|0),LI(A,B+8|0,Q),h=B+128|0}(A,r(I,960)+3488|0,g)}function cg(A,I){return 0|Vg[i[8951]](A,I)}function yg(A,I,g,B){Vg[i[8948]](A,I,g,B)}function sg(A,I,g,B){return hg(A,I,g,B)}function wg(A){i[A>>2]=1,EA(A+4|0,0,36)}function hg(A,I,g,B){return QA(A,I,g,B)}function Dg(A,I,g){return function(A,I,g){var B=0,Q=0,C=0,E=0;return B=31&(C=E=63&g),C>>>0>=32?B=-1>>>B|0:(Q=-1>>>B|0,B=(1<>>B),C=B&A,B=I&Q,Q=31&E,E>>>0>=32?(B=C<>>32-Q|B<>>0>=32?(B=-1<>>32-g|-1<>>0>=32?(g=0,A=B>>>I|0):(g=B>>>I|0,A=((1<>>I),p=g|C,A|E}(A,I,g)}function ug(A,I,g){return function(A,I,g){var B=0,Q=0,C=0,E=0,i=0;return B=31&(E=63&g),E>>>0>=32?(Q=-1<>>32-B|-1<>>0>=32?(Q=0,E=B>>>C|0):(Q=B>>>C|0,E=((1<>>C),i=Q,C=31&(B=0-g&63),B>>>0>=32?(Q=0,g=-1>>>C|0):(Q=-1>>>C|0,g=(1<>>C),A&=g,I&=Q,Q=31&B,B>>>0>=32?(g=A<>>32-Q|I<>>0<18,U=U+2|0,Y;);xI(A,g+1634760805|0),xI(A+4|0,h+B|0),xI(A+8|0,D+Q|0),xI(A+12|0,b+C|0),xI(A+16|0,u+E|0),xI(A+20|0,H+857760878|0),xI(A+24|0,p+e|0),xI(A+28|0,l+t|0),xI(A+32|0,F+f|0),xI(A+36|0,_+c|0),xI(A+40|0,I+2036477234|0),xI(A+44|0,s+i|0),xI(A+48|0,y+a|0),xI(A+52|0,w+r|0),xI(A+56|0,k+o|0),xI(A+60|0,G+1797285236|0)}(A,I,g)}function vg(A){EA(A,0,1024)}function Ug(A){EA(A,0,40)}function Sg(){return 16}function Ng(){return 32}function Mg(){return 24}function dg(){return-17}function Pg(){return 64}function Rg(){return 1}function Jg(){return 2}function xg(){return 8}function Lg(){return 0}function Kg(){return-1}function qg(){return 3}Q(I=n,1024,"InsgcmV0dXJuIE1vZHVsZS5nZXRSYW5kb21WYWx1ZSgpOyB9IgB7IGlmIChNb2R1bGUuZ2V0UmFuZG9tVmFsdWUgPT09IHVuZGVmaW5lZCkgeyB0cnkgeyB2YXIgd2luZG93XyA9ICdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ID8gd2luZG93IDogc2VsZjsgdmFyIGNyeXB0b18gPSB0eXBlb2Ygd2luZG93Xy5jcnlwdG8gIT09ICd1bmRlZmluZWQnID8gd2luZG93Xy5jcnlwdG8gOiB3aW5kb3dfLm1zQ3J5cHRvOyB2YXIgcmFuZG9tVmFsdWVzU3RhbmRhcmQgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IG5ldyBVaW50MzJBcnJheSgxKTsgY3J5cHRvXy5nZXRSYW5kb21WYWx1ZXMoYnVmKTsgcmV0dXJuIGJ1ZlswXSA+Pj4gMDsgfTsgcmFuZG9tVmFsdWVzU3RhbmRhcmQoKTsgTW9kdWxlLmdldFJhbmRvbVZhbHVlID0gcmFuZG9tVmFsdWVzU3RhbmRhcmQ7IH0gY2F0Y2ggKGUpIHsgdHJ5IHsgdmFyIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpOyB2YXIgcmFuZG9tVmFsdWVOb2RlSlMgPSBmdW5jdGlvbigpIHsgdmFyIGJ1ZiA9IGNyeXB0b1sncmFuZG9tQnl0ZXMnXSg0KTsgcmV0dXJuIChidWZbMF0gPDwgMjQgfCBidWZbMV0gPDwgMTYgfCBidWZbMl0gPDwgOCB8IGJ1ZlszXSkgPj4+IDA7IH07IHJhbmRvbVZhbHVlTm9kZUpTKCk7IE1vZHVsZS5nZXRSYW5kb21WYWx1ZSA9IHJhbmRvbVZhbHVlTm9kZUpTOyB9IGNhdGNoIChlKSB7IHRocm93ICdObyBzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm91bmQnOyB9IH0gfSB9AExpYnNvZGl1bURSR2J1Zl9sZW4gPD0gU0laRV9NQVgAcmFuZG9tYnl0ZXMvcmFuZG9tYnl0ZXMuYwByYW5kb21ieXRlcwBTLT5idWZsZW4gPD0gQkxBS0UyQl9CTE9DS0JZVEVTAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9ibGFrZTJiLXJlZi5jAGJsYWtlMmJfZmluYWwAAAAAAAAAAAjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FtvdXRsZW4gPD0gVUlOVDhfTUFYAGNyeXB0b19nZW5lcmljaGFzaC9ibGFrZTJiL3JlZi9nZW5lcmljaGFzaF9ibGFrZTJiLmMAY3J5cHRvX2dlbmVyaWNoYXNoX2JsYWtlMmJfZmluYWwAAAAAAAAAtnhZ/4Vy0wC9bhX/DwpqACnAAQCY6Hn/vDyg/5lxzv8At+L+tA1I/wAAAAAAAAAAsKAO/tPJhv+eGI8Af2k1AGAMvQCn1/v/n0yA/mpl4f8e/AQAkgyu"),Q(I,2224,"WfGy/grlpv973Sr+HhTUAFKAAwAw0fMAd3lA/zLjnP8AbsUBZxuQ"),Q(I,2272,"hTuMAb3xJP/4JcMBYNw3ALdMPv/DQj0AMkykAeGkTP9MPaP/dT4fAFGRQP92QQ4AonPW/waKLgB85vT/CoqPADQawgC49EwAgY8pAb70E/97qnr/YoFEAHnVkwBWZR7/oWebAIxZQ//v5b4BQwu1AMbwif7uRbz/Q5fuABMqbP/lVXEBMkSH/xFqCQAyZwH/UAGoASOYHv8QqLkBOFno/2XS/AAp+kcAzKpP/w4u7/9QTe8AvdZL/xGN+QAmUEz/vlV1AFbkqgCc2NABw8+k/5ZCTP+v4RD/jVBiAUzb8gDGonIALtqYAJsr8f6boGj/M7ulAAIRrwBCVKAB9zoeACNBNf5F7L8ALYb1AaN73QAgbhT/NBelALrWRwDpsGAA8u82ATlZigBTAFT/iKBkAFyOeP5ofL4AtbE+//opVQCYgioBYPz2AJeXP/7vhT4AIDicAC2nvf+OhbMBg1bTALuzlv76qg7/0qNOACU0lwBjTRoA7pzV/9XA0QFJLlQAFEEpATbOTwDJg5L+qm8Y/7EhMv6rJsv/Tvd0ANHdmQCFgLIBOiwZAMknOwG9E/wAMeXSAXW7dQC1s7gBAHLbADBekwD1KTgAfQ3M/vStdwAs3SD+VOoUAPmgxgHsfur/L2Oo/qrimf9ms9gA4o16/3pCmf629YYA4+QZAdY56//YrTj/tefSAHeAnf+BX4j/bn4zAAKpt/8HgmL+RbBe/3QE4wHZ8pH/yq0fAWkBJ/8ur0UA5C86/9fgRf7POEX/EP6L/xfP1P/KFH7/X9Vg/wmwIQDIBc//8SqA/iMhwP/45cQBgRF4APtnl/8HNHD/jDhC/yji9f/ZRiX+rNYJ/0hDhgGSwNb/LCZwAES4S//OWvsAleuNALWqOgB09O8AXJ0CAGatYgDpiWABfzHLAAWblAAXlAn/03oMACKGGv/bzIgAhggp/+BTK/5VGfcAbX8A/qmIMADud9v/563VAM4S/v4Iugf/fgkHAW8qSABvNOz+YD+NAJO/f/7NTsD/DmrtAbvbTACv87v+aVmtAFUZWQGi85QAAnbR/iGeCQCLoy7/XUYoAGwqjv5v/I7/m9+QADPlp/9J/Jv/XnQM/5ig2v+c7iX/s+rP/8UAs/+apI0A4cRoAAojGf7R1PL/Yf3e/rhl5QDeEn8BpIiH/x7PjP6SYfMAgcAa/slUIf9vCk7/k1Gy/wQEGACh7tf/Bo0hADXXDv8ptdD/54udALPL3f//uXEAveKs/3FC1v/KPi3/ZkAI/06uEP6FdUT/"),Q(I,3264,"AQ=="),Q(I,3296,"JuiVj8KyJ7BFw/SJ8u+Y8NXfrAXTxjM5sTgCiG1T/AXHF2pwPU3YT7o8C3YNEGcPKiBT+iw5zMZOx/13kqwDeuz///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////f+3T9VwaYxJY1pz3ot753hQ="),Q(I,3487,"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"),Q(I,34460,"AQ=="),Q(I,34496,"AQ=="),Q(I,34528,"4Ot6fDtBuK4WVuP68Z/EatoJjeucMrH9hmIFFl9JuABfnJW8o1CMJLHQsVWcg+9bBERcxFgcjobYIk7d0J8RV+z///////////////////////////////////////9/7f///////////////////////////////////////3/u////////////////////////////////////////fw=="),Q(I,34720,"CMm882fmCWo7p8qEha5nuyv4lP5y82488TYdXzr1T6XRguatf1IOUR9sPiuMaAWba71B+6vZgx95IX4TGc3gWyKuKNeYL4pCzWXvI5FEN3EvO03sz/vAtbzbiYGl27XpOLVI81vCVjkZ0AW28RHxWZtPGa+kgj+SGIFt2tVeHKtCAgOjmKoH2L5vcEUBW4MSjLLkTr6FMSTitP/Vw30MVW+Je/J0Xb5ysZYWO/6x3oA1Esclpwbcm5Qmac908ZvB0krxnsFpm+TjJU84hke+77XVjIvGncEPZZysd8yhDCR1AitZbyzpLYPkpm6qhHRK1PtBvdypsFy1UxGD2oj5dqvfZu5SUT6YEDK0LW3GMag/IfuYyCcDsOQO777Hf1m/wo+oPfML4MYlpwqTR5Gn1W+CA+BRY8oGcG4OCmcpKRT8L9JGhQq3JybJJlw4IRsu7SrEWvxtLE3fs5WdEw04U95jr4tUcwplqLJ3PLsKanbmru1HLsnCgTs1ghSFLHKSZAPxTKHov6IBMEK8S2YaqJGX+NBwi0vCML5UBqNRbMcYUu/WGeiS0RCpZVUkBpnWKiBxV4U1DvS40bsycKBqEMjQ0rgWwaQZU6tBUQhsNx6Z647fTHdIJ6hIm+G1vLA0Y1rJxbMMHDnLikHjSqrYTnPjY3dPypxbo7iy1vNvLmj8su9d7oKPdGAvF0NvY6V4cqvwoRR4yITsOWQaCALHjCgeYyP6/76Q6b2C3utsUKQVecay96P5vitTcuPyeHHGnGEm6s4+J8oHwsAhx7iG0R7r4M3WfdrqeNFu7n9PffW6bxdyqmfwBqaYyKLFfWMKrg35vgSYPxEbRxwTNQtxG4R9BCP1d9sokyTHQHuryjK8vskVCr6ePEwNEJzEZx1DtkI+y77UxUwqfmX8nCl/Wez61jqrb8tfF1hHSowZRGyA"),Q(I,35568,"YjY0X3BvcyA8PSBiNjRfbGVuAHNvZGl1bS9jb2RlY3MuYwBzb2RpdW1fYmluMmJhc2U2NAAkYXJnb24yaWQAJGFyZ29uMmkAJHY9ACRtPQAsdD0ALHA9ACRhcmdvbjJpZCR2PQAkYXJnb24yaSR2PQAkYXJnb24yaWQkACRhcmdvbjJpJA=="),Q(I,35728,"U2lnRWQyNTUxOSBubyBFZDI1NTE5IGNvbGxpc2lvbnMBADEuMC4xOA=="),Q(I,35772,"UI5QAABAAAABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAAN");var Xg,Vg=((Xg=[null,yI,function(A,I,g,B,Q){var C;return A|=0,h=C=h-16|0,yI(C,I|=0,g|=0,B|=0,Q|=0),A=kg(A,C),h=C+16|0,0|A},function(A,I){return IA(A|=0,I|=0),0},function(A,I,g,B){return z(A|=0,I|=0,g|=0,B|=0),0},function(A,I){return Z(A|=0,I|=0),0},function(A,I,g){A|=0,I|=0;var B,Q=0,E=0;if(h=B=h-336|0,Q=-1,!function(A){var I,g=0,B=0,Q=0,E=0;for(C[11+(I=h-16|0)|0]=0,C[I+12|0]=0,C[I+13|0]=0,C[I+14|0]=0,i[I+8>>2]=0;;){for(Q=n[A+B|0],g=0;C[0|(E=(I+8|0)+g|0)]=n[0|E]|Q^n[(34464+(g<<5)|0)+B|0],7!=(0|(g=g+1|0)););if(31==(0|(B=B+1|0)))break}for(B=127&n[A+31|0],A=0,g=0;C[0|(Q=(I+8|0)+g|0)]=n[0|Q]|B^n[34495+(g<<5)|0],7!=(0|(g=g+1|0)););for(g=0;g=n[(I+8|0)+A|0]-1|g,7!=(0|(A=A+1|0)););return g>>>8&1}(g|=0)){for(Q=0;C[A+Q|0]=n[I+Q|0],32!=(0|(Q=Q+1|0)););for(C[0|A]=248&n[0|A],C[A+31|0]=63&n[A+31|0]|64,d(B+288|0,g),wg(B+240|0),Ug(B+192|0),SA(B+144|0,B+288|0),wg(B+96|0),g=254,I=0;Q=I,E=g,AA(B+240|0,B+144|0,Q^=I=n[(g>>>3|0)+A|0]>>>(7&g)&1),AA(B+192|0,B+96|0,Q),g=g-1|0,yA(B+48|0,B+144|0,B+96|0),yA(B,B+240|0,B+192|0),sA(B+240|0,B+240|0,B+192|0),sA(B+192|0,B+144|0,B+96|0),_(B+96|0,B+48|0,B+240|0),_(B+192|0,B+192|0,B),H(B+48|0,B),H(B,B+240|0),sA(B+144|0,B+96|0,B+192|0),yA(B+192|0,B+96|0,B+192|0),_(B+240|0,B,B+48|0),yA(B,B,B+48|0),H(B+192|0,B+192|0),P(B+96|0,B),H(B+144|0,B+144|0),sA(B+48|0,B+48|0,B+96|0),_(B+96|0,B+288|0,B+192|0),_(B+192|0,B,B+48|0),E;);AA(B+240|0,B+144|0,I),AA(B+192|0,B+96|0,I),j(B+192|0,B+192|0),_(B+240|0,B+240|0,B+192|0),BA(A,B+240|0),Q=0}return h=B+336|0,0|Q},function(A,I){A|=0,I|=0;var g,B=0;for(h=g=h-208|0;C[A+B|0]=n[I+B|0],32!=(0|(B=B+1|0)););return C[0|A]=248&n[0|A],C[A+31|0]=63&n[A+31|0]|64,CA(g+48|0,A),function(A,I,g){var B;h=B=h-96|0,sA(B+48|0,g,I),yA(B,g,I),j(B,B),_(A,B+48|0,B),h=B+96|0}(g,g+88|0,g+128|0),BA(A,g),h=g+208|0,0},function(A,I,g,B,Q){A|=0,B|=0,Q|=0;var E,a=0;if(h=E=h-112|0,(I|=0)|(g|=0)){a=n[Q+28|0]|n[Q+29|0]<<8|n[Q+30|0]<<16|n[Q+31|0]<<24,i[E+24>>2]=n[Q+24|0]|n[Q+25|0]<<8|n[Q+26|0]<<16|n[Q+27|0]<<24,i[E+28>>2]=a,a=n[Q+20|0]|n[Q+21|0]<<8|n[Q+22|0]<<16|n[Q+23|0]<<24,i[E+16>>2]=n[Q+16|0]|n[Q+17|0]<<8|n[Q+18|0]<<16|n[Q+19|0]<<24,i[E+20>>2]=a,a=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,i[E>>2]=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,i[E+4>>2]=a,a=n[Q+12|0]|n[Q+13|0]<<8|n[Q+14|0]<<16|n[Q+15|0]<<24,i[E+8>>2]=n[Q+8|0]|n[Q+9|0]<<8|n[Q+10|0]<<16|n[Q+11|0]<<24,i[E+12>>2]=a,Q=n[0|B]|n[B+1|0]<<8|n[B+2|0]<<16|n[B+3|0]<<24,B=n[B+4|0]|n[B+5|0]<<8|n[B+6|0]<<16|n[B+7|0]<<24,i[E+104>>2]=0,i[E+108>>2]=0,i[E+96>>2]=Q,i[E+100>>2]=B;A:{if(!g&I>>>0>=64|g){for(;;){for(mg(A,E+96|0,E),Q=8,B=1;B=n[0|(a=(E+96|0)+Q|0)]+B|0,C[0|a]=B,B=B>>>8|0,16!=(0|(Q=Q+1|0)););if(A=A- -64|0,g=g-1|0,!(!(g=(I=I+-64|0)>>>0<4294967232?g+1|0:g)&I>>>0>63|g))break}if(!(I|g))break A}for(Q=0,mg(E+32|0,E+96|0,E);C[A+Q|0]=n[(E+32|0)+Q|0],(0|I)!=(0|(Q=Q+1|0)););}fI(E+32|0,64),fI(E,32)}return h=E+112|0,0},function(A,I,g,B,Q,E,a,r){A|=0,I|=0,Q|=0,E|=0,a|=0,r|=0;var o,e=0,t=0;if(h=o=h-112|0,(g|=0)|(B|=0)){for(e=n[r+28|0]|n[r+29|0]<<8|n[r+30|0]<<16|n[r+31|0]<<24,i[o+24>>2]=n[r+24|0]|n[r+25|0]<<8|n[r+26|0]<<16|n[r+27|0]<<24,i[o+28>>2]=e,e=n[r+20|0]|n[r+21|0]<<8|n[r+22|0]<<16|n[r+23|0]<<24,i[o+16>>2]=n[r+16|0]|n[r+17|0]<<8|n[r+18|0]<<16|n[r+19|0]<<24,i[o+20>>2]=e,e=n[r+4|0]|n[r+5|0]<<8|n[r+6|0]<<16|n[r+7|0]<<24,i[o>>2]=n[0|r]|n[r+1|0]<<8|n[r+2|0]<<16|n[r+3|0]<<24,i[o+4>>2]=e,e=8,t=n[r+12|0]|n[r+13|0]<<8|n[r+14|0]<<16|n[r+15|0]<<24,i[o+8>>2]=n[r+8|0]|n[r+9|0]<<8|n[r+10|0]<<16|n[r+11|0]<<24,i[o+12>>2]=t,r=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,i[o+96>>2]=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,i[o+100>>2]=r;C[(o+96|0)+e|0]=E,E=(255&a)<<24|E>>>8,a=a>>>8|0,16!=(0|(e=e+1|0)););if(!B&g>>>0>63|B)for(;;){for(e=0,mg(o+32|0,o+96|0,o);C[A+e|0]=n[(o+32|0)+e|0]^n[I+e|0],r=1,64!=(0|(e=e+1|0)););for(e=8;Q=n[0|(E=(o+96|0)+e|0)]+r|0,C[0|E]=Q,r=Q>>>8|0,16!=(0|(e=e+1|0)););if(I=I- -64|0,A=A- -64|0,B=B-1|0,!(!(B=(g=g+-64|0)>>>0<4294967232?B+1|0:B)&g>>>0>63|B))break}if(g|B)for(e=0,mg(o+32|0,o+96|0,o);C[A+e|0]=n[(o+32|0)+e|0]^n[I+e|0],(0|g)!=(0|(e=e+1|0)););fI(o+32|0,64),fI(o,32)}return h=o+112|0,0},function(A,I,g,B,Q){var C;return A|=0,B|=0,h=C=h+-64|0,(I|=0)|(g|=0)&&(aA(C,Q|=0),UA(C,B,0),U(C,A=EA(A,0,I),A,I,g),fI(C,64)),h=C- -64|0,0},function(A,I,g,B,Q){var C;return A|=0,B|=0,h=C=h+-64|0,(I|=0)|(g|=0)&&(aA(C,Q|=0),JA(C,B,0),U(C,A=EA(A,0,I),A,I,g),fI(C,64)),h=C- -64|0,0},function(A,I,g,B,Q,C,E,i){var n;return A|=0,I|=0,Q|=0,E|=0,i|=0,h=n=h-80|0,(g|=0)|(B|=0)&&(xI(n+8|0,C|=0),xI(n+12|0,E),aA(n+16|0,i),UA(n+16|0,Q,n+8|0),U(n+16|0,I,A,g,B),fI(n+16|0,64)),h=n+80|0,0},function(A,I,g,B,Q,C,E){var i;return A|=0,I|=0,Q|=0,E|=0,h=i=h-80|0,(g|=0)|(B|=0)&&(xI(i+12|0,C|=0),aA(i+16|0,E),JA(i+16|0,Q,i+12|0),U(i+16|0,I,A,g,B),fI(i+16|0,64)),h=i+80|0,0}]).grow=function(A){var I=this.length;return this.length=this.length+A,I},Xg.set=function(A,I){this[A]=I},Xg.get=function(A){return this[A]},Xg);function Wg(){return B.byteLength/65536|0}return{h:Vg,i:function(){},j:function(A,I,g,B,Q,C,E,i,n,a,r,o){return 0|PA(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,r|=0,o|=0)},k:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){if(!Q&B>>>0<4294967280)return PA(A,A+B|0,0,g,B,Q,C,E,n,a,r),I&&(Q=(A=B+16|0)>>>0<16?Q+1|0:Q,i[I>>2]=A,i[I+4>>2]=Q),0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,r|=0,o|=0)},l:function(A,I,g,B,Q,C,E,i,n,a,r,o){return 0|_A(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,r|=0,o|=0)},m:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){if(!Q&B>>>0<4294967280)return _A(A,A+B|0,0,g,B,Q,C,E,n,a,r),I&&(Q=(A=B+16|0)>>>0<16?Q+1|0:Q,i[I>>2]=A,i[I+4>>2]=Q),0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,r|=0,o|=0)},n:function(A,I,g,B,Q,C,E,i,n,a,r){return 0|HA(A|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,a|=0,r|=0)},o:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){var o=0;return o=-1,!Q&B>>>0>=16|Q&&(o=HA(A,g,B-16|0,Q-(B>>>0<16)|0,(g+B|0)-16|0,C,E,n,a,r)),I&&(i[I>>2]=o?0:B-16|0,i[I+4>>2]=o?0:Q-(B>>>0<16)|0),o}(A|=0,I|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},p:function(A,I,g,B,Q,C,E,i,n,a,r){return 0|GA(A|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,a|=0,r|=0)},q:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){var o=0;return o=-1,!Q&B>>>0>=16|Q&&(o=GA(A,g,B-16|0,Q-(B>>>0<16)|0,(g+B|0)-16|0,C,E,n,a,r)),I&&(i[I>>2]=o?0:B-16|0,i[I+4>>2]=o?0:Q-(B>>>0<16)|0),o}(A|=0,I|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},r:Ng,s:function(){return 12},t:Lg,u:Sg,v:dg,w:bg,x:Ng,y:xg,z:Lg,A:Sg,B:dg,C:bg,D:function(A,I,g,B,Q,C,E,i,n,a,r,o){return 0|NA(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,r|=0,o|=0)},E:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){if(!Q&B>>>0<4294967280)return NA(A,A+B|0,0,g,B,Q,C,E,n,a,r),I&&(Q=(A=B+16|0)>>>0<16?Q+1|0:Q,i[I>>2]=A,i[I+4>>2]=Q),0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,r|=0,o|=0)},F:function(A,I,g,B,Q,C,E,i,n,a,r){return 0|MA(A|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0,n|=0,a|=0,r|=0)},G:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r){var o=0;return o=-1,!Q&B>>>0>=16|Q&&(o=MA(A,g,B-16|0,Q-(B>>>0<16)|0,(g+B|0)-16|0,C,E,n,a,r)),I&&(i[I>>2]=o?0:B-16|0,i[I+4>>2]=o?0:Q-(B>>>0<16)|0),o}(A|=0,I|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},H:Ng,I:Mg,J:Lg,K:Sg,L:dg,M:bg,N:Ng,O:Ng,P:function(A,I,g,B,Q){return 0|bI(A|=0,I|=0,g|=0,B|=0,Q|=0)},Q:function(A,I,g,B,Q){return 0|function(A,I,g,B,Q){var C;return h=C=h-32|0,bI(C,I,g,B,Q),I=Gg(A,C),g=zA(C,A,32),h=C+32|0,g|((0|A)==(0|C)?-1:I)}(A|=0,I|=0,g|=0,B|=0,Q|=0)},R:bg,S:Ng,T:Ng,U:Ng,V:Ng,W:Mg,X:Sg,Y:dg,Z:function(A,I,g){return 0|function(A,I,g){var B,Q=0;return h=B=h+-64|0,mI(B,g,32,0),g=i[B+28>>2],Q=i[B+24>>2],C[I+24|0]=Q,C[I+25|0]=Q>>>8,C[I+26|0]=Q>>>16,C[I+27|0]=Q>>>24,C[I+28|0]=g,C[I+29|0]=g>>>8,C[I+30|0]=g>>>16,C[I+31|0]=g>>>24,g=i[B+20>>2],Q=i[B+16>>2],C[I+16|0]=Q,C[I+17|0]=Q>>>8,C[I+18|0]=Q>>>16,C[I+19|0]=Q>>>24,C[I+20|0]=g,C[I+21|0]=g>>>8,C[I+22|0]=g>>>16,C[I+23|0]=g>>>24,g=i[B+12>>2],Q=i[B+8>>2],C[I+8|0]=Q,C[I+9|0]=Q>>>8,C[I+10|0]=Q>>>16,C[I+11|0]=Q>>>24,C[I+12|0]=g,C[I+13|0]=g>>>8,C[I+14|0]=g>>>16,C[I+15|0]=g>>>24,g=i[B+4>>2],Q=i[B>>2],C[0|I]=Q,C[I+1|0]=Q>>>8,C[I+2|0]=Q>>>16,C[I+3|0]=Q>>>24,C[I+4|0]=g,C[I+5|0]=g>>>8,C[I+6|0]=g>>>16,C[I+7|0]=g>>>24,fI(B,64),A=cg(A,I),h=B- -64|0,A}(A|=0,I|=0,g|=0)},_:Ig,$:jI,aa:function(A,I,g,B,Q,C,E){return 0|Qg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ba:function(A,I,g,B,Q,C,E,i){return 0|wI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0)},ca:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=4294967280|B&&(OI(),e()),Qg(A+16|0,A,I,g,B,Q,C)}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},da:function(A,I,g,B,Q,C,E){return 0|kI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ea:function(A,I,g,B,Q,C,E){return 0|Cg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},fa:function(A,I,g,B,Q,C,E,i){return 0|hI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,i|=0)},ga:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=16|B?Cg(A,I+16|0,I,g-16|0,B-(g>>>0<16)|0,Q,C):-1}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},ha:function(A,I,g,B,Q,C,E){return 0|uI(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ia:function(A,I,g,B,Q){return 0|function(A,I,g,B,Q){var E,n=0;return h=E=h-96|0,n=-1,Ig(E+32|0,E)||(lI(E- -64|0,E+32|0,Q),n=kI(A+32|0,I,g,B,E- -64|0,Q,E),I=i[E+60>>2],g=i[E+56>>2],C[A+24|0]=g,C[A+25|0]=g>>>8,C[A+26|0]=g>>>16,C[A+27|0]=g>>>24,C[A+28|0]=I,C[A+29|0]=I>>>8,C[A+30|0]=I>>>16,C[A+31|0]=I>>>24,I=i[E+52>>2],g=i[E+48>>2],C[A+16|0]=g,C[A+17|0]=g>>>8,C[A+18|0]=g>>>16,C[A+19|0]=g>>>24,C[A+20|0]=I,C[A+21|0]=I>>>8,C[A+22|0]=I>>>16,C[A+23|0]=I>>>24,I=i[E+44>>2],g=i[E+40>>2],C[A+8|0]=g,C[A+9|0]=g>>>8,C[A+10|0]=g>>>16,C[A+11|0]=g>>>24,C[A+12|0]=I,C[A+13|0]=I>>>8,C[A+14|0]=I>>>16,C[A+15|0]=I>>>24,I=i[E+36>>2],g=i[E+32>>2],C[0|A]=g,C[A+1|0]=g>>>8,C[A+2|0]=g>>>16,C[A+3|0]=g>>>24,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24,fI(E,32),fI(E+32|0,32),fI(E- -64|0,24)),h=E+96|0,n}(A|=0,I|=0,g|=0,B|=0,Q|=0)},ja:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){var E,i=0;return h=E=h-32|0,i=-1,!B&g>>>0>=48|B&&(lI(E,I,Q),i=uI(A,I+32|0,g-32|0,B-(g>>>0<32)|0,E,I,C)),h=E+32|0,i}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},ka:function(){return 48},la:Sg,ma:Pg,na:Ng,oa:Sg,pa:Pg,qa:Ng,ra:function(){return 384},sa:function(A,I,g,B,Q,C,E){return 0|Eg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},ta:qI,ua:function(A,I,g,B){return 0|sg(A|=0,I|=0,g|=0,B|=0)},va:TI,wa:bg,xa:Pg,ya:function(A,I,g,B){return 0|mI(A|=0,I|=0,g|=0,B|=0)},za:Sg,Aa:Pg,Ba:xg,Ca:Ng,Da:function(A,I,g,B,Q,a){return 0|function(A,I,g,B,Q,a){var r,o;return h=r=h-32|0,o=n[0|Q]|n[Q+1|0]<<8|n[Q+2|0]<<16|n[Q+3|0]<<24,Q=n[Q+4|0]|n[Q+5|0]<<8|n[Q+6|0]<<16|n[Q+7|0]<<24,i[r+24>>2]=0,i[r+28>>2]=0,i[r+16>>2]=o,i[r+20>>2]=Q,tI(r,g,B),i[r+8>>2]=0,i[r+12>>2]=0,I-16>>>0>=49?(i[8960]=28,A=-1):(g=r+16|0,A=I-1>>>0>63?-1:function(A,I,g,B,Q){var a,r=0;if(a=r=h,h=r=r-384&-64,!(!I|!A|(g-1&255)>>>0>=64))return function(A,I,g,B,Q){var a;if(h=a=h-192|0,!(!g|(I-1&255)>>>0>=64))return E[a+130>>1]=257,C[a+129|0]=32,C[a+128|0]=I,WI(a+128|4),tI(a+128|8,0,0),i[a+152>>2]=0,i[a+156>>2]=0,i[a+144>>2]=0,i[a+148>>2]=0,B?function(A,I){var g,B=0;B=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,C[A+32|0]=g,C[A+33|0]=g>>>8,C[A+34|0]=g>>>16,C[A+35|0]=g>>>24,C[A+36|0]=B,C[A+37|0]=B>>>8,C[A+38|0]=B>>>16,C[A+39|0]=B>>>24,B=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,I=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,C[A+40|0]=I,C[A+41|0]=I>>>8,C[A+42|0]=I>>>16,C[A+43|0]=I>>>24,C[A+44|0]=B,C[A+45|0]=B>>>8,C[A+46|0]=B>>>16,C[A+47|0]=B>>>24}(a+128|0,B):(i[a+168>>2]=0,i[a+172>>2]=0,i[a+160>>2]=0,i[a+164>>2]=0),Q?function(A,I){var g,B=0;B=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,g=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,C[A+48|0]=g,C[A+49|0]=g>>>8,C[A+50|0]=g>>>16,C[A+51|0]=g>>>24,C[A+52|0]=B,C[A+53|0]=B>>>8,C[A+54|0]=B>>>16,C[A+55|0]=B>>>24,B=n[I+12|0]|n[I+13|0]<<8|n[I+14|0]<<16|n[I+15|0]<<24,I=n[I+8|0]|n[I+9|0]<<8|n[I+10|0]<<16|n[I+11|0]<<24,C[A+56|0]=I,C[A+57|0]=I>>>8,C[A+58|0]=I>>>16,C[A+59|0]=I>>>24,C[A+60|0]=B,C[A+61|0]=B>>>8,C[A+62|0]=B>>>16,C[A+63|0]=B>>>24}(a+128|0,Q):(i[a+184>>2]=0,i[a+188>>2]=0,i[a+176>>2]=0,i[a+180>>2]=0),hA(A,a+128|0),EA(a+32|0,0,96),QA(I=A,A=X(a,g,32),128,0),fI(A,128),void(h=A+192|0);OI(),e()}(r,g,I,B,Q),QA(r,0,0,0),M(r,A,g),h=a,0;OI(),e()}(A,a,255&I,r,g)),h=r+32|0,A}(A|=0,I|=0,g|=0,B|=0,Q|=0,a|=0)},Ea:bg,Fa:function(A,I,g){return A|=0,Eg(I|=0,32,g|=0,32,0,0,0),0|ag(A,I)},Ga:function(A,I){return A|=0,cI(I|=0,32),0|ag(A,I)},Ha:function(A,I,g,B,Q){I|=0,g|=0,Q|=0;var E,i,a=0;if(i=a=h,h=a=a-512&-64,E=(A|=0)||I){if(A=-1,!ZI(a+96|0,B|=0,Q)){for(I=I||E,A=0,qI(a+128|0,0,0,64),sg(a+128|0,a+96|0,32,0),fI(a+96|0,32),sg(a+128|0,g,32,0),sg(a+128|0,Q,32,0),TI(a+128|0,a+32|0,64),fI(a+128|0,384);g=(a+32|0)+A|0,C[A+E|0]=n[0|g],C[A+I|0]=n[g+32|0],32!=(0|(A=A+1|0)););fI(a+32|0,64),A=0}return h=i,0|A}OI(),e()},Ia:function(A,I,g,B,Q){I|=0,g|=0,Q|=0;var E,i,a=0;if(i=a=h,h=a=a-512&-64,E=(A|=0)||I){if(A=-1,!ZI(a+96|0,B|=0,Q)){for(I=I||E,A=0,qI(a+128|0,0,0,64),sg(a+128|0,a+96|0,32,0),fI(a+96|0,32),sg(a+128|0,Q,32,0),sg(a+128|0,g,32,0),TI(a+128|0,a+32|0,64),fI(a+128|0,384);g=(a+32|0)+A|0,C[A+I|0]=n[0|g],C[A+E|0]=n[g+32|0],32!=(0|(A=A+1|0)););fI(a+32|0,64),A=0}return h=i,0|A}OI(),e()},Ja:Ng,Ka:Ng,La:Ng,Ma:Ng,Na:Rg,Oa:Jg,Pa:Jg,Qa:Sg,Ra:Kg,Sa:Lg,Ta:Kg,Ua:Sg,Va:function(){return 128},Wa:function(){return 35681},Xa:Rg,Ya:Kg,Za:function(){return 8192},_a:function(){return-2147483648},$a:Jg,ab:function(){return 67108864},bb:qg,cb:function(){return 268435456},db:function(){return 4},eb:function(){return 1073741824},fb:function(A,I,g,B,Q,C,E,n,a,r,o){return 0|function(A,I,g,B,Q,C,E,n,a,r,o){switch(o-1|0){case 0:return function(A,I,g,B,Q,C,E,n,a,r){var o,e;e=I,o=EA(A,0,I),A=22;A:if(!g){if(!(!g&I>>>0<16)){if(C|a|r>>>0>2147483648)break A;if(!(!a&n>>>0<3|r>>>0<8192)){if(A=28,(0|B)==(0|o))break A;return pA(n,r>>>10|0,1,B,Q,E,16,o,e,0,0,1)?-1:0}}A=28}return i[8960]=A,-1}(A,I,g,B,Q,C,E,n,a,r);case 1:return function(A,I,g,B,Q,C,E,n,a,r){var o,e;e=I,o=EA(A,0,I),A=22;A:if(!g){if(!(!g&I>>>0<16)){if(C|a|r>>>0>2147483648)break A;if(!(!(n|a)|r>>>0<8192)){if(A=28,(0|B)==(0|o))break A;return pA(n,r>>>10|0,1,B,Q,E,16,o,e,0,0,2)?-1:0}}A=28}return i[8960]=A,-1}(A,I,g,B,Q,C,E,n,a,r)}return i[8960]=28,-1}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0,a|=0,r|=0,o|=0)},gb:function(A,I,g,B,Q,C,E){return 0|xA(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0)},hb:function(A,I,g,B,Q,C,E,n){return 0|function(A,I,g,B,Q,C,E,n){switch(n-1|0){case 1:return xA(A,I,g,B,Q,C,E);default:OI(),e();case 0:}return function(A,I,g,B,Q,C,E){var n;return h=n=h-16|0,A=EA(A,0,128),E>>>0<2147483649&&!(B|C)?E>>>0>8191&&!C&Q>>>0>=3|0!=(0|C)?(cI(n,16),A=pA(Q,E>>>10|0,1,I,g,n,16,0,32,A,128,1)?-1:0):(i[8960]=28,A=-1):(i[8960]=22,A=-1),h=n+16|0,A}(A,I,g,B,Q,C,E)}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0,E|=0,n|=0)},ib:function(A,I,g,B){return 0|function(A,I,g,B){return XA(A,35681,10)?XA(A,35692,9)?(i[8960]=28,-1):function(A,I,g,B){A:{if(1==(0|B)|B>>>0>1)i[8960]=22;else{if(!(A=fA(A,I,g,1)))break A;-35==(0|A)&&(i[8960]=28)}A=-1}return A}(A,I,g,B):function(A,I,g,B){A:{if(1==(0|B)|B>>>0>1)i[8960]=22;else{if(!(A=fA(A,I,g,2)))break A;-35==(0|A)&&(i[8960]=28)}A=-1}return A}(A,I,g,B)}(A|=0,I|=0,g|=0,B|=0)},jb:function(A,I,g,B){return 0|function(A,I,g,B){return XA(A,35681,10)?XA(A,35692,9)?(i[8960]=28,-1):DA(A,I,g,B,1):DA(A,I,g,B,2)}(A|=0,I|=0,g|=0,B|=0)},kb:ag,lb:ZI,mb:Ng,nb:Ng,ob:Ng,pb:Mg,qb:Sg,rb:dg,sb:bg,tb:Qg,ub:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=4294967280|B&&(OI(),e()),nA(A+16|0,A,I,g,B,Q,C),0}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},vb:Cg,wb:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){return!B&g>>>0>=16|B?rA(A,I+16|0,I,g-16|0,B-(g>>>0<16)|0,Q,C):-1}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},xb:bg,yb:function(A,I,g){return A|=0,g|=0,cI(I|=0,24),x(A,I,g),XI(A),g=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,I=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,C[A+44|0]=0,C[A+45|0]=0,C[A+46|0]=0,C[A+47|0]=0,C[A+48|0]=0,C[A+49|0]=0,C[A+50|0]=0,C[A+51|0]=0,C[A+36|0]=g,C[A+37|0]=g>>>8,C[A+38|0]=g>>>16,C[A+39|0]=g>>>24,C[A+40|0]=I,C[A+41|0]=I>>>8,C[A+42|0]=I>>>16,C[A+43|0]=I>>>24,0},zb:function(A,I,g){return x(A|=0,I|=0,g|=0),XI(A),g=n[I+16|0]|n[I+17|0]<<8|n[I+18|0]<<16|n[I+19|0]<<24,I=n[I+20|0]|n[I+21|0]<<8|n[I+22|0]<<16|n[I+23|0]<<24,C[A+44|0]=0,C[A+45|0]=0,C[A+46|0]=0,C[A+47|0]=0,C[A+48|0]=0,C[A+49|0]=0,C[A+50|0]=0,C[A+51|0]=0,C[A+36|0]=g,C[A+37|0]=g>>>8,C[A+38|0]=g>>>16,C[A+39|0]=g>>>24,C[A+40|0]=I,C[A+41|0]=I>>>8,C[A+42|0]=I>>>16,C[A+43|0]=I>>>24,0},Ab:L,Bb:function(A,I,g,B,Q,E,a,r,o,t){return 0|function(A,I,g,B,Q,E,a,r,o,t){var f,c=0;if(h=f=h-336|0,g&&(i[g>>2]=0,i[g+4>>2]=0),!E&Q>>>0<4294967279)return _g(f+16|0,64,c=A+32|0,A),lg(f+80|0,f+16|0),fI(f+16|0,64),yg(f+80|0,a,r,o),yg(f+80|0,35712,0-r&15,0),EA(f+16|0,0,64),C[f+16|0]=t,BI(f+16|0,f+16|0,64,0,c,1,A),yg(f+80|0,f+16|0,64,0),C[0|I]=n[f+16|0],BI(a=I+1|0,B,Q,E,c,2,A),yg(f+80|0,a,Q,E),yg(f+80|0,35712,15&Q,0),tI(f+8|0,r,o),yg(f+80|0,f+8|0,8,0),tI(f+8|0,Q- -64|0,E-((Q>>>0<4294967232)-1|0)|0),yg(f+80|0,f+8|0,8,0),Fg(f+80|0,I=Q+a|0),fI(f+80|0,256),pI(A+36|0,I),sI(c),(2&t||aI(c,4))&&L(A),g&&(E=(A=Q+17|0)>>>0<17?E+1|0:E,i[g>>2]=A,i[g+4>>2]=E),h=f+336|0,0;OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,a|=0,r|=0,o|=0,t|=0)},Cb:function(A,I,g,B,Q,E,a,r,o,t){return 0|function(A,I,g,B,Q,E,a,r,o,t){var f,c=0,y=0,s=0,w=0,D=0;h=f=h-352|0,g&&(i[g>>2]=0,i[g+4>>2]=0),B&&(C[0|B]=255),w=-1;A:{if(!(!a&E>>>0<17)){if(!(c=a-(E>>>0<17)|0)&(y=E-17|0)>>>0>=4294967279|c)break A;_g(f+32|0,64,s=A+32|0,A),lg(f+96|0,f+32|0),fI(f+32|0,64),yg(f+96|0,r,o,t),yg(f+96|0,35712,0-o&15,0),EA(f+32|0,0,64),C[f+32|0]=n[0|Q],BI(f+32|0,f+32|0,64,0,s,1,A),D=n[f+32|0],C[f+32|0]=n[0|Q],yg(f+96|0,f+32|0,64,0),yg(f+96|0,r=Q+1|0,y,c),yg(f+96|0,35712,E-1&15,0),tI(f+24|0,o,t),yg(f+96|0,f+24|0,8,0),tI(f+24|0,Q=E+47|0,a=Q>>>0<47?a+1|0:a),yg(f+96|0,f+24|0,8,0),Fg(f+96|0,f),fI(f+96|0,256),zA(f,r+y|0,16)?fI(f,16):(BI(I,r,y,c,s,2,A),pI(A+36|0,f),sI(s),(2&D||aI(s,4))&&L(A),g&&(i[g>>2]=y,i[g+4>>2]=c),w=0,B&&(C[0|B]=D))}return h=f+352|0,w}OI(),e()}(A|=0,I|=0,g|=0,B|=0,Q|=0,E|=0,a|=0,r|=0,o|=0,t|=0)},Db:function(){return 52},Eb:function(){return 17},Fb:Mg,Gb:Ng,Hb:function(){return-18},Ib:Lg,Jb:Rg,Kb:Jg,Lb:qg,Mb:xg,Nb:Sg,Ob:function(A,I,g,B,Q){return 0|function(A,I,g,B){var Q=0,C=0,E=0,i=0,a=0,r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0;if(Q=1886610805^(E=n[0|B]|n[B+1|0]<<8|n[B+2|0]<<16|n[B+3|0]<<24),i=1936682341^(C=n[B+4|0]|n[B+5|0]<<8|n[B+6|0]<<16|n[B+7|0]<<24),a=1852142177^E,o=1819895653^C,E=1852075885^(t=n[B+8|0]|n[B+9|0]<<8|n[B+10|0]<<16|n[B+11|0]<<24),C=1685025377^(B=n[B+12|0]|n[B+13|0]<<8|n[B+14|0]<<16|n[B+15|0]<<24),t^=2037671283,r=1952801890^B,(0|(B=(I+g|0)-(y=7&g)|0))!=(0|I)){for(;e=n[0|I]|n[I+1|0]<<8|n[I+2|0]<<16|n[I+3|0]<<24,f=n[I+4|0]|n[I+5|0]<<8|n[I+6|0]<<16|n[I+7|0]<<24,c=Dg(E,C,13),s=p,w=1+(C=C+i|0)|0,i=C,h=Dg(C=Q+E|0,i=C>>>0>>0?w:i,32),w=p,r=Q=r^f,E=Dg(t^=e,Q,16),Q=a+t|0,a=o+r|0,t=o=(a=Q>>>0>>0?a+1|0:a)^p,o=Dg(E^=Q,o,21),r=p,c=Dg(C^=c,i^=s,17),D=p,i=a+i|0,a=Q,i=Dg(Q=Q+C|0,C=a>>>0>Q>>>0?i+1|0:i,32),a=p,s=Dg(c^=Q,C^=D,13),D=p,w=1+(Q=t+w|0)|0,t=Q,E=(Q=E+h|0)>>>0>>0?w:t,c=t=Q+c|0,C=E+C|0,C=Dg(t,h=Q>>>0>t>>>0?C+1|0:C,32),t=p,o=Dg(Q^=o,E^=r,16),E=a+E|0,E=(Q=Q+i|0)>>>0>>0?E+1|0:E,i=C+(a=Q^o)|0,C=(r=t)+(t=E^p)|0,t=Dg(a,t,21)^i,r=(w=i>>>0>>0?C+1|0:C)^p,a=C=h^D,C=Dg(o=c^s,C,17),E=E+a|0,o=(a=Q+o|0)>>>0>>0?E+1|0:E,E=C^a,C=o^p,Q=i^e,i=f^w,a=Dg(a,o,32),o=p,(0|B)!=(0|(I=I+8|0)););I=B}switch(B=g<<24,g=0,y-1|0){case 6:B|=n[I+6|0]<<16;case 5:B|=n[I+5|0]<<8;case 4:B|=n[I+4|0];case 3:e=(g=n[I+3|0])>>>8|0,g<<=24,B|=e;case 2:g|=(e=n[I+2|0])<<16,B|=f=e>>>16|0;case 1:g|=(e=n[I+1|0])<<8,B|=f=e>>>24|0;case 0:g=n[0|I]|g}return e=Dg(E,C,13),f=p,I=C+i|0,y=Dg(E=Q+E|0,C=E>>>0>>0?I+1|0:I,32),c=p,i=Q=B^r,Q=Dg(I=g^t,Q,16),i=i+o|0,o=a=(i=(r=I)>>>0>(I=I+a|0)>>>0?i+1|0:i)^p,a=Dg(Q^=I,a,21),t=p,e=Dg(E^=e,C^=f,17),f=p,C=i+C|0,r=I,C=Dg(I=I+E|0,E=r>>>0>I>>>0?C+1|0:C,32),i=p,e=Dg(r=I^e,E^=f,13),f=p,s=1+(I=o+c|0)|0,o=I,E=(Q=(I=Q+y|0)>>>0>>0?s:o)+E|0,E=Dg(r=o=I+r|0,o=I>>>0>o>>>0?E+1|0:E,32),y=p,a=Dg(I^=a,Q^=t,16),Q=i+Q|0,Q=(I=I+C|0)>>>0>>0?Q+1|0:Q,C=I^a,a=i=Q^p,i=Dg(C,i,21),t=p,f=o^=f,o=Dg(r^=e,o,17),e=p,Q=Q+f|0,s=I,r=Dg(I=I+r|0,Q=s>>>0>I>>>0?Q+1|0:Q,32),f=p,e=Dg(I^=o,o=Q^e,13),c=p,s=I,a=1+(I=a+y|0)|0,Q=I,B=o+(B^(Q=(I=E+C|0)>>>0>>0?a:Q))|0,g=Dg(C=E=s+(g^=I)|0,E=g>>>0>E>>>0?B+1|0:B,32),a=p,i=Dg(I^=i,B=Q^t,16),B=B+f|0,B=(Q=I)>>>0>(I=I+(255^r)|0)>>>0?B+1|0:B,Q=I^i,o=i=B^p,i=Dg(Q,i,21),t=p,r=E^=c,E=Dg(C^=e,E,17),e=p,B=B+r|0,r=I,C=Dg(I=I+C|0,B=r>>>0>I>>>0?B+1|0:B,32),r=p,f=Dg(E^=I,e^=B,13),y=p,o=1+(I=a+o|0)|0,B=I,Q=(B=(I=g+Q|0)>>>0>>0?o:B)+e|0,a=Q=I>>>0>(g=I+E|0)>>>0?Q+1|0:Q,Q=Dg(g,Q,32),o=p,i=Dg(I^=i,B^=t,16),B=B+r|0,r=I,E=(I=I+C|0)^i,i=C=(B=r>>>0>I>>>0?B+1|0:B)^p,C=Dg(E,C,21),t=p,r=a^=y,a=Dg(g^=f,a,17),e=p,B=B+r|0,r=I,r=Dg(I=I+g|0,g=r>>>0>I>>>0?B+1|0:B,32),f=p,y=Dg(a^=I,e^=g,13),c=p,B=1+(I=i+o|0)|0,g=I,Q=(B=(I=Q+E|0)>>>0>>0?B:g)+e|0,i=Q=I>>>0>(g=I+a|0)>>>0?Q+1|0:Q,Q=Dg(g,Q,32),a=p,C=Dg(I^=C,B^=t,16),B=B+f|0,o=I,E=(I=I+r|0)^C,o=C=(B=o>>>0>I>>>0?B+1|0:B)^p,C=Dg(E,C,21),t=p,r=i^=c,i=Dg(g^=y,i,17),e=p,B=B+r|0,r=I,B=Dg(I=I+g|0,g=r>>>0>I>>>0?B+1|0:B,32),r=p,e=g^=e,f=Dg(i^=I,g,13),y=p,o=1+(I=a+o|0)|0,g=I,a=E=t^(Q=(I=Q+E|0)>>>0>>0?o:g),E=Dg(g=I^C,E,16),C=a+r|0,r=g,E=Dg((g=g+B|0)^E,(B=r>>>0>g>>>0?C+1|0:C)^p,21),C=p,Q=Q+e|0,o=1+(B=B+(Q=((r=I)>>>0>(I=I+i|0)>>>0?Q+1|0:Q)^y)|0)|0,r=B,g=(I=g+(B=I^f)|0)>>>0>>0?o:r,B=Dg(B,Q,17)^I^E,Q=p^g^C,tI(A,Dg(I,g,32)^B,p^Q),0}(A|=0,I|=0,g|=0,Q|=0)},Pb:function(A){cI(A|=0,16)},Qb:function(){return 208},Rb:Pg,Sb:Ng,Tb:Ng,Ub:Pg,Vb:function(){return-65},Wb:function(A,I,g){return 0|N(A|=0,I|=0,g|=0)},Xb:function(A,I){return 0|function(A,I){var g;return h=g=h-32|0,cI(g,32),N(A,I,g),fI(g,32),h=g+32|0,0}(A|=0,I|=0)},Yb:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){var E,n;return h=E=h-16|0,n=g,g=B,Bg(A,E+8|0,gA(A- -64|0,n,B),B,Q,C),64!=i[E+8>>2]|i[E+12>>2]?(I&&(i[I>>2]=0,i[I+4>>2]=0),EA(A,0,g- -64|0),A=-1):(A=0,I&&(i[I>>2]=B- -64,i[I+4>>2]=Q-((B>>>0<4294967232)-1|0))),h=E+16|0,A}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},Zb:function(A,I,g,B,Q,C){return 0|function(A,I,g,B,Q,C){var E=0;A:{I:{if(!(!Q&B>>>0<64||(Q=Q-1|0,!(Q=(B=B+-64|0)>>>0<4294967232?Q+1|0:Q)&B>>>0>4294967231|Q))){if(!ng(g,E=g- -64|0,B,Q,C))break I;A&&EA(A,0,B)}if(g=-1,!I)break A;return i[I>>2]=0,i[I+4>>2]=0,-1}I&&(i[I>>2]=B,i[I+4>>2]=Q),g=0,A&&gA(A,E,B)}return g}(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},_b:function(A,I,g,B,Q,C){return 0|Bg(A|=0,I|=0,g|=0,B|=0,Q|=0,C|=0)},$b:function(A,I,g,B,Q){return 0|ng(A|=0,I|=0,g|=0,B|=0,Q|=0)},ac:function(A){return MI(A|=0),0},bc:function(A,I,g,B){return 0|V(A|=0,I|=0,g|=0,B|=0)},cc:function(A,I,g,B){return 0|function(A,I,g,B){var Q;return h=Q=h+-64|0,UI(A,Q),A=q(I,g,Q,64,0,B,1),h=Q- -64|0,A}(A|=0,I|=0,g|=0,B|=0)},dc:function(A,I,g){return 0|function(A,I,g){var B;return h=B=h+-64|0,UI(A,B),A=lA(I,B,64,0,g,1),h=B- -64|0,A}(A|=0,I|=0,g|=0)},ec:function(A,I){A|=0;var g,B=0;return h=g=h-256|0,B=-1,wA(I|=0)||cA(g+96|0,I)||function(A){var I;return h=I=h-160|0,function(A,I){var g,B=0;for(h=g=h-1760|0,FI(g+480|0,I),JI(g+320|0,I),DI(g,g+320|0),VA(g+320|0,g,g+480|0),DI(g+160|0,g+320|0),FI(I=g+640|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+800|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+960|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+1120|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+1280|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(I=g+1440|0,g+160|0),VA(g+320|0,g,I),DI(g+160|0,g+320|0),FI(g+1600|0,g+160|0),zI(A),I=252;JI(g+320|0,A),B=I,(0|(I=C[I+34208|0]))>=1?(DI(g+160|0,g+320|0),VA(g+320|0,g+160|0,(g+480|0)+r((254&I)>>>1|0,160)|0)):(0|I)>-1||(DI(g+160|0,g+320|0),WA(g+320|0,g+160|0,(g+480|0)+r((0-I&254)>>>1|0,160)|0)),DI(A,g+320|0),I=B-1|0,B;);h=g+1760|0}(I,A),A=RI(I),h=I+160|0,A}(g+96|0)&&(wg(g),yA(g,g,I=g+136|0),wg(g+48|0),sA(g+48|0,g+48|0,I),j(g,g),_(g+48|0,g+48|0,g),BA(A,g+48|0),B=0),h=g+256|0,0|B},fc:function(A,I){A|=0;var g,B=0;return h=g=h+-64|0,mI(g,I|=0,32,0),C[0|g]=248&n[0|g],C[g+31|0]=63&n[g+31|0]|64,I=i[g+20>>2],B=i[g+16>>2],C[A+16|0]=B,C[A+17|0]=B>>>8,C[A+18|0]=B>>>16,C[A+19|0]=B>>>24,C[A+20|0]=I,C[A+21|0]=I>>>8,C[A+22|0]=I>>>16,C[A+23|0]=I>>>24,I=i[g+12>>2],B=i[g+8>>2],C[A+8|0]=B,C[A+9|0]=B>>>8,C[A+10|0]=B>>>16,C[A+11|0]=B>>>24,C[A+12|0]=I,C[A+13|0]=I>>>8,C[A+14|0]=I>>>16,C[A+15|0]=I>>>24,I=i[g+4>>2],B=i[g>>2],C[0|A]=B,C[A+1|0]=B>>>8,C[A+2|0]=B>>>16,C[A+3|0]=B>>>24,C[A+4|0]=I,C[A+5|0]=I>>>8,C[A+6|0]=I>>>16,C[A+7|0]=I>>>24,I=i[g+28>>2],B=i[g+24>>2],C[A+24|0]=B,C[A+25|0]=B>>>8,C[A+26|0]=B>>>16,C[A+27|0]=B>>>24,C[A+28|0]=I,C[A+29|0]=I>>>8,C[A+30|0]=I>>>16,C[A+31|0]=I>>>24,fI(g,64),h=g- -64|0,0},gc:YI,hc:PI,ic:function(A){var I=0,g=0;if((A|=0)>>>0>=2){for(g=(0-A>>>0)%(A>>>0)|0;(I=YI())>>>0>>0;);A=(I>>>0)%(A>>>0)|0}else A=0;return 0|A},jc:cI,kc:function(A,I,g){_g(A|=0,I|=0,1784,g|=0)},lc:Ng,mc:function(){var A=0,I=0;return(A=i[9097])&&(A=i[A+20>>2])&&(I=0|Vg[0|A]()),0|I},nc:function(A,I,g){!function(A,I,g){1==(0|g)|g>>>0>1&&(t(1796,1816,197,1842),e()),cI(A,I)}(A|=0,I|=0,g|=0)},oc:function(A,I,g,B){A|=0,g|=0;var Q=0,E=0,i=0;if(!((B|=0)>>>0>2147483646|B<<1>>>0>=(I|=0)>>>0)){if(I=0,B){for(;Q=I<<1,E=(i=n[I+g|0])>>>4|0,C[Q+A|0]=87+(E+(E+65526>>>8&217)|0),E=(1|Q)+A|0,Q=15&i,C[0|E]=22272+((Q<<8)+(Q+65526&55552)|0)>>>8,(0|B)!=(0|(I=I+1|0)););I=B<<1}else I=0;return C[I+A|0]=0,0|A}OI(),e()},pc:function(A,I,g,B,Q,E,a){A|=0,I|=0,g|=0,Q|=0,E|=0,a|=0;var r=0,o=0,e=0,t=0,f=0,c=0,y=0,s=0,w=0,h=0,D=0;A:if(B|=0){I:{g:{B:for(;;){for(o=r;;){Q:{if(!(255&((w=(65526+(y=(223&(c=n[g+o|0]))-55&255)^y+65520)>>>8|0)|(e=65526+(h=48^c)>>>8|0)))){if(e=1,!Q|255&f)break g;if(gg(Q,c))break Q;r=o;break A}if(I>>>0<=t>>>0){i[8960]=68,e=0;break g}if(r=y&w|e&h,255&f?(C[A+t|0]=r|D,t=t+1|0):D=r<<4,f^=-1,e=1,(r=o+1|0)>>>0>>0)continue B;break I}if(f=0,!((o=o+1|0)>>>0>>0))break}break}r=(A=r+1|0)>>>0>>0?B:A;break A}r=o}255&f?(i[8960]=28,s=-1,r=r-1|0,t=0):e||(t=0,s=-1)}return a?i[a>>2]=g+r:(0|B)!=(0|r)&&(i[8960]=28,s=-1),E&&(i[E>>2]=t),0|s},qc:function(A,I){var g;return A|=0,pg(I|=0),A=r(g=(A>>>0)/3|0,-3)+A|0,r(4-(3-A&0-(I>>>1&1))|0,1&(A|A>>>1))+(g<<2|1)|0},rc:O,sc:W,tc:function(){var A=0;return i[9104]?A=1:(i[9086]=0,function(){var A;h=A=h-16|0,VI(A),i[A>>2]&&(VI(A),EA(36348,0,40)),h=A+16|0}(),i[9085]=1,PI(),function(){var A=0;(0|(A=0|y(30)))>=1?i[8944]=A:A=i[8944],A>>>0<=15&&(OI(),e()),cI(36400,16)}(),i[9104]=1,A=0),0|A},uc:function(A,I,g,B,Q){A|=0,I|=0,g|=0,Q|=0;var E,a=0,r=0,o=0;h=E=h-16|0;A:{if(B|=0){if(o=-1,(a=(a=B-1|0)-(r=a&B?(g>>>0)%(B>>>0)|0:g&a)|0)>>>0>=(-1^g)>>>0)break A;if(!((g=g+a|0)>>>0>=Q>>>0))for(A&&(i[A>>2]=g+1),A=I+g|0,o=0,C[E+15|0]=0,I=B>>>0>1?B:1,B=0;Q=g=A-B|0,r=n[0|g]&n[E+15|0],g=(B^a)-1>>>24|0,C[0|Q]=r|128&g,C[E+15|0]=g|n[E+15|0],(0|I)!=(0|(B=B+1|0)););}else o=-1;return h=E+16|0,0|o}OI(),e()},vc:function(A,I,g,B){A|=0,I|=0,g|=0,B|=0;var Q,C=0,E=0,a=0,r=0,o=0;if(i[12+(Q=h-16|0)>>2]=0,B-1>>>0>>0){for(o=(C=g-1|0)+I|0,g=0,I=0;r=((128^(E=n[o-g|0]))-1&i[Q+12>>2]-1&a-1)>>>8&1,i[Q+12>>2]=i[Q+12>>2]|0-r&g,I|=r,a|=E,(0|B)!=(0|(g=g+1|0)););i[A>>2]=C-i[Q+12>>2],A=I-1|0}else A=-1;return 0|A},wc:function(){return 35762},xc:function(){return 10},yc:qg,zc:Rg,Ac:function(){return 35840},Bc:k,Cc:m}}(A)}(vA)},instantiate:function(A,I){return{then:function(I){var g=new u.Module(A);I({instance:new u.Instance(g)})}}},RuntimeError:Error};function p(A,I,g,B){switch("*"===(g=g||"i8").charAt(g.length-1)&&(g="i32"),g){case"i1":case"i8":_[A>>0]=I;break;case"i16":Y[A>>1]=I;break;case"i32":b[A>>2]=I;break;case"i64":nA=[I>>>0,(iA=I,+Math.abs(iA)>=1?iA>0?(0|Math.min(+Math.floor(iA/4294967296),4294967295))>>>0:~~+Math.ceil((iA-+(~~iA>>>0))/4294967296)>>>0:0)],b[A>>2]=nA[0],b[A+4>>2]=nA[1];break;case"float":m[A>>2]=I;break;case"double":v[A>>3]=I;break;default:IA("invalid type for setValue: "+g)}}function l(A,I,g){switch("*"===(I=I||"i8").charAt(I.length-1)&&(I="i32"),I){case"i1":case"i8":return _[A>>0];case"i16":return Y[A>>1];case"i32":case"i64":return b[A>>2];case"float":return m[A>>2];case"double":return v[A>>3];default:IA("invalid type for getValue: "+I)}return null}w=[],"object"!=typeof u&&IA("no native wasm support detected");var F=!1;function G(A,I){A||IA("Assertion failed: "+I)}var k,_,H,Y,b,m,v,U="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function S(A,I,g){for(var B=I+g,Q=I;A[Q]&&!(Q>=B);)++Q;if(Q-I>16&&A.subarray&&U)return U.decode(A.subarray(I,Q));for(var C="";I>10,56320|1023&a)}}else C+=String.fromCharCode((31&E)<<6|i)}else C+=String.fromCharCode(E)}return C}function N(A,I){return A?S(H,A,I):""}function M(A,I){return A%I>0&&(A+=I-A%I),A}function d(A){k=A,Q.HEAP8=_=new Int8Array(A),Q.HEAP16=Y=new Int16Array(A),Q.HEAP32=b=new Int32Array(A),Q.HEAPU8=H=new Uint8Array(A),Q.HEAPU16=new Uint16Array(A),Q.HEAPU32=new Uint32Array(A),Q.HEAPF32=m=new Float32Array(A),Q.HEAPF64=v=new Float64Array(A)}var P,R=Q.INITIAL_MEMORY||16777216;(D=Q.wasmMemory?Q.wasmMemory:new u.Memory({initial:R/65536,maximum:32768}))&&(k=D.buffer),R=k.byteLength,d(k);var J=[],x=[],L=[],K=[];function q(){if(Q.preRun)for("function"==typeof Q.preRun&&(Q.preRun=[Q.preRun]);Q.preRun.length;)T(Q.preRun.shift());fA(J)}function X(){fA(x)}function V(){fA(L)}function W(){if(Q.postRun)for("function"==typeof Q.postRun&&(Q.postRun=[Q.postRun]);Q.postRun.length;)j(Q.postRun.shift());fA(K)}function T(A){J.unshift(A)}function j(A){K.unshift(A)}x.push({func:function(){UA()}});var Z=0,O=null,z=null;function $(A){Z++,Q.monitorRunDependencies&&Q.monitorRunDependencies(Z)}function AA(A){if(Z--,Q.monitorRunDependencies&&Q.monitorRunDependencies(Z),0==Z&&(null!==O&&(clearInterval(O),O=null),z)){var I=z;z=null,I()}}function IA(A){throw Q.onAbort&&Q.onAbort(A),h(A+=""),F=!0,A="abort("+A+"). Build with -s ASSERTIONS=1 for more info.",new u.RuntimeError(A)}function gA(A,I){return String.prototype.startsWith?A.startsWith(I):0===A.indexOf(I)}Q.preloadedImages={},Q.preloadedAudios={};var BA="data:application/octet-stream;base64,";function QA(A){return gA(A,BA)}var CA="file://";function EA(A){return gA(A,CA)}var iA,nA,aA="<<< WASM_BINARY_FILE >>>";function rA(A){try{if(A==aA&&w)return new Uint8Array(w);var I=bA(A);if(I)return I;if(t)return t(A);throw"both async and sync fetching of the wasm failed"}catch(A){IA(A)}}function oA(){if(!w&&(i||n)){if("function"==typeof fetch&&!EA(aA))return fetch(aA,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at '"+aA+"'";return A.arrayBuffer()})).catch((function(){return rA(aA)}));if(e)return new Promise((function(A,I){e(aA,(function(I){A(new Uint8Array(I))}),I)}))}return Promise.resolve().then((function(){return rA(aA)}))}function eA(){var A={a:vA};function I(A,I){var g=A.exports;Q.asm=g,P=Q.asm.h,AA()}function g(A){I(A.instance)}function B(I){return oA().then((function(I){return u.instantiate(I,A)})).then(I,(function(A){h("failed to asynchronously prepare wasm: "+A),IA(A)}))}if($(),Q.instantiateWasm)try{return Q.instantiateWasm(A,I)}catch(A){return h("Module.instantiateWasm callback failed with error: "+A),!1}return w||"function"!=typeof u.instantiateStreaming||QA(aA)||EA(aA)||"function"!=typeof fetch?B(g):fetch(aA,{credentials:"same-origin"}).then((function(I){return u.instantiateStreaming(I,A).then(g,(function(A){return h("wasm streaming compile failed: "+A),h("falling back to ArrayBuffer instantiation"),B(g)}))})),{}}QA(aA)||(aA=s(aA));var tA={1024:function(){return Q.getRandomValue()},1062:function(){if(void 0===Q.getRandomValue)try{var A="object"==typeof window?window:self,I=void 0!==A.crypto?A.crypto:A.msCrypto,g=function(){var A=new Uint32Array(1);return I.getRandomValues(A),A[0]>>>0};g(),Q.getRandomValue=g}catch(A){try{var B=require("crypto"),C=function(){var A=B.randomBytes(4);return(A[0]<<24|A[1]<<16|A[2]<<8|A[3])>>>0};C(),Q.getRandomValue=C}catch(A){throw"No secure random number generator found"}}}};function fA(A){for(;A.length>0;){var I=A.shift();if("function"!=typeof I){var g=I.func;"number"==typeof g?void 0===I.arg?P.get(g)():P.get(g)(I.arg):g(void 0===I.arg?null:I.arg)}else I(Q)}}function cA(A,I,g,B){IA("Assertion failed: "+N(A)+", at: "+[I?N(I):"unknown filename",g,B?N(B):"unknown function"])}function yA(){IA()}function sA(A,I,g){var B=GA(I,g);return tA[A].apply(null,B)}function wA(A,I,g){H.copyWithin(A,I,I+g)}function hA(){return H.length}function DA(A){try{return D.grow(A-k.byteLength+65535>>>16),d(D.buffer),1}catch(A){}}function uA(A){A>>>=0;var I=hA(),g=2147483648;if(A>g)return!1;for(var B=1;B<=4;B*=2){var Q=I*(1+.2/B);if(Q=Math.min(Q,A+100663296),DA(Math.min(g,M(Math.max(16777216,A,Q),65536))))return!0}return!1}function pA(A){return b[SA()>>2]=A,A}function lA(A){switch(A){case 30:return 16384;case 85:return 131072;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return pA(28),-1}var FA=[];function GA(A,I){var g;for(FA.length=0,I>>=2;g=H[A++];){var B=g<105;B&&1&I&&I++,FA.push(B?v[I++>>1]:b[I]),++I}return FA}var kA=!1;function _A(A){for(var I=[],g=0;g255&&(kA&&G(!1,"Character code "+B+" ("+String.fromCharCode(B)+") at offset "+g+" not in 0x00-0xFF."),B&=255),I.push(String.fromCharCode(B))}return I.join("")}var HA="function"==typeof atob?atob:function(A){var I,g,B,Q,C,E,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="",a=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{I=i.indexOf(A.charAt(a++))<<2|(Q=i.indexOf(A.charAt(a++)))>>4,g=(15&Q)<<4|(C=i.indexOf(A.charAt(a++)))>>2,B=(3&C)<<6|(E=i.indexOf(A.charAt(a++))),n+=String.fromCharCode(I),64!==C&&(n+=String.fromCharCode(g)),64!==E&&(n+=String.fromCharCode(B))}while(a0||(q(),Z>0||(Q.setStatus?(Q.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Q.setStatus("")}),1),I()}),1)):I()))}if(Q._malloc=function(){return(Q._malloc=Q.asm.Bc).apply(null,arguments)},Q._free=function(){return(Q._free=Q.asm.Cc).apply(null,arguments)},Q.setValue=p,Q.getValue=l,Q.UTF8ToString=N,z=function A(){mA||NA(),mA||(z=A)},Q.run=NA,Q.preInit)for("function"==typeof Q.preInit&&(Q.preInit=[Q.preInit]);Q.preInit.length>0;)Q.preInit.pop()();NA()}))};var g,Q=void 0!==Q?Q:{},C={};for(g in Q)Q.hasOwnProperty(g)&&(C[g]=Q[g]);var E=[],i=!1,n=!1,a=!1,r=!1;i="object"==typeof window,n="function"==typeof importScripts,a="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,r=!i&&!a&&!n;var o,e,t,f,c,y="";function s(A){return Q.locateFile?Q.locateFile(A,y):y+A}a?(y=n?require("path").dirname(y)+"/":__dirname+"/",o=function(A,I){var g=HA(A);return g?I?g:g.toString():(f||(f=require("fs")),c||(c=require("path")),A=c.normalize(A),f.readFileSync(A,I?null:"utf8"))},t=function(A){var I=o(A,!0);return I.buffer||(I=new Uint8Array(I)),F(I.buffer),I},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),E=process.argv.slice(2),"undefined"!=typeof module&&(module.exports=Q),Q.inspect=function(){return"[Emscripten Module object]"}):r?("undefined"!=typeof read&&(o=function(A){var I=HA(A);return I?GA(I):read(A)}),t=function(A){var I;return(I=HA(A))?I:"function"==typeof readbuffer?new Uint8Array(readbuffer(A)):(F("object"==typeof(I=read(A,"binary"))),I)},"undefined"!=typeof scriptArgs?E=scriptArgs:void 0!==arguments&&(E=arguments),"undefined"!=typeof print&&("undefined"==typeof console&&(console={}),console.log=print,console.warn=console.error="undefined"!=typeof printErr?printErr:print)):(i||n)&&(n?y=self.location.href:"undefined"!=typeof document&&document.currentScript&&(y=document.currentScript.src),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",o=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.send(null),I.responseText}catch(I){var g=HA(A);if(g)return GA(g);throw I}},n&&(t=function(A){try{var I=new XMLHttpRequest;return I.open("GET",A,!1),I.responseType="arraybuffer",I.send(null),new Uint8Array(I.response)}catch(I){var g=HA(A);if(g)return g;throw I}}),e=function(A,I,g){var B=new XMLHttpRequest;B.open("GET",A,!0),B.responseType="arraybuffer",B.onload=function(){if(200==B.status||0==B.status&&B.response)I(B.response);else{var Q=HA(A);Q?I(Q.buffer):g()}},B.onerror=g,B.send(null)}),Q.print;var w,h,D=Q.printErr||void 0;for(g in C)C.hasOwnProperty(g)&&(Q[g]=C[g]);function u(A,I,g,B){switch("*"===(g=g||"i8").charAt(g.length-1)&&(g="i32"),g){case"i1":case"i8":k[A>>0]=I;break;case"i16":H[A>>1]=I;break;case"i32":Y[A>>2]=I;break;case"i64":EA=[I>>>0,(CA=I,+Math.abs(CA)>=1?CA>0?(0|Math.min(+Math.floor(CA/4294967296),4294967295))>>>0:~~+Math.ceil((CA-+(~~CA>>>0))/4294967296)>>>0:0)],Y[A>>2]=EA[0],Y[A+4>>2]=EA[1];break;case"float":b[A>>2]=I;break;case"double":m[A>>3]=I;break;default:$("invalid type for setValue: "+g)}}function p(A,I,g){switch("*"===(I=I||"i8").charAt(I.length-1)&&(I="i32"),I){case"i1":case"i8":return k[A>>0];case"i16":return H[A>>1];case"i32":case"i64":return Y[A>>2];case"float":return b[A>>2];case"double":return m[A>>3];default:$("invalid type for getValue: "+I)}return null}C=null,Q.arguments&&(E=Q.arguments),Q.thisProgram&&Q.thisProgram,Q.quit&&Q.quit,Q.wasmBinary&&(w=Q.wasmBinary),Q.noExitRuntime&&Q.noExitRuntime,"object"!=typeof WebAssembly&&$("no native wasm support detected");var l=!1;function F(A,I){A||$("Assertion failed: "+I)}var G,k,_,H,Y,b,m,v="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function U(A,I,g){for(var B=I+g,Q=I;A[Q]&&!(Q>=B);)++Q;if(Q-I>16&&A.subarray&&v)return v.decode(A.subarray(I,Q));for(var C="";I>10,56320|1023&a)}}else C+=String.fromCharCode((31&E)<<6|i)}else C+=String.fromCharCode(E)}return C}function S(A,I){return A?U(_,A,I):""}function N(A,I){return A%I>0&&(A+=I-A%I),A}function M(A){G=A,Q.HEAP8=k=new Int8Array(A),Q.HEAP16=H=new Int16Array(A),Q.HEAP32=Y=new Int32Array(A),Q.HEAPU8=_=new Uint8Array(A),Q.HEAPU16=new Uint16Array(A),Q.HEAPU32=new Uint32Array(A),Q.HEAPF32=b=new Float32Array(A),Q.HEAPF64=m=new Float64Array(A)}Q.INITIAL_MEMORY;var d,P=[],R=[],J=[],x=[];function L(){if(Q.preRun)for("function"==typeof Q.preRun&&(Q.preRun=[Q.preRun]);Q.preRun.length;)V(Q.preRun.shift());eA(P)}function K(){eA(R)}function q(){eA(J)}function X(){if(Q.postRun)for("function"==typeof Q.postRun&&(Q.postRun=[Q.postRun]);Q.postRun.length;)W(Q.postRun.shift());eA(x)}function V(A){P.unshift(A)}function W(A){x.unshift(A)}R.push({func:function(){mA()}});var T=0,j=null,Z=null;function O(A){T++,Q.monitorRunDependencies&&Q.monitorRunDependencies(T)}function z(A){if(T--,Q.monitorRunDependencies&&Q.monitorRunDependencies(T),0==T&&(null!==j&&(clearInterval(j),j=null),Z)){var I=Z;Z=null,I()}}function $(A){throw Q.onAbort&&Q.onAbort(A),D(A+=""),l=!0,A="abort("+A+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(A)}function AA(A,I){return String.prototype.startsWith?A.startsWith(I):0===A.indexOf(I)}Q.preloadedImages={},Q.preloadedAudios={};var IA="data:application/octet-stream;base64,";function gA(A){return AA(A,IA)}var BA="file://";function QA(A){return AA(A,BA)}var CA,EA,iA="data:application/octet-stream;base64,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CiASfnwgCSALfnwiEUKAgIAQfCIUQhqHfCIiQoCAgAh8IiNCGYd8IhkgGUKAgIAQfCIZQoCAgOAPg30+AgggACASIBh+IA0gDn58IAkgEH58IAwgHH58IAsgF358IBNCGod8IhMgE0KAgIAIfCITQoCAgPAPg30+AhwgACAMIBp+IAkgFX58IBAgFn58IAogD358IAsgDX58IBlCGod8IgogCkKAgIAIfCIKQoCAgPAPg30+AgwgACAQIBJ+IA0gDX58IA4gD358IAkgG358IAwgF358IAsgA6wiDX58IBNCGYd8IgsgC0KAgIAQfCILQoCAgOAPg30+AiAgACAgICFCgICA8A+DfSAeIB9CgICAYIN9IApCGYd8IgpCgICAEHwiD0IaiHw+AhQgACAKIA9CgICA4A+DfT4CECAAIA4gEH4gGCAdfnwgEiAcfnwgCSAXfnwgDCANfnwgC0Iah3wiCSAJQoCAgAh8IglCgICA8A+DfT4CJCAAICIgI0KAgIDwD4N9IBEgFEKAgIBgg30gCUIZh0ITfnwiCUKAgIAQfCIMQhqIfD4CBCAAIAkgDEKAgIDgD4N9PgIACxAAIAAzAAAgADEAAkIQhoQL8wICAn8BfgJAIAJFDQAgACACaiIDQQFrIAE6AAAgACABOgAAIAJBA0kNACADQQJrIAE6AAAgACABOgABIANBA2sgAToAACAAIAE6AAIgAkEHSQ0AIANBBGsgAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkEgayICQR9LDQALCyAACwkAIAAgATcAAAuCBAEDfyACQYAETwRAIAAgASACEAQaIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAvsAQESfyACKAIEIQMgASgCBCEEIAIoAgghBSABKAIIIQYgAigCDCEHIAEoAgwhCCACKAIQIQkgASgCECEKIAIoAhQhCyABKAIUIQwgAigCGCENIAEoAhghDiACKAIcIQ8gASgCHCEQIAIoAiAhESABKAIgIRIgAigCJCETIAEoAiQhFCAAIAIoAgAgASgCAGo2AgAgACATIBRqNgIkIAAgESASajYCICAAIA8gEGo2AhwgACANIA5qNgIYIAAgCyAMajYCFCAAIAkgCmo2AhAgACAHIAhqNgIMIAAgBSAGajYCCCAAIAMgBGo2AgQLGAEBf0HEnAIoAgAiAARAIAARDgALEAIAC0ABA38gACABIAFB+ABqIgIQCyAAQShqIAFBKGoiAyABQdAAaiIEEAsgAEHQAGogBCACEAsgAEH4AGogASADEAsL7AEBEn8gAigCBCEDIAEoAgQhBCACKAIIIQUgASgCCCEGIAIoAgwhByABKAIMIQggAigCECEJIAEoAhAhCiACKAIUIQsgASgCFCEMIAIoAhghDSABKAIYIQ4gAigCHCEPIAEoAhwhECACKAIgIREg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czYCFCABIAUgEHM2AhAgASAEIA9zNgIMIAEgAyANczYCCCABIAAgC3M2AgQgASAWIBdzNgIACykBAX8jAEGAAWsiAiQAIAJBCGogARDoAiAAIAJBCGoQOSACQYABaiQACzIBAX8gACABIAFB+ABqIgIQCyAAQShqIAFBKGogAUHQAGoiARALIABB0ABqIAEgAhALC68CARN/IAEoAgQhDCAAKAIEIQMgASgCCCENIAAoAgghBCABKAIMIQ4gACgCDCEFIAEoAhAhDyAAKAIQIQYgASgCFCEQIAAoAhQhByABKAIYIREgACgCGCEIIAEoAhwhEiAAKAIcIQkgASgCICETIAAoAiAhCiABKAIkIRQgACgCJCELIABBACACayICIAAoAgAiFSABKAIAc3EgFXM2AgAgACALIAsgFHMgAnFzNgIkIAAgCiAKIBNzIAJxczYCICAAIAkgCSAScyACcXM2AhwgACAIIAggEXMgAnFzNgIYIAAgByAHIBBzIAJxczYCFCAAIAYgBiAPcyACcXM2AhAgACAFIAUgDnMgAnFzNgIMIAAgBCAEIA1zIAJxczYCCCAAIAMgAyAMcyACcXM2AgQLJAEBfyMAQSBrIgEkACABIAAQLSABQSAQZSEAIAFBIGokACAAC6YEAgp/Dn4gACgCJCEEIAAoAiAhBSAAKAIcIQYgACgCGCEHIAAoAhQhAyACQhBaBEAgAC0AUEVBGHQhCCAAKAIEIglBBWytIRkgACgCCCIKQQVsrSEXIAAoAgwiC0EFbK0hFSAAKAIQIgxBBWytIRMgDK0hGiALrSEYIAqtIRYgCa0hFCAANQIAIRIDQCABKAADQQJ2Qf///x9xIAdqrSINIBh+IAEoAABB////H3EgA2qtIg4gGn58IAEoAAZBBHZB////H3EgBmqtIg8gFn58IAEoAAlBBnYgBWqtIhAgFH58IAQgCGogASgADEEIdmqtIhEgEn58IA0gFn4gDiAYfnwgDyAUfnwgECASfnwgESATfnwgDSAUfiAOIBZ+fCAPIBJ+fCAQIBN+fCARIBV+fCANIBJ+IA4gFH58IA8gE358IBAgFX58IBEgF358IA0gE34gDiASfnwgDyAVfnwgECAXfnwgESAZfnwiDUIaiEL/////D4N8Ig5CGohC/////w+DfCIPQhqIQv////8Pg3wiEEIaiEL/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aiAFIAYQDCAJQQhqIAYQESAJQdAAaiAJQQhqQggQDCAAIAMgBCAHIAgQogEgCUHQAGogACAEEAwgCUEIaiAEEBEgCUHQAGogCUEIakIIEAwgCUHQAGogARAjIAlB0ABqQYACEAkgAgRAIAJCEDcDAAsgCUHQAmokAEEACygAIAJCgICAgBBaBEAQFAALIAAgASACIANCASAEQfCXAigCABEVABoLFgAgAELAACABIAJB6JcCKAIAEREAGgsyACAAIAIEfyACKAAABUEACzYCMCAAIAEoAAA2AjQgACABKAAENgI4IAAgASgACDYCPAs9ACAAAn8gAgRAIAAgAigAADYCMCACKAAEDAELIABBADYCMEEACzYCNCAAIAEoAAA2AjggACABKAAENgI8CxkAIAAgASACIANCASAEQeSXAigCABEVABoLKAEBfyMAQRBrIgAkACAAQQA6AA9BpgggAEEPakEAEAEaIABBEGokAAtqAQN/IwBBEGsiAyQAIANBADoAD0F/IQUgACABIAJB2JcCKAIAEQMARQRAA0AgAyAAIARqLQAAIAMtAA9yOgAPIARBAWoiBEEgRw0AC0EAIAMtAA9BAWtBCHZBAXFrIQULIANBEGokACAFCxMAIAAgAUHAB2xBoBtqIAIQ5gILEAAgAEIANwIAIABCADcCCAsdACAAEDggAEEoahAdIABB0ABqEB0gAEH4AGoQOAuAAgEIfwNAIAAgAmogASACQQN2ai0AACACQQdxdkEBcToAACACQQFqIgJBgAJHDQALA0AgBCIBQQFqIQQCQCAAIAFqIgYtAABFDQAgBCECQQEhBSABQf4BSw0AA0ACQCAAIAJqIgMsAAAiB0UNACAHIAV0IgcgBiwAACIIaiIJQQ9MBEAgBiAJOgAAIANBADoAAAwBCyAIIAdrIgNBcUgNAiAGIAM6AAADQCAAIAJqIgMtAABFBEAgA0EBOgAADAILIANBADoAACACQf8BSSEDIAJBAWohAiADDQALCyAFQQVLDQEgBUEBaiIFIAFqIgJBgAJJDQALCyAEQYACRw0ACwuVAQEEfyMAQTBrIgUkACAAIAFBKGoiAyABEBMgAEEoaiIEIAMgARAWIABB0ABqIgMgACACQShqEAsgBCAEIAIQCyAAQfgAaiIGIAJB+ABqIAFB+ABqEAsgACABQdAAaiACQdAA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CSACQYAIaiQAC/ADAQJ/IwAiAyEEIANBwANrQUBxIgMkACAARSABRXJFBEAgA0FAa0EAQQBBwAAQPhogA0E8aiABKAIwEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIEEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIsEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIoEAogA0FAayADQTxqQgQQGBogA0E8akETEAogA0FAayADQTxqQgQQGBogA0E8aiACEAogA0FAayADQTxqQgQQGBogA0E8aiABKAIMEAogA0FAayADQTxqQgQQGBoCQCABKAIIIgJFDQAgA0FAayACIAE1AgwQGBogAS0AOEEBcUUNACABKAIIIAEoAgwQCSABQQA2AgwLIANBPGogASgCFBAKIANBQGsgA0E8akIEEBgaIAEoAhAiAgRAIANBQGsgAiABNQIUEBgaCyADQTxqIAEoAhwQCiADQUBrIANBPGpCBBAYGgJAIAEoAhgiAkUNACADQUBrIAIgATUCHBAYGiABLQA4QQJxRQ0AIAEoAhggASgCHBAJIAFBADYCHAsgA0E8aiABKAIkEAogA0FAayADQTxqQgQQGBogASgCICICBEAgA0FAayACIAE1AiQQGBoLIANBQGsgAEHAABA9GgsgBCQAC68BAQN/IwBBEGsiAiQAQWohAwJAIABFIAFFcg0AIAFBCnQiBCABbkGACEcNACAAQQwQICIBNgIAIAFFDQAgAUIANwIAQYCYAiACQQxqIAQQsgEiATYCAAJAAkAgAQRAIAJBADYCDAwBCyACKAIMIgENAQsgACgCABAZIABBADYCAAwBCyAAKAIAIAE2AgAgACgCACABNgIEIAAoAgAgBDYCCEEAIQMLIAJBEGokACADC4cBAQJ/IwBB0ABrIgMkAEFnIQICQCAARSABRXINACAAIAAoAhRBA3QQICICNgIEIAJFBEBBaiECDAELIAAgACgCEBC8ASICBEAgACABKAI4EIMBDAELIAMgASAAKAIkELsBIANBQGtBCBAJIAMgABC6ASADQcgAEAlBACECCyADQdAAaiQAIAILkwEBBH8jAEEgayICJAACQCAARQ0AIAAoAhxFDQAgAiABNgIQQQEhBANAIAIgAzoAGEEAIQFBACEFIAQEQANAIAJBADYCHCACIAIpAxg3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ACAAIAEgAiADrSAErUIghoQgBSAGEGoLFwAgACABIAKtIAOtQiCGhCAEIAUQuwILFgAgACABKQAANwAwIAAgASkACDcAOAsYACAAIAEgAiADrSAErUIghoQgBSAGEGsLEwAgACABrSACrUIghoQgAxCSAgsTACAAIAEgAq0gA61CIIaEEJMCCyEAIAAgASACrSADrUIghoQgBK0gBa1CIIaEIAYgBxCUAgsfACAAIAEgAq0gA61CIIaEIAStIAWtQiCGhCAGEIwBCy0AIAAgAa0gAq1CIIaEIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChCVAgsXACAAIAEgAq0gA61CIIaEIAQgBRCzAgsSACAAIAEgAq0gA61CIIaEEDQLEgAgACABIAKtIAOtQiCGhBAlCxkAIAAgASACIAOtIAStQiCGhCAFIAYQlAELFgAgACABKQAANwAgIAAgASkACDcAKAsXACAAIAEgAq0gA61CIIaEIAQgBRC1AgsVACAAIAEgAq0gA61CIIaEIAQQtgILGQAgACABIAKtIAOtQiCGhCAEIAUgBhCVAQsXACAAIAEgAq0gA61CIIaEIAQgBRC4AgsbACAAIAEgAiADrSAErUIghoQgBSAGIAcQlgELGAAgACABIAIgA60gBK1CIIaEIAUgBhBoCxkAIAAgASACrSADrUIghoQgBCAFIAYQlwELFwAgACABIAKtIAOtQiCGhCAEIAUQuQILGwAgACABIAIgA60gBK1CIIaEIAUgBiAHEJgBCxgAIAAgASACIAOtIAStQiCGhCAFIAYQaQsVACAAIAEgAq0gA61CIIaEIAQQwAILFQAgACABIAKtIAOtQiCGhCAEEJoBCyUAIAAgASADIAStIAWtQiCGhCAGIAetIAitQiCGhCAJIAoQyQILJQAgACACIAOtIAStQiCGhCAFIAYgB60gCK1CIIaEIAkgChCcAQslACAAIAEgAiADrSAErUIghoQgBSAGrSAHrUIghoQgCSAKEMsCCycAIAAgASACIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAogCxCdAQslACAAIAEgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCSAKEM8CCyUAIAAgAiADrSAErUIghoQgBSAGIAetIAitQiCGhCAJIAoQngELJQAgACABIAMgBK0gBa1CIIaEIAYgB60gCK1CIIaEIAkgChDQAgslACAAIAIgA60gBK1CIIaEIAUgBiAHrSAIrUIghoQgCSAKEJ8BCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQ0QILJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALEKABCyUAIAAgASACIAOtIAStQiCGhCAFIAatIAetQiCGhCAJIAoQ0gILJwAgACABIAIgAyAErSAFrUIghoQgBiAHrSAIrUIghoQgCiALEKEBCwQAQQoLBgBBspcCCwsAIAAgASACEIICCw0AIAAgASACIAMQgwILCAAgABA1QQALCQAgACABEIgCCwsAIAAgASACEIoBCwUAQb9/CwUAQdABCywBAX8jAEFAaiIDJAAgACADECcgASADQsAAIAJBARCHASEAIANBQGskACAACy4BAX8jAEFAaiIEJAAgACAEECcgASACIARCwAAgA0EBEIkBIQAgBEFAayQAIAALewEBfwJAAkACQCADQsAAVA0AIANCQHwiA0K/////D1YNACACIAJBQGsiBSADIAQQhgFFDQEgAEUNACAAQQAgA6cQEBoLQX8hAiABRQ0BIAFCADcDAEF/DwsgAQRAIAEgAzcDAAtBACECIABFDQAgACAFIAOnEEcaCyACC3MBAX8jAEEQayIFJAAgACAFQQhqIABBQGsgAiADpyICEEcgAyAEEIgBGgJAIAUpAwhCwABSBEAgAQRAIAFCADcDAAsgAEEAIAJBQGsQEBpBfyEADAELQQAhACABRQ0AIAEgA0JAfTcDAAsgBUEQaiQAIAALbQEBfyMAQUBqIgIkACACIAFCIBA0GiACIAItAABB+AFxOgAAIAIgAi0AH0E/cUHAAHI6AB8gACACKQMQNwAQIAAgAikDCDcACCAAIAIpAwA3AAAgACACKQMYNwAYIAJBwAAQCSACQUBrJABBAAuGAQECfyMAQYACayICJABBfyEDAkAgARB1DQAgAkHgAGogARCuAQ0AIAJB4ABqEOUCRQ0AIAIQHSACIAIgAkGIAWoiARAWIAJBMGoQHSACQTBqIAJBMGogARATIAIgAhA6IAJBMGogAkEwaiACEAsgACACQTBqEC1BACEDCyACQYACaiQAIAMLLAEBfyMAQSBrIgIkACACQSAQHyAAIAEg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ASACQhB9IAMgBBBqBSAFCwslACACQvD///8PWgRAEBQACyAAQRBqIAAgASACIAMgBBBrGkEACwsAIAAgASACEL8CCy8AIAFCgICAgBBaBEBBACIAQYQOaiAAQZgOakHFASAAQbIOahAAAAsgACABpxAfCzMBAn8jAEEgayIDJABBfyEEIAMgAiABEKgBRQRAIABB4JUCIAMQbSEECyADQSBqJAAgBAtWAQF/IwBBQGoiAyQAIAMgAkIgEDQaIAEgAykDGDcAGCABIAMpAxA3ABAgASADKQMINwAIIAEgAykDADcAACADQcAAEAkgACABEHIhACADQUBrJAAgAAtAAQF/IwBBIGsiBCQAIAQgASACIAMQmgEaIAAgBBCAASEBIAQgAEEgEEUhAyAEQSBqJAAgA0F/IAEgACAERhtyC0MBAX8jAEFAaiICJAAgACACEMICIAEgAikDGDcAGCABIAIpAxA3ABAgASACKQMINwAIIAEgAikDADcAACACQUBrJAALNwEBfyMAQUBqIgIkACAAIAIQJyAAQdABaiIAIAJCwAAQHBogACABECcgAkHAABAJIAJBQGskAAvhAQEDfyMAQcABayICJAAgABA1IAJBQGtBNkGAARAQGiACIAEtAABBNnM6AEBBASEDA0AgAkFAayADaiIEIAQtAAAgASADai0AAHM6AAAgA0EBaiIDQSBHDQALIAAgAkFAa0KAARAcGiAAQdABaiIAEDUgAkFAa0HcAEGAARAQGiACIAEtAABB3ABzOgBAQQEhAwNAIAJBQGsgA2oiBCAELQAAIAEgA2otAABzOgAAIANBAWoiA0EgRw0ACyAAIAJBQGtCgAEQHBogAkFAa0GAARAJIAJBwAAQCSACQcABaiQAC2YBAX4gACkAACIBQjiGIAFCKIZCgICAgICAwP8Ag4QgAUIYhkKAgICAgOA/gyABQgiGQoCAgIDwH4OEhCABQgiIQoCAgPgPgyABQhiIQoCA/AeDhCABQiiIQoD+A4MgAUI4iISEhAsmAQJ/AkBBpJwCKAIAIgBFDQAgACgCFCIARQ0AIAARAQAhAQsgAQtkACAAIAFCKIZCgICAgICAwP8AgyABQjiGhCABQhiGQoCAgICA4D+DIAFCCIZCgICAgPAfg4SEIAFCCIhCgICA+A+DIAFCGIhCgID8B4OEIAFCKIhCgP4DgyABQjiIhISENwAAC4YBAQJ/AkAgACgCSEEDdkH/AHEiAkHvAE0EQCAAIAJqQdAAakHglAJB8AAgAmsQEhoMAQsgAEHQAGoiAyACakHglAJBgAEgAmsQEhogACADIAEgAUGABWoQSCADQQBB8AAQEBoLIABBwAFqIABBQGtBEBCbASAAIABB0ABqIAEgAUGABWoQSAsoAQJ/A0AgACACQQN0IgNqIAEgA2oQxAI3AwAgAkEBaiICQRBHDQALC0UBAX9BfyEIIANCEFoEQCAAIAIgA0IQfSACIAOnakEQayAEIAUgBiAHEJwBIQgLIAEEQCABQgAgA0IQfSAIGzcDAAsgCAv/AQEBfyMAQeACayIIJAAgCEEgakLAACAGIAcQcCAIQeAAaiAIQSBqECQgCEEgakHAABAJIAhB4ABqIAQgBRAMIAhB4ABqQZCPAiIEQgAgBX1CD4MQDCAIQeAAaiABIAIQDCAIQeAAaiAEQgAgAn1CD4MQDCAIQRhqIAUQESAIQeAAaiAIQRhqQggQDCAIQRhqIAIQESAIQeAAaiAIQRhqQggQDCAIQeAAaiAIECMgCEHgAGpBgAIQCSAIIAMQOyEDIAhBEBAJAkAgAEUNACADBEAgAEEAIAKnEBAaQX8hAwwBCyAAIAEgAiAGQQEgBxBvQQAhAwsgCEHgAmokACADCz0AIANC8P///w9UBEAgACAAIAOnakEAIAIgAyAEIAUgBiAHEJ0BGiABBEAgASADQhB8NwMAC0EADwsQFAAL2gEBAX8jAEHQAmsiCSQAIAlBEGpCwAAgByAIEHAgCUHQAGogCUEQahAkIAlBEGpBwAAQCSAJQdAAaiAFIAYQDCAJQdAAakGQjwIiBUIAIAZ9Qg+DEAwgACADIAQgB0EBIAgQbyAJQdAAaiAAIAQQDCAJQdAAaiAFQgAgBH1CD4MQDCAJQQhqIAYQESAJQdAAaiAJQQhqQggQDCAJQQhqIAQQESAJQdAAaiAJQQhqQggQDCAJQdAAaiABECMgCUHQAGpBgAIQCSACBEAgAkIQNwMACyAJQdACaiQACw4AIAAgAa1B+A0gAhA3CwQAQQwLRQEBf0F/IQggA0IQWgRAIAAgAiADQhB9IAIgA6dqQRBrIAQgBSAGIAcQngEhCAsgAQRAIAFCACADQhB9IAgbNwMACyAIC0UBAX9BfyEIIANCEFoEQCAAIAIgA0IQfSACIAOnakEQayAEIAUgBiAHEJ8BIQgLIAEEQCABQgAgA0IQfSAIGzcDAAsgCAs9ACADQvD///8PVARAIAAgACADp2pBACACIAMgBCAFIAYgBxCgARogAQRAIAEgA0IQfDcDAAtBAA8LEBQACz0AIANC8P///w9UBEAgACAAIAOnakEAIAIgAyAEIAUgBiAHEKEBGiABBEAgASADQhB8NwMAC0EADwsQFAALVwEBfyMAQdAAayIGJAAgAlBFBEAgBkEMaiAEEAogBkEQaiAFEEwgBkEQaiADIAZBDGoQpAEgBkEQaiABIAAgAhBLIAZBEGpBwAAQCQsgBkHQAGokAEEAC2UBAX8jAEHQAGsiBiQAIAJQRQRAIAZBCGogBKcQCiAGQQxqIARCIIinEAogBkEQaiAFEEwgBkEQaiADIAZBCGoQpQEgBkEQaiABIAAgAhBLIAZBEGpBwAAQCQsgBkHQAGokAEEAC0YBAX8jAEFAaiIEJAAgAVBFBEAgBCADEEwgBCACQQAQpAEgBCAAQQAgAacQECIAIAAgARBLIARBwAAQCQsgBEFAayQAQQALKgECfyAAQQJPBH9BACAAayAAcCEBA0AQcyICIAFJDQALIAIgAHAFIAELC0YBAX8jAEFAaiIEJAAgAVBFBEAgBCADEEwgBCACQQAQpQEgBCAAQQAgAacQECIAIAAgARBLIARBwAAQCQsgBEFAayQAQQALNQBBwJwCKAIABH9BAQVB+JsCQQA2AgAQ6gJB9JsCQQE2AgAQpwEQpwJBwJwCQQE2AgBBAAsL7QIBAn8jAEHwAGsiByQAIAJQRQRAIAcgBSkAGDcDGCAHIAUpABA3AxAgByAFKQAANwMAQQghBiAHIAUpAAg3AwggByADKQAANwNgA0AgB0HgAGogBmogBDwAACAEQgiIIQQgBkEBaiIGQRBHDQALIAJCP1YEQANAQQAhBiAHQSBqIAdB4ABqIAcQTQNAIAAgBmogB0EgaiAGai0AACABIAZqLQAAczoAAEEBIQUgBkEBaiIGQcAARw0AC0EIIQYDQCAHQeAAaiAGaiIDIAUgAy0AAGoiAzoAACADQQh2IQUgBkEBaiIGQRBHDQALIAFBQGshASAAQUBrIQAgAkJAfCICQj9WDQALCyACUEUEQEEAIQYgB0EgaiAHQeAAaiAHEE0gAqchAwNAIAAgBmogB0EgaiAGai0AACABIAZqLQAAczoAACAGQQFqIgYgA0cNAAsLIAdBIGpBwAAQCSAHQSAQCQsgB0HwAGokAEEAC5ECAgJ/AX4jAEHwAGsiBCQAIAFQRQRAIAQgAykAGDcDGCAEIAMpABA3AxAgBCADKQAANwMAIAQgAykACDcDCCACKQAAIQYgBEIANwNoIAQgBjcDYAJAIAFCwABaBEADQCAAIARB4ABqIAQQTUEIIQNBASECA0AgBEHgAGogA2oiBSACIAUtAABqIgI6AAAgAkEIdiECIANBAWoiA0EQRw0ACyAAQUBrIQAgAUJAfCIBQj9WDQALIAFQDQELQQAhAyAEQSBqIARB4ABqIAQQTSABpyECA0AgACADaiAEQSBqIANqLQAAOgAAIANBAWoiAyACRw0ACwsgBEEgakHAABAJIARBIBAJCyAEQfAAaiQAQQALmgYBIX8gAigAACESIAIoAAQhEyACKAAIIRQgAigADCEVIAIoABAhFiACKAAUIRcgAigAGCEYIAIoABwhGUHl8MGLBiECIBIhByATIQggFCERIBUhCUHuyIGZAyEOIAEoAAAiGyEKIAEoAAQiHCELIAEoAAgiHSEMIAEoAAwiHiEPQbLaiMsHIQEgFiEEQfTKgdkGIQUgGSENIBghBiAXIQMDQCACIANqQQcQCCAJcyIJIAJqQQkQCCAMcyIMIAlqQQ0QCCADcyIfIAxqQRIQCCEgIAcgDmpBBxAIIA9zIgMgDmpBCRAIIAZzIhAgA2pBDRAIIAdzIgcgEGpBEhAIIQ8gASAKakEHEAggDXMiDSABakEJEAggCHMiCCANakENEAggCnMiCiAIakESEAghISAEIAVqQQcQCCARcyIGIAVqQQkQCCALcyILIAZqQQ0QCCAEcyIiIAtqQRIQCCEjIAYgAiAgcyICakEHEAggB3MiByACakEJEAggCHMiCCAHakENEAggBnMiESAIakESEAggAnMhAiAOIA9zIgQgCWpBBxAIIApzIgogBGpBCRAIIAtzIgsgCmpBDRAIIAlzIgkgC2pBEhAIIARzIQ4gASAhcyIBIANqQQcQCCAicyIEIAFqQQkQCCAMcyIMIARqQQ0QCCADcyIPIAxqQRIQCCABcyEBIAUgI3MiBSANakEHEAggH3MiAyAFakEJEAggEHMiBiADakENEAggDXMiDSAGakESEAggBXMhBSAaQRJJIRAgGkECaiEaIBANAAsgACACQeXwwYsGahAKIABBBGogByASahAKIABBCGogCCATahAKIABBDGogESAUahAKIABBEGogCSAVahAKIABBFGogDkHuyIGZA2oQCiAAQRhqIAogG2oQCiAAQRxqIAsgHGoQCiAAQSBqIAwgHWoQCiAAQSRqIA8gHmoQCiAAQShqIAFBstqIywdqEAogAEEsaiAEIBZqEAogAEEwaiADIBdqEAogAEE0aiAGIBhqEAogAEE4aiANIBlqEAogAEE8aiAFQfTKgdkGahAKCzoBAX8jAEHgAGsiAyQAIANBMGogAiABEBMgAyACIAEQFiADIAMQOiAAIANBMGogAxALIANB4ABqJAALdgECfyMAQdABayICJAADQCAAIANqIAEgA2otAAA6AAAgA0EBaiIDQSBHDQALIAAgAC0AAEH4AXE6AAAgACAALQAfQT9xQcAAcjoAHyACQTBqIAAQdiACIAJB2ABqIAJBgAFqENwCIAAgAhAtIAJB0AFqJABBAAu9AwEMfiABNAIEIQIgATQCCCEDIAE0AgwhBCABNAIQIQUgATQCFCEGIAE0AhghByABNAIAIQsgACABNAIkQsK2B34iCCAIQoCAgAh8IghCgICA8A+DfSABNAIgQsK2B34gATQCHELCtgd+IglCgICACHwiCkIZh3wiDEKAgIAQfCINQhqIfD4CJCAAIAwgDUKAgIDgD4N9PgIgIAAgCSAKQoCAgPAPg30gB0LCtgd+IAZCwrYHfiIGQoCAgAh8IgdCGYd8IglCgICAEHwiCkIaiHw+AhwgACAJIApCgICA4A+DfT4CGCAAIAYgB0KAgIDwD4N9IAVCwrYHfiAEQsK2B34iBEKAgIAIfCIFQhmHfCIGQoCAgBB8IgdCGoh8PgIUIAAgBiAHQoCAgOAPg30+AhAgACAEIAVCgICA8A+DfSADQsK2B34gAkLCtgd+IgJCgICACHwiA0IZh3wiBEKAgIAQfCIFQhqIfD4CDCAAIAQgBUKAgIDgD4N9PgIIIAAgAiADQoCAgPAPg30gCEIZh0ITfiALQsK2B358IgJCgICAEHwiA0IaiHw+AgQgACACIANCgICA4A+DfT4CAAvcAQEFfyMAQRBrIgNBADYACyADQQA2AggDQCAAIAJqLQAAIQRBACEBA0AgA0EIaiABaiIFIAUtAAAgAUEFdEGgjQJqIAJqLQAAIARzcjoAACABQQFqIgFBB0cNAAsgAkEBaiICQR9HDQALIAAtAB9B/wBxIQJBACEAQQAhAQNAIANBCGogAWoiBCAELQAAIAIgAUEFdEG/jQJqLQAAc3I6AAAgAUEBaiIBQQdHDQALQQAhAQNAIANBCGogAGotAABBAWsgAXIhASAAQQFqIgBBB0cNAAsgAUEIdkEBcQvcBAEDfyMAQdACayIDJABBfyEEIAIQ3wJFBEBBACEEA0AgACAEaiABIARqLQAAOgAAIARBAWoiBEEgRw0ACyAAIAAtAABB+AFxOgAAIAAgAC0AH0E/cUHAAHI6AB8gA0GgAmogAhB7IANB8AFqEB0gA0HAAWoQOCADQZABaiADQaACahAsIANB4ABqEB1B/gEhAkEAIQQDQCADQfABaiADQZABaiAAIAIiBUEDdmotAAAgAkEHcXZBAXEiASAEcyIEEE4gA0HAAWogA0HgAGogBBBOIAJBAWshAiADQTBqIANBkAFqIANB4ABqEBYgAyADQfABaiADQcABahAWIANB8AFqIANB8AFqIANBwAFqEBMgA0HAAWogA0GQAWogA0HgAGoQEyADQeAAaiADQTBqIANB8AFqEAsgA0HAAWogA0HAAWogAxALIANBMGogAxAOIAMgA0HwAWoQDiADQZABaiADQeAAaiADQcABahATIANBwAFqIANB4ABqIANBwAFqEBYgA0HwAWogAyADQTBqEAsgAyADIANBMGoQFiADQcABaiADQcABahAOIANB4ABqIAMQ3gIgA0GQAWogA0GQAWoQDiADQTBqIANBMGogA0HgAGoQEyADQeAAaiADQaACaiADQcABahALIANBwAFqIAMgA0EwahALIAEhBCAFDQALIANB8AFqIANBkAFqIAEQTiADQcABaiADQeAAaiABEE4gA0HAAWogA0HAAWoQOiADQfABaiADQfABaiADQcABahALIAAgA0HwAWoQLUEAIQQLIANB0AJqJAAgBAtUAQV/QSAhAUEBIQIDQCAAIAFBAWsiAWotAAAiBCABQYAbai0AACIFa0EIdSACcSADQf8BcXIhAyAEIAVzQf//A2pBCHYgAnEhAiABDQALIANBAEcL6B4BOn4gARAPIRIg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CiAAIAtC////AIMgBEIVh3wiBkIKiDwAESAAIAZCAog8ABAgACAEQv///wCDIgdCAYYgBUIUiIQ8AA0gACAMQv///wCDIAZCFYd8IgRCDYg8ABQgACAEQgWIPAATIAAgBkL///8AgyIFQgaGIAdCD4iEPAAPIAAgDkL///8AgyAEQhWHfCIGPAAVIAAgBEIDhiAFQhKIhDwAEiAAIAZCCIg8ABYgACAPQv///wCDIAZCFYd8IgRCC4g8ABkgACAEQgOIPAAYIAAgEEL///8AgyAEQhWHfCIFQgaIPAAbIAAgBkIQiEIfgyAEQv///wCDIgRCBYaEPAAXIAAgDUL///8AgyAFQhWHfCIGQhGIPAAfIAAgBkIJiDwAHiAAIAZCAYg8AB0gACAFQv///wCDIgVCAoYgBEITiIQ8ABogACAGQgeGIAVCDoiEPAAcC1IBA38gAC0AH0F/c0H/AHEhAUEeIQIDQCABIAAgAmotAABBf3NyIQEgAkEBayIDIQIgAw0ACyABQf8BcUEBa0HsASAALQAAa3FBCHZBf3NBAXELjAQBAn8jAEHgDWsiAiQAIAJB4ANqIAEQGyACQcACaiABEE8gAiACQcACahAVIAJBwAJqIAIgAkHgA2oQGiACQaABaiACQcACahAVIAJBgAVqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBoAZqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBwAdqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJB4AhqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBgApqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBoAtqIgEgAkGgAWoQGyACQcACaiACIAEQGiACQaABaiACQcACahAVIAJBwAxqIAJBoAFqEBsgABCrAUH8ASEBA0AgAkHAAmogABBPAkAgASIDQaCLAmosAAAiAUEBTgRAIAJBoAFqIAJBwAJqEBUgAkHAAmogAkGgAWogAkHgA2ogAUH+AXFBAXZBoAFsahAaDAELIAFBf0oNACACQaABaiACQcACahAVIAJBwAJqIAJBoAFqIAJB4ANqQQAgAWtB/gFx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/////////3/t////////////////////////////////////////f+7///////////////////////////////////////9/7dP1XBpjEljWnPei3vneFABBnxsL/PABEIU7jAG98ST/+CXDAWDcNwC3TD7/w0I9ADJMpAHhpEz/TD2j/3U+HwBRkUD/dkEOAKJz1v8Gii4AfOb0/wqKjwA0GsIAuPRMAIGPKQG+9BP/e6p6/2KBRAB51ZMAVmUe/6FnmwCMWUP/7+W+AUMLtQDG8In+7kW8/+pxPP8l/zn/RbK2/oDQswB2Gn3+AwfW//EyTf9Vy8X/04f6/xkwZP+71bT+EVhpAFPRngEFc2IABK48/qs3bv/ZtRH/FLyqAJKcZv5X1q7/cnqbAeksqgB/CO8B1uzqAK8F2wAxaj3/BkLQ/wJqbv9R6hP/12vA/0OX7gATKmz/5VVxATJEh/8RagkAMmcB/1ABqAEjmB7/EKi5AThZ6P9l0vwAKfpHAMyqT/8OLu//UE3vAL3WS/8RjfkAJlBM/75VdQBW5KoAnNjQAcPPpP+WQkz/r+EQ/41QYgFM2/IAxqJyAC7amACbK/H+m6Bo/7IJ/P5kbtQADgWnAOnvo/8cl50BZZIK//6eRv5H+eQAWB4yAEQ6oP+/GGgBgUKB/8AyVf8Is4r/JvrJAHNQoACD5nEAfViTAFpExwD9TJ4AHP92AHH6/gBCSy4A5torAOV4ugGURCsAiHzuAbtrxf9UNfb/M3T+/zO7pQACEa8AQlSgAfc6HgAjQTX+Rey/AC2G9QGje90AIG4U/zQXpQC61kcA6bBgAPLvNgE5WYoAUwBU/4igZABcjnj+aHy+ALWxPv/6KVUAmIIqAWD89gCXlz/+74U+ACA4nAAtp73/joWzAYNW0wC7s5b++qoO/0RxFf/eujv/QgfxAUUGSABWnGz+N6dZAG002/4NsBf/xCxq/++VR/+kjH3/n60BADMp5wCRPiEAim9dAblTRQCQcy4AYZcQ/xjkGgAx2eIAcUvq/sGZDP+2MGD/Dg0aAIDD+f5FwTsAhCVR/n1qPADW8KkBpONCANKjTgAlNJcAY00aAO6c1f/VwNEBSS5UABRBKQE2zk8AyYOS/qpvGP+xITL+qybL/073dADR3ZkAhYCyATosGQDJJzsBvRP8ADHl0gF1u3UAtbO4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ANW7ff/oLjz/vnQq/peyE/8zPu3+zOzBAMLoPACsIp3/vRC4/mcDX/+N6ST+KRkL/xXDpgB29S0AQ9WV/58MEv+7pOMBoBkFAAxOwwErxeEAMI4p/sSbPP/fxxIBkYicAPx1qf6R4u4A7xdrAG21vP/mcDH+Sart/+e34/9Q3BQAwmt/AX/NZQAuNMUB0qsk/1gDWv84l40AYLv//ypOyAD+RkYB9H2oAMxEigF810YAZkLI/hE05AB13I/+y/h7ADgSrv+6l6T/M+jQAaDkK//5HRkBRL4/AA0AAAAA/wAAAAD1AAAAAAAA+wAAAAAAAP0AAAAA8wAAAAAHAAAAAAADAAAAAPMAAAAABQAAAAAAAAAACwAAAAAACwAAAADzAAAAAAAA/QAAAAAA/wAAAAADAAAAAPUAAAAAAAAADwAAAAAA/wAAAAD/AAAAAAcAAAAABQBBnI0CCwEBAEHAjQILAQEAQeCNAgugAeDrenw7QbiuFlbj+vGfxGraCY3rnDKx/YZiBRZfSbgAX5yVvKNQjCSx0LFVnIPvWwREXMRYHI6G2CJO3dCfEVfs////////////////////////////////////////f+3///////////////////////////////////////9/7v///////////////////////////////////////38AQaCPAgvBBQjJvPNn5glqO6fKhIWuZ7sr+JT+cvNuPPE2HV869U+l0YLmrX9SDlEfbD4rjGgFm2u9Qfur2YMfeSF+ExnN4FsirijXmC+KQs1l7yORRDdxLztN7M/7wLW824mBpdu16Ti1SPNbwlY5GdAFtvER8VmbTxmvpII/khiBbdrVXhyrQgIDo5iqB9i+b3BFAVuDEoyy5E6+hTEk4rT/1cN9DFVviXvydF2+crGWFjv+sd6ANRLHJacG3JuUJmnPdPGbwdJK8Z7BaZvk4yVPOIZHvu+11YyLxp3BD2WcrHfMoQwkdQIrWW8s6S2D5KZuqoR0StT7Qb3cqbBctVMRg9qI+Xar32buUlE+mBAytC1txjGoPyH7mMgnA7DkDu++x39Zv8KPqD3zC+DGJacKk0eRp9VvggPgUWPKBnBuDgpnKSkU/C/SRoUKtycmySZcOCEbLu0qxFr8bSxN37OVnRMNOFPeY6+LVHMKZaiydzy7Cmp25q7tRy7JwoE7NYIUhSxykmQD8Uyh6L+iATBCvEtmGqiRl/jQcItLwjC+VAajUWzHGFLv1hnoktEQqWVVJAaZ1iogcVeFNQ70uNG7MnCgahDI0NK4FsGkGVOrQVEIbDcemeuO30x3SCeoSJvhtbywNGNaycWzDBw5y4pB40qq2E5z42N3T8qcW6O4stbzby5o/LLvXe6Cj3RgLxdDb2OleHKr8KEUeMiE7DlkGggCx4woHmMj+v++kOm9gt7rbFCkFXnGsvej+b4rU3Lj8nhxxpxhJurOPifKB8LAIce4htEe6+DN1n3a6njRbu5/T331um8Xcqpn8AammMiixX1jCq4N+b4EmD8RG0ccEzULcRuEfQQj9XfbKJMkx0B7q8oyvL7JFQq+njxMDRCcxGcdQ7ZCPsu+1MVMKn5l/Jwpf1ns+tY6q2/LXxdYR0qMGURsgABB8JUCC4UBYjY0X3BvcyA8PSBiNjRfbGVuAHNvZGl1bS9jb2RlY3MuYwBzb2RpdW1fYmluMmJhc2U2NAAkYXJnb24yaWQAJGFyZ29uMmkAJHY9ACRtPQAsdD0ALHA9ACRhcmdvbjJpZCR2PQAkYXJnb24yaSR2PQAkYXJnb24yaWQkACRhcmdvbjJpJABBkJcCCyhTaWdFZDI1NTE5IG5vIEVkMjU1MTkgY29sbGlzaW9ucwEAMS4wLjE4AEG8lwILOVCOUAAAQAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQ==";function nA(A){try{if(A==iA&&w)return new Uint8Array(w);var I=HA(A);if(I)return I;if(t)return t(A);throw"both async and sync fetching of the wasm failed"}catch(A){$(A)}}function aA(){if(!w&&(i||n)){if("function"==typeof fetch&&!QA(iA))return fetch(iA,{credentials:"same-origin"}).then((function(A){if(!A.ok)throw"failed to load wasm binary file at '"+iA+"'";return A.arrayBuffer()})).catch((function(){return nA(iA)}));if(e)return new Promise((function(A,I){e(iA,(function(I){A(new Uint8Array(I))}),I)}))}return Promise.resolve().then((function(){return nA(iA)}))}function rA(){var A={a:bA};function I(A,I){var g=A.exports;Q.asm=g,M((h=Q.asm.g).buffer),d=Q.asm.h,z()}function g(A){I(A.instance)}function B(I){return aA().then((function(I){return WebAssembly.instantiate(I,A)})).then(I,(function(A){D("failed to asynchronously prepare wasm: "+A),$(A)}))}if(O(),Q.instantiateWasm)try{return Q.instantiateWasm(A,I)}catch(A){return D("Module.instantiateWasm callback failed with error: "+A),!1}return w||"function"!=typeof WebAssembly.instantiateStreaming||gA(iA)||QA(iA)||"function"!=typeof fetch?B(g):fetch(iA,{credentials:"same-origin"}).then((function(I){return WebAssembly.instantiateStreaming(I,A).then(g,(function(A){return D("wasm streaming compile failed: "+A),D("falling back to ArrayBuffer instantiation"),B(g)}))})),{}}gA(iA)||(iA=s(iA));var oA={1024:function(){return Q.getRandomValue()},1062:function(){if(void 0===Q.getRandomValue)try{var A="object"==typeof window?window:self,I=void 0!==A.crypto?A.crypto:A.msCrypto,g=function(){var A=new Uint32Array(1);return I.getRandomValues(A),A[0]>>>0};g(),Q.getRandomValue=g}catch(A){try{var B=require("crypto"),C=function(){var A=B.randomBytes(4);return(A[0]<<24|A[1]<<16|A[2]<<8|A[3])>>>0};C(),Q.getRandomValue=C}catch(A){throw"No secure random number generator found"}}}};function eA(A){for(;A.length>0;){var I=A.shift();if("function"!=typeof I){var g=I.func;"number"==typeof g?void 0===I.arg?d.get(g)():d.get(g)(I.arg):g(void 0===I.arg?null:I.arg)}else I(Q)}}function tA(A,I,g,B){$("Assertion failed: "+S(A)+", at: "+[I?S(I):"unknown filename",g,B?S(B):"unknown function"])}function fA(){$()}function cA(A,I,g){var B=lA(I,g);return oA[A].apply(null,B)}function yA(A,I,g){_.copyWithin(A,I,I+g)}function sA(){return _.length}function wA(A){try{return h.grow(A-G.byteLength+65535>>>16),M(h.buffer),1}catch(A){}}function hA(A){A>>>=0;var I=sA(),g=2147483648;if(A>g)return!1;for(var B=1;B<=4;B*=2){var Q=I*(1+.2/B);if(Q=Math.min(Q,A+100663296),wA(Math.min(g,N(Math.max(16777216,A,Q),65536))))return!0}return!1}function DA(A){return Y[vA()>>2]=A,A}function uA(A){switch(A){case 30:return 16384;case 85:return 131072;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:case 80:case 81:case 79:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"==typeof navigator&&navigator.hardwareConcurrency||1}return DA(28),-1}var pA=[];function lA(A,I){var g;for(pA.length=0,I>>=2;g=_[A++];){var B=g<105;B&&1&I&&I++,pA.push(B?m[I++>>1]:Y[I]),++I}return pA}var FA=!1;function GA(A){for(var I=[],g=0;g255&&(FA&&F(!1,"Character code "+B+" ("+String.fromCharCode(B)+") at offset "+g+" not in 0x00-0xFF."),B&=255),I.push(String.fromCharCode(B))}return I.join("")}var kA="function"==typeof atob?atob:function(A){var I,g,B,Q,C,E,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",n="",a=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{I=i.indexOf(A.charAt(a++))<<2|(Q=i.indexOf(A.charAt(a++)))>>4,g=(15&Q)<<4|(C=i.indexOf(A.charAt(a++)))>>2,B=(3&C)<<6|(E=i.indexOf(A.charAt(a++))),n+=String.fromCharCode(I),64!==C&&(n+=String.fromCharCode(g)),64!==E&&(n+=String.fromCharCode(B))}while(a0||(L(),T>0||(Q.setStatus?(Q.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Q.setStatus("")}),1),I()}),1)):I()))}if(Q._malloc=function(){return(Q._malloc=Q.asm.Bc).apply(null,arguments)},Q._free=function(){return(Q._free=Q.asm.Cc).apply(null,arguments)},Q.setValue=u,Q.getValue=p,Q.UTF8ToString=S,Z=function A(){YA||UA(),YA||(Z=A)},Q.run=UA,Q.preInit)for("function"==typeof Q.preInit&&(Q.preInit=[Q.preInit]);Q.preInit.length>0;)Q.preInit.pop()();UA()})).catch((function(){return B.useBackupModule()})),I}"function"==typeof define&&define.amd?define(["exports"],I):"object"==typeof exports&&"string"!=typeof exports.nodeName?I(exports):A.libsodium=I(A.libsodium_mod||(A.commonJsStrict={}))}(this); +module.exports = pick; -}).call(this)}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/node_modules/libsodium/dist/modules") -},{"_process":390,"buffer":69,"crypto":81,"fs":24,"path":382}],211:[function(require,module,exports){ +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],214:[function(require,module,exports){ (function (global){(function (){ /** * lodash (Custom Build) @@ -30663,7 +36389,8 @@ var FUNC_ERROR_TEXT = 'Expected a function'; var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; +var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; /** `Object#toString` result references. */ var funcTag = '[object Function]', @@ -30688,6 +36415,9 @@ var reEscapeChar = /\\(\\)?/g; /** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\[object .+?Constructor\]$/; +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; @@ -31077,6 +36807,24 @@ MapCache.prototype.get = mapCacheGet; MapCache.prototype.has = mapCacheHas; MapCache.prototype.set = mapCacheSet; +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + object[key] = value; + } +} + /** * Gets the index at which the `key` is found in `array` of key-value pairs. * @@ -31095,26 +36843,6 @@ function assocIndexOf(array, key) { return -1; } -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = isKey(path, object) ? [path] : castPath(path); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - /** * The base implementation of `_.isNative` without bad shim checks. * @@ -31131,6 +36859,46 @@ function baseIsNative(value) { return pattern.test(toSource(value)); } +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = isKey(path, object) ? [path] : castPath(path); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; +} + /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. @@ -31185,9 +36953,24 @@ function getMapData(map, key) { * @param {string} key The key of the method to get. * @returns {*} Returns the function if it's native, else `undefined`. */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); } /** @@ -31548,3355 +37331,3570 @@ function toString(value) { } /** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. * * @static * @memberOf _ * @since 3.7.0 * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. * @example * * var object = { 'a': [{ 'b': { 'c': 3 } }] }; * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; +function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); } -module.exports = get; +module.exports = set; }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],212:[function(require,module,exports){ -(function (global){(function (){ + +},{}],215:[function(require,module,exports){ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'); + +module.exports = DataView; + +},{"./_getNative":277,"./_root":314}],216:[function(require,module,exports){ +var hashClear = require('./_hashClear'), + hashDelete = require('./_hashDelete'), + hashGet = require('./_hashGet'), + hashHas = require('./_hashHas'), + hashSet = require('./_hashSet'); + /** - * Lodash (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 800, - HOT_SPAN = 16; +module.exports = Hash; -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; +},{"./_hashClear":285,"./_hashDelete":286,"./_hashGet":287,"./_hashHas":288,"./_hashSet":289}],217:[function(require,module,exports){ +var listCacheClear = require('./_listCacheClear'), + listCacheDelete = require('./_listCacheDelete'), + listCacheGet = require('./_listCacheGet'), + listCacheHas = require('./_listCacheHas'), + listCacheSet = require('./_listCacheSet'); -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - asyncTag = '[object AsyncFunction]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - nullTag = '[object Null]', - objectTag = '[object Object]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - undefinedTag = '[object Undefined]', - weakMapTag = '[object WeakMap]'; +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +module.exports = ListCache; + +},{"./_listCacheClear":296,"./_listCacheDelete":297,"./_listCacheGet":298,"./_listCacheHas":299,"./_listCacheSet":300}],218:[function(require,module,exports){ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); + +module.exports = Map; + +},{"./_getNative":277,"./_root":314}],219:[function(require,module,exports){ +var mapCacheClear = require('./_mapCacheClear'), + mapCacheDelete = require('./_mapCacheDelete'), + mapCacheGet = require('./_mapCacheGet'), + mapCacheHas = require('./_mapCacheHas'), + mapCacheSet = require('./_mapCacheSet'); /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag] = -typedArrayTags[setTag] = typedArrayTags[stringTag] = -typedArrayTags[weakMapTag] = false; +module.exports = MapCache; -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; +},{"./_mapCacheClear":301,"./_mapCacheDelete":302,"./_mapCacheGet":303,"./_mapCacheHas":304,"./_mapCacheSet":305}],220:[function(require,module,exports){ +var getNative = require('./_getNative'), + root = require('./_root'); -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; +/* Built-in method references that are verified to be native. */ +var Promise = getNative(root, 'Promise'); -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); +module.exports = Promise; -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; +},{"./_getNative":277,"./_root":314}],221:[function(require,module,exports){ +var getNative = require('./_getNative'), + root = require('./_root'); -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; +/* Built-in method references that are verified to be native. */ +var Set = getNative(root, 'Set'); -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; +module.exports = Set; -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports && freeGlobal.process; +},{"./_getNative":277,"./_root":314}],222:[function(require,module,exports){ +var MapCache = require('./_MapCache'), + setCacheAdd = require('./_setCacheAdd'), + setCacheHas = require('./_setCacheHas'); -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; - if (types) { - return types; + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +module.exports = SetCache; + +},{"./_MapCache":219,"./_setCacheAdd":315,"./_setCacheHas":316}],223:[function(require,module,exports){ +var ListCache = require('./_ListCache'), + stackClear = require('./_stackClear'), + stackDelete = require('./_stackDelete'), + stackGet = require('./_stackGet'), + stackHas = require('./_stackHas'), + stackSet = require('./_stackSet'); + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +module.exports = Stack; + +},{"./_ListCache":217,"./_stackClear":318,"./_stackDelete":319,"./_stackGet":320,"./_stackHas":321,"./_stackSet":322}],224:[function(require,module,exports){ +var root = require('./_root'); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; + +},{"./_root":314}],225:[function(require,module,exports){ +var root = require('./_root'); + +/** Built-in value references. */ +var Uint8Array = root.Uint8Array; + +module.exports = Uint8Array; + +},{"./_root":314}],226:[function(require,module,exports){ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var WeakMap = getNative(root, 'WeakMap'); + +module.exports = WeakMap; + +},{"./_getNative":277,"./_root":314}],227:[function(require,module,exports){ +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; } + } + return result; +} - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); +module.exports = arrayFilter; -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; +},{}],228:[function(require,module,exports){ +var baseTimes = require('./_baseTimes'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isIndex = require('./_isIndex'), + isTypedArray = require('./isTypedArray'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. + * Creates an array of the enumerable property names of the array-like `value`. * * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } } - return func.apply(thisArg, args); + return result; } +module.exports = arrayLikeKeys; + +},{"./_baseTimes":258,"./_isIndex":290,"./isArguments":337,"./isArray":338,"./isBuffer":340,"./isTypedArray":346}],229:[function(require,module,exports){ /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. * * @private - * @param {number} n The number of times to invoke `iteratee`. + * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. + * @returns {Array} Returns the new mapped array. */ -function baseTimes(n, iteratee) { +function arrayMap(array, iteratee) { var index = -1, - result = Array(n); + length = array == null ? 0 : array.length, + result = Array(length); - while (++index < n) { - result[index] = iteratee(index); + while (++index < length) { + result[index] = iteratee(array[index], index, array); } return result; } +module.exports = arrayMap; + +},{}],230:[function(require,module,exports){ /** - * The base implementation of `_.unary` without support for storing metadata. + * Appends the elements of `values` to `array`. * * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. */ -function baseUnary(func) { - return function(value) { - return func(value); - }; +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +module.exports = arrayPush; + +},{}],231:[function(require,module,exports){ +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +module.exports = arrayReduce; + +},{}],232:[function(require,module,exports){ +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; } -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} +module.exports = arraySome; +},{}],233:[function(require,module,exports){ /** - * Creates a unary function that invokes `func` with its argument transformed. + * Converts an ASCII `string` to an array. * * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; +function asciiToArray(string) { + return string.split(''); } -/** Used for built-in method references. */ -var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; +module.exports = asciiToArray; -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); +},{}],234:[function(require,module,exports){ +/** Used to match words composed of alphanumeric characters. */ +var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. */ -var nativeObjectToString = objectProto.toString; - -/** Used to infer the `Object` constructor. */ -var objectCtorString = funcToString.call(Object); - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** Built-in value references. */ -var Buffer = moduleExports ? root.Buffer : undefined, - Symbol = root.Symbol, - Uint8Array = root.Uint8Array, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, - getPrototype = overArg(Object.getPrototypeOf, Object), - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice, - symToStringTag = Symbol ? Symbol.toStringTag : undefined; - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); +function asciiWords(string) { + return string.match(reAsciiWord) || []; +} -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, - nativeMax = Math.max, - nativeNow = Date.now; +module.exports = asciiWords; -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'), - nativeCreate = getNative(Object, 'create'); +},{}],235:[function(require,module,exports){ +var eq = require('./eq'); /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. + * Gets the index at which the `key` is found in `array` of key-value pairs. * * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. */ -var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; -}()); + } + return -1; +} + +module.exports = assocIndexOf; + +},{"./eq":332}],236:[function(require,module,exports){ +var defineProperty = require('./_defineProperty'); /** - * Creates a hash object. + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. * * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. */ -function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; } } +module.exports = baseAssignValue; + +},{"./_defineProperty":269}],237:[function(require,module,exports){ +var createBaseFor = require('./_createBaseFor'); + /** - * Removes all key-value entries from the hash. + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private - * @name clear - * @memberOf Hash + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; -} +var baseFor = createBaseFor(); + +module.exports = baseFor; + +},{"./_createBaseFor":265}],238:[function(require,module,exports){ +var baseFor = require('./_baseFor'), + keys = require('./keys'); /** - * Removes `key` and its value from the hash. + * The base implementation of `_.forOwn` without support for iteratee shorthands. * * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. */ -function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); } +module.exports = baseForOwn; + +},{"./_baseFor":237,"./keys":347}],239:[function(require,module,exports){ +var castPath = require('./_castPath'), + toKey = require('./_toKey'); + /** - * Gets the hash value for `key`. + * The base implementation of `_.get` without support for default values. * * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; +function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; } - return hasOwnProperty.call(data, key) ? data[key] : undefined; + return (index && index == length) ? object : undefined; } -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); -} +module.exports = baseGet; + +},{"./_castPath":262,"./_toKey":325}],240:[function(require,module,exports){ +var arrayPush = require('./_arrayPush'), + isArray = require('./isArray'); /** - * Sets the hash `key` to `value`. + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. * * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. */ -function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); } -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; +module.exports = baseGetAllKeys; + +},{"./_arrayPush":230,"./isArray":338}],241:[function(require,module,exports){ +var Symbol = require('./_Symbol'), + getRawTag = require('./_getRawTag'), + objectToString = require('./_objectToString'); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** - * Creates an list cache object. + * The base implementation of `getTag` without fallbacks for buggy environments. * * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. */ -function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); } +module.exports = baseGetTag; + +},{"./_Symbol":224,"./_getRawTag":278,"./_objectToString":312}],242:[function(require,module,exports){ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + /** - * Removes all key-value entries from the list cache. + * The base implementation of `_.has` without support for deep paths. * * @private - * @name clear - * @memberOf ListCache + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. */ -function listCacheClear() { - this.__data__ = []; - this.size = 0; +function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); } +module.exports = baseHas; + +},{}],243:[function(require,module,exports){ /** - * Removes `key` and its value from the list cache. + * The base implementation of `_.hasIn` without support for deep paths. * * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; +function baseHasIn(object, key) { + return object != null && key in Object(object); } +module.exports = baseHasIn; + +},{}],244:[function(require,module,exports){ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + /** - * Gets the list cache value for `key`. + * The base implementation of `_.isArguments`. * * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; } +module.exports = baseIsArguments; + +},{"./_baseGetTag":241,"./isObjectLike":344}],245:[function(require,module,exports){ +var baseIsEqualDeep = require('./_baseIsEqualDeep'), + isObjectLike = require('./isObjectLike'); + /** - * Checks if a list cache value for `key` exists. + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. * * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } +module.exports = baseIsEqual; + +},{"./_baseIsEqualDeep":246,"./isObjectLike":344}],246:[function(require,module,exports){ +var Stack = require('./_Stack'), + equalArrays = require('./_equalArrays'), + equalByTag = require('./_equalByTag'), + equalObjects = require('./_equalObjects'), + getTag = require('./_getTag'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isTypedArray = require('./isTypedArray'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + /** - * Sets the list cache `key` to `value`. + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. * * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; } - return this; + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); } -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; +module.exports = baseIsEqualDeep; + +},{"./_Stack":223,"./_equalArrays":270,"./_equalByTag":271,"./_equalObjects":272,"./_getTag":280,"./isArray":338,"./isBuffer":340,"./isTypedArray":346}],247:[function(require,module,exports){ +var Stack = require('./_Stack'), + baseIsEqual = require('./_baseIsEqual'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; /** - * Creates a map cache object to store key-value pairs. + * The base implementation of `_.isMatch` without support for iteratee shorthands. * * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. */ -function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; - this.clear(); + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } } + return true; } -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; -} +module.exports = baseIsMatch; -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; -} +},{"./_Stack":223,"./_baseIsEqual":245}],248:[function(require,module,exports){ +var isFunction = require('./isFunction'), + isMasked = require('./_isMasked'), + isObject = require('./isObject'), + toSource = require('./_toSource'); /** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; -} +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); /** - * Creates a stack cache object to store key-value pairs. + * The base implementation of `_.isNative` without bad shim checks. * * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. */ -function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); } +module.exports = baseIsNative; + +},{"./_isMasked":293,"./_toSource":326,"./isFunction":341,"./isObject":343}],249:[function(require,module,exports){ +var baseGetTag = require('./_baseGetTag'), + isLength = require('./isLength'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + /** - * Removes all key-value entries from the stack. + * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private - * @name clear - * @memberOf Stack + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ -function stackClear() { - this.__data__ = new ListCache; - this.size = 0; +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } -/** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); +module.exports = baseIsTypedArray; - this.size = data.size; - return result; -} +},{"./_baseGetTag":241,"./isLength":342,"./isObjectLike":344}],250:[function(require,module,exports){ +var baseMatches = require('./_baseMatches'), + baseMatchesProperty = require('./_baseMatchesProperty'), + identity = require('./identity'), + isArray = require('./isArray'), + property = require('./property'); /** - * Gets the stack value for `key`. + * The base implementation of `_.iteratee`. * * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. */ -function stackGet(key) { - return this.__data__.get(key); +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); } +module.exports = baseIteratee; + +},{"./_baseMatches":252,"./_baseMatchesProperty":253,"./identity":336,"./isArray":338,"./property":352}],251:[function(require,module,exports){ +var isPrototype = require('./_isPrototype'), + nativeKeys = require('./_nativeKeys'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + /** - * Checks if a stack value for `key` exists. + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. */ -function stackHas(key) { - return this.__data__.has(key); +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; } +module.exports = baseKeys; + +},{"./_isPrototype":294,"./_nativeKeys":310}],252:[function(require,module,exports){ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'), + matchesStrictComparable = require('./_matchesStrictComparable'); + /** - * Sets the stack `key` to `value`. + * The base implementation of `_.matches` which doesn't clone `source`. * * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. */ -function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); } - data.set(key, value); - this.size = data.size; - return this; + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; } -// Add methods to `Stack`. -Stack.prototype.clear = stackClear; -Stack.prototype['delete'] = stackDelete; -Stack.prototype.get = stackGet; -Stack.prototype.has = stackHas; -Stack.prototype.set = stackSet; +module.exports = baseMatches; + +},{"./_baseIsMatch":247,"./_getMatchData":276,"./_matchesStrictComparable":307}],253:[function(require,module,exports){ +var baseIsEqual = require('./_baseIsEqual'), + get = require('./get'), + hasIn = require('./hasIn'), + isKey = require('./_isKey'), + isStrictComparable = require('./_isStrictComparable'), + matchesStrictComparable = require('./_matchesStrictComparable'), + toKey = require('./_toKey'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; /** - * Creates an array of the enumerable property names of the array-like `value`. + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. * * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } +function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); } - return result; + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; } +module.exports = baseMatchesProperty; + +},{"./_baseIsEqual":245,"./_isKey":291,"./_isStrictComparable":295,"./_matchesStrictComparable":307,"./_toKey":325,"./get":333,"./hasIn":335}],254:[function(require,module,exports){ /** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. + * The base implementation of `_.property` without support for deep paths. * * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. */ -function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; } +module.exports = baseProperty; + +},{}],255:[function(require,module,exports){ +var baseGet = require('./_baseGet'); + /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. + * A specialized version of `baseProperty` which supports deep paths. * * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } +function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; } +module.exports = basePropertyDeep; + +},{"./_baseGet":239}],256:[function(require,module,exports){ /** - * Gets the index at which the `key` is found in `array` of key-value pairs. + * The base implementation of `_.propertyOf` without support for deep paths. * * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; +function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; } +module.exports = basePropertyOf; + +},{}],257:[function(require,module,exports){ /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. + * The base implementation of `_.slice` without an iteratee call guard. * * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; } +module.exports = baseSlice; + +},{}],258:[function(require,module,exports){ /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. * * @private - * @param {Object} object The object to iterate over. + * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. + * @returns {Array} Returns the array of results. */ -var baseFor = createBaseFor(); +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +module.exports = baseTimes; + +},{}],259:[function(require,module,exports){ +var Symbol = require('./_Symbol'), + arrayMap = require('./_arrayMap'), + isArray = require('./isArray'), + isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; /** - * The base implementation of `getTag` without fallbacks for buggy environments. + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. * * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. + * @param {*} value The value to process. + * @returns {string} Returns the string. */ -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } +module.exports = baseToString; + +},{"./_Symbol":224,"./_arrayMap":229,"./isArray":338,"./isSymbol":345}],260:[function(require,module,exports){ /** - * The base implementation of `_.isArguments`. + * The base implementation of `_.unary` without support for storing metadata. * * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. */ -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; +function baseUnary(func) { + return function(value) { + return func(value); + }; } +module.exports = baseUnary; + +},{}],261:[function(require,module,exports){ /** - * The base implementation of `_.isNative` without bad shim checks. + * Checks if a `cache` value for `key` exists. * * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); +function cacheHas(cache, key) { + return cache.has(key); } +module.exports = cacheHas; + +},{}],262:[function(require,module,exports){ +var isArray = require('./isArray'), + isKey = require('./_isKey'), + stringToPath = require('./_stringToPath'), + toString = require('./toString'); + /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. + * Casts `value` to a path array if it's not one. * * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); } +module.exports = castPath; + +},{"./_isKey":291,"./_stringToPath":324,"./isArray":338,"./toString":356}],263:[function(require,module,exports){ +var baseSlice = require('./_baseSlice'); + /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * Casts `array` to a slice if it's needed. * * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. */ -function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; +function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); } +module.exports = castSlice; + +},{"./_baseSlice":257}],264:[function(require,module,exports){ +var root = require('./_root'); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; + +},{"./_root":314}],265:[function(require,module,exports){ /** - * The base implementation of `_.merge` without support for multiple sources. + * Creates a base function for methods like `_.forIn` and `_.forOwn`. * * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. */ -function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - stack || (stack = new Stack); - if (isObject(srcValue)) { - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) - : undefined; +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; - if (newValue === undefined) { - newValue = srcValue; + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; } - assignMergeValue(object, key, newValue); } - }, keysIn); + return object; + }; } +module.exports = createBaseFor; + +},{}],266:[function(require,module,exports){ +var castSlice = require('./_castSlice'), + hasUnicode = require('./_hasUnicode'), + stringToArray = require('./_stringToArray'), + toString = require('./toString'); + /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. + * Creates a function like `_.lowerFirst`. * * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. */ -function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = safeGet(object, key), - srcValue = safeGet(source, key), - stacked = stack.get(srcValue); +function createCaseFirst(methodName) { + return function(string) { + string = toString(string); - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; - var isCommon = newValue === undefined; + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || isFunction(objValue)) { - newValue = initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); + return chr[methodName]() + trailing; + }; } +module.exports = createCaseFirst; + +},{"./_castSlice":263,"./_hasUnicode":283,"./_stringToArray":323,"./toString":356}],267:[function(require,module,exports){ +var arrayReduce = require('./_arrayReduce'), + deburr = require('./deburr'), + words = require('./words'); + +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]"; + +/** Used to match apostrophes. */ +var reApos = RegExp(rsApos, 'g'); + /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * Creates a function like `_.camelCase`. * * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. */ -function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); +function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; } -/** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); +module.exports = createCompounder; + +},{"./_arrayReduce":231,"./deburr":331,"./words":358}],268:[function(require,module,exports){ +var basePropertyOf = require('./_basePropertyOf'); + +/** Used to map Latin Unicode letters to basic Latin letters. */ +var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' }; /** - * Creates a clone of `buffer`. + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. * * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. */ -function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); +var deburrLetter = basePropertyOf(deburredLetters); - buffer.copy(result); - return result; -} +module.exports = deburrLetter; -/** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ -function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; -} +},{"./_basePropertyOf":256}],269:[function(require,module,exports){ +var getNative = require('./_getNative'); -/** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ -function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); -} +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; +module.exports = defineProperty; - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} +},{"./_getNative":277}],270:[function(require,module,exports){ +var SetCache = require('./_SetCache'), + arraySome = require('./_arraySome'), + cacheHas = require('./_cacheHas'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; /** - * Copies properties of `source` to `object`. + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. * * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. */ -function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } var index = -1, - length = props.length; + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; - while (++index < length) { - var key = props[index]; + stack.set(array, other); + stack.set(other, array); - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; - if (newValue === undefined) { - newValue = source[key]; + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; } } - return object; + stack['delete'](array); + stack['delete'](other); + return result; } -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; +module.exports = equalArrays; - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; +},{"./_SetCache":222,"./_arraySome":232,"./_cacheHas":261}],271:[function(require,module,exports){ +var Symbol = require('./_Symbol'), + Uint8Array = require('./_Uint8Array'), + eq = require('./eq'), + equalArrays = require('./_equalArrays'), + mapToArray = require('./_mapToArray'), + setToArray = require('./_setToArray'); - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; -/** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; /** - * Gets the native function at `key` of `object`. + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -/** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. * * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ -function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; -} + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); -/** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; -} + case errorTag: + return object.name == other.name && object.message == other.message; -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} + case mapTag: + var convert = mapToArray; -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } } return false; } -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} +module.exports = equalByTag; -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} +},{"./_Symbol":224,"./_Uint8Array":225,"./_equalArrays":270,"./_mapToArray":306,"./_setToArray":317,"./eq":332}],272:[function(require,module,exports){ +var getAllKeys = require('./_getAllKeys'); -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; - return value === proto; -} +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. * * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. */ -function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; } } - return result; -} - -/** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ -function objectToString(value) { - return nativeObjectToString.call(value); -} + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); -/** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ -function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; - while (++index < length) { - array[index] = args[start + index]; + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; -} - -/** - * Gets the value at `key`, unless `key` is "__proto__" or "constructor". - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function safeGet(object, key) { - if (key === 'constructor' && typeof object[key] === 'function') { - return; + skipCtor || (skipCtor = key == 'constructor'); } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; - if (key == '__proto__') { - return; + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } } - - return object[key]; + stack['delete'](object); + stack['delete'](other); + return result; } -/** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var setToString = shortOut(baseSetToString); +module.exports = equalObjects; -/** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ -function shortOut(func) { - var count = 0, - lastCalled = 0; +},{"./_getAllKeys":274}],273:[function(require,module,exports){ +(function (global){(function (){ +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); +module.exports = freeGlobal; - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; -} +}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) + +},{}],274:[function(require,module,exports){ +var baseGetAllKeys = require('./_baseGetAllKeys'), + getSymbols = require('./_getSymbols'), + keys = require('./keys'); /** - * Converts `func` to its source code. + * Creates an array of own enumerable property names and symbols of `object`. * * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; +function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); } +module.exports = getAllKeys; + +},{"./_baseGetAllKeys":240,"./_getSymbols":279,"./keys":347}],275:[function(require,module,exports){ +var isKeyable = require('./_isKeyable'); + /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false + * Gets the data for `map`. * - * _.eq(NaN, NaN); - * // => true + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. */ -function eq(value, other) { - return value === other || (value !== value && other !== other); +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; } -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; +module.exports = getMapData; -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; +},{"./_isKeyable":292}],276:[function(require,module,exports){ +var isStrictComparable = require('./_isStrictComparable'), + keys = require('./keys'); /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true + * Gets the property names, values, and compare flags of `object`. * - * _.isArrayLike(_.noop); - * // => false + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); +function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; } +module.exports = getMatchData; + +},{"./_isStrictComparable":295,"./keys":347}],277:[function(require,module,exports){ +var baseIsNative = require('./_baseIsNative'), + getValue = require('./_getValue'); + /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false + * Gets the native function at `key` of `object`. * - * _.isArrayLikeObject(_.noop); - * // => false + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. */ -function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; } +module.exports = getNative; + +},{"./_baseIsNative":248,"./_getValue":281}],278:[function(require,module,exports){ +var Symbol = require('./_Symbol'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. */ -var isBuffer = nativeIsBuffer || stubFalse; +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * - * _.isFunction(/abc/); - * // => false + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. */ -function isFunction(value) { - if (!isObject(value)) { - return false; +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + return result; } +module.exports = getRawTag; + +},{"./_Symbol":224}],279:[function(require,module,exports){ +var arrayFilter = require('./_arrayFilter'), + stubArray = require('./stubArray'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false + * Creates an array of the own enumerable symbols of `object`. * - * _.isLength('3'); - * // => false + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} +var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +module.exports = getSymbols; + +},{"./_arrayFilter":227,"./stubArray":354}],280:[function(require,module,exports){ +var DataView = require('./_DataView'), + Map = require('./_Map'), + Promise = require('./_Promise'), + Set = require('./_Set'), + WeakMap = require('./_WeakMap'), + baseGetTag = require('./_baseGetTag'), + toSource = require('./_toSource'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + +var dataViewTag = '[object DataView]'; + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true + * Gets the `toStringTag` of `value`. * - * _.isObject(null); - * // => false + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; } +module.exports = getTag; + +},{"./_DataView":215,"./_Map":218,"./_Promise":220,"./_Set":221,"./_WeakMap":226,"./_baseGetTag":241,"./_toSource":326}],281:[function(require,module,exports){ /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false + * Gets the value at `key` of `object`. * - * _.isObjectLike(null); - * // => false + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; +function getValue(object, key) { + return object == null ? undefined : object[key]; } +module.exports = getValue; + +},{}],282:[function(require,module,exports){ +var castPath = require('./_castPath'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isIndex = require('./_isIndex'), + isLength = require('./isLength'), + toKey = require('./_toKey'); + /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true + * Checks if `path` exists on `object`. * - * _.isPlainObject(Object.create(null)); - * // => true + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. */ -function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; +function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; } - var proto = getPrototype(value); - if (proto === null) { - return true; + if (result || ++index != length) { + return result; } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return typeof Ctor == 'function' && Ctor instanceof Ctor && - funcToString.call(Ctor) == objectCtorString; + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); } +module.exports = hasPath; + +},{"./_castPath":262,"./_isIndex":290,"./_toKey":325,"./isArguments":337,"./isArray":338,"./isLength":342}],283:[function(require,module,exports){ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true + * Checks if `string` contains Unicode symbols. * - * _.isTypedArray([]); - * // => false + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +module.exports = hasUnicode; + +},{}],284:[function(require,module,exports){ +/** Used to detect strings that need a more robust regexp to match words. */ +var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; /** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } + * Checks if `string` contains a word composed of Unicode symbols. * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. */ -function toPlainObject(value) { - return copyObject(value, keysIn(value)); +function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); } +module.exports = hasUnicodeWord; + +},{}],285:[function(require,module,exports){ +var nativeCreate = require('./_nativeCreate'); + /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; + * Removes all key-value entries from the hash. * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + * @private + * @name clear + * @memberOf Hash */ -function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; } +module.exports = hashClear; + +},{"./_nativeCreate":309}],286:[function(require,module,exports){ /** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; + * Removes `key` and its value from the hash. * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ -var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); -}); +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +module.exports = hashDelete; + +},{}],287:[function(require,module,exports){ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; /** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] + * Gets the hash value for `key`. * - * console.log(objects[0] === objects[1]); - * // => true + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. */ -function constant(value) { - return function() { - return value; - }; +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; } +module.exports = hashGet; + +},{"./_nativeCreate":309}],288:[function(require,module,exports){ +var nativeCreate = require('./_nativeCreate'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + /** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; + * Checks if a hash value for `key` exists. * - * console.log(_.identity(object) === object); - * // => true + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ -function identity(value) { - return value; +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); } +module.exports = hashHas; + +},{"./_nativeCreate":309}],289:[function(require,module,exports){ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + /** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example + * Sets the hash `key` to `value`. * - * _.times(2, _.stubFalse); - * // => [false, false] + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. */ -function stubFalse() { - return false; +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; } -module.exports = merge; +module.exports = hashSet; + +},{"./_nativeCreate":309}],290:[function(require,module,exports){ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],213:[function(require,module,exports){ -(function (global){(function (){ /** - * lodash (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - symbolTag = '[object Symbol]'; + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; +module.exports = isIndex; -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; +},{}],291:[function(require,module,exports){ +var isArray = require('./isArray'), + isSymbol = require('./isSymbol'); -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. + * Checks if `value` is a property name and not a property path. * * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); +function isKey(value, object) { + if (isArray(value)) { + return false; } - return func.apply(thisArg, args); + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); } +module.exports = isKey; + +},{"./isArray":338,"./isSymbol":345}],292:[function(require,module,exports){ /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. + * Checks if `value` is suitable for use as unique object key. * * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. */ -function arrayMap(array, iteratee) { - var index = -1, - length = array ? array.length : 0, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); } +module.exports = isKeyable; + +},{}],293:[function(require,module,exports){ +var coreJsData = require('./_coreJsData'); + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + /** - * Appends the elements of `values` to `array`. + * Checks if `func` has its source masked. * * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); } +module.exports = isMasked; + +},{"./_coreJsData":264}],294:[function(require,module,exports){ /** Used for built-in method references. */ var objectProto = Object.prototype; -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ -var objectToString = objectProto.toString; +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; -/** Built-in value references. */ -var Symbol = root.Symbol, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + return value === proto; +} -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; +module.exports = isPrototype; + +},{}],295:[function(require,module,exports){ +var isObject = require('./isObject'); /** - * The base implementation of `_.flatten` with support for restricting flattening. + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. * * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; +function isStrictComparable(value) { + return value === value && !isObject(value); } +module.exports = isStrictComparable; + +},{"./isObject":343}],296:[function(require,module,exports){ /** - * The base implementation of `_.pick` without support for individual - * property identifiers. + * Removes all key-value entries from the list cache. * * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick. - * @returns {Object} Returns the new object. + * @name clear + * @memberOf ListCache */ -function basePick(object, props) { - object = Object(object); - return basePickBy(object, props, function(value, key) { - return key in object; - }); +function listCacheClear() { + this.__data__ = []; + this.size = 0; } +module.exports = listCacheClear; + +},{}],297:[function(require,module,exports){ +var assocIndexOf = require('./_assocIndexOf'); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. + * Removes `key` and its value from the list cache. * * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick from. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ -function basePickBy(object, props, predicate) { - var index = -1, - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index], - value = object[key]; +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); - if (predicate(value, key)) { - result[key] = value; - } + if (index < 0) { + return false; } - return result; + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; } +module.exports = listCacheDelete; + +},{"./_assocIndexOf":235}],298:[function(require,module,exports){ +var assocIndexOf = require('./_assocIndexOf'); + /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * Gets the list cache value for `key`. * * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. */ -function baseRest(func, start) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = array; - return apply(func, this, otherArgs); - }; + return index < 0 ? undefined : data[index][1]; } +module.exports = listCacheGet; + +},{"./_assocIndexOf":235}],299:[function(require,module,exports){ +var assocIndexOf = require('./_assocIndexOf'); + /** - * Checks if `value` is a flattenable `arguments` object or array. + * Checks if a list cache value for `key` exists. * * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ -function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; } +module.exports = listCacheHas; + +},{"./_assocIndexOf":235}],300:[function(require,module,exports){ +var assocIndexOf = require('./_assocIndexOf'); + /** - * Converts `value` to a string key if it's not a string or symbol. + * Sets the list cache `key` to `value`. * * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + return this; } +module.exports = listCacheSet; + +},{"./_assocIndexOf":235}],301:[function(require,module,exports){ +var Hash = require('./_Hash'), + ListCache = require('./_ListCache'), + Map = require('./_Map'); + /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true + * Removes all key-value entries from the map. * - * _.isArguments([1, 2, 3]); - * // => false + * @private + * @name clear + * @memberOf MapCache */ -function isArguments(value) { - // Safari 8.1 makes `arguments.callee` enumerable in strict mode. - return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && - (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; } -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; +module.exports = mapCacheClear; + +},{"./_Hash":216,"./_ListCache":217,"./_Map":218}],302:[function(require,module,exports){ +var getMapData = require('./_getMapData'); /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true + * Removes `key` and its value from the map. * - * _.isArrayLike(_.noop); - * // => false + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; } +module.exports = mapCacheDelete; + +},{"./_getMapData":275}],303:[function(require,module,exports){ +var getMapData = require('./_getMapData'); + /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false + * Gets the map value for `key`. * - * _.isArrayLikeObject(_.noop); - * // => false + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. */ -function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); +function mapCacheGet(key) { + return getMapData(this, key).get(key); } +module.exports = mapCacheGet; + +},{"./_getMapData":275}],304:[function(require,module,exports){ +var getMapData = require('./_getMapData'); + /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true + * Checks if a map value for `key` exists. * - * _.isFunction(/abc/); - * // => false + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8-9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; +function mapCacheHas(key) { + return getMapData(this, key).has(key); } +module.exports = mapCacheHas; + +},{"./_getMapData":275}],305:[function(require,module,exports){ +var getMapData = require('./_getMapData'); + /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false + * Sets the map `key` to `value`. * - * _.isLength('3'); - * // => false + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; } +module.exports = mapCacheSet; + +},{"./_getMapData":275}],306:[function(require,module,exports){ /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true + * Converts `map` to its key-value pairs. * - * _.isObject(null); - * // => false + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. */ -function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; } +module.exports = mapToArray; + +},{}],307:[function(require,module,exports){ /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. * - * _.isObjectLike(null); - * // => false + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; } +module.exports = matchesStrictComparable; + +},{}],308:[function(require,module,exports){ +var memoize = require('./memoize'); + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. * - * _.isSymbol('abc'); - * // => false + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); +function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; } -/** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ -var pick = baseRest(function(object, props) { - return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey)); -}); +module.exports = memoizeCapped; -module.exports = pick; +},{"./memoize":351}],309:[function(require,module,exports){ +var getNative = require('./_getNative'); -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],214:[function(require,module,exports){ -(function (global){(function (){ -/** - * lodash (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); -/** Used as the `TypeError` message for "Functions" methods. */ -var FUNC_ERROR_TEXT = 'Expected a function'; +module.exports = nativeCreate; -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; +},{"./_getNative":277}],310:[function(require,module,exports){ +var overArg = require('./_overArg'); -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991; +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); -/** `Object#toString` result references. */ -var funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - symbolTag = '[object Symbol]'; +module.exports = nativeKeys; -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - reLeadingDot = /^\./, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; +},{"./_overArg":313}],311:[function(require,module,exports){ +var freeGlobal = require('./_freeGlobal'); -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; + if (types) { + return types; + } -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; +module.exports = nodeUtil; -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; +},{"./_freeGlobal":273}],312:[function(require,module,exports){ +/** Used for built-in method references. */ +var objectProto = Object.prototype; -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; /** - * Gets the value at `key` of `object`. + * Converts `value` to a string using `Object.prototype.toString`. * * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. */ -function getValue(object, key) { - return object == null ? undefined : object[key]; +function objectToString(value) { + return nativeObjectToString.call(value); } +module.exports = objectToString; + +},{}],313:[function(require,module,exports){ /** - * Checks if `value` is a host object in IE < 9. + * Creates a unary function that invokes `func` with its argument transformed. * * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. */ -function isHostObject(value) { - // Many host objects are `Object` objects that can coerce to strings - // despite having improperly defined `toString` methods. - var result = false; - if (value != null && typeof value.toString != 'function') { - try { - result = !!(value + ''); - } catch (e) {} - } - return result; +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; } -/** Used for built-in method references. */ -var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; +module.exports = overArg; -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; +},{}],314:[function(require,module,exports){ +var freeGlobal = require('./_freeGlobal'); -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; +module.exports = root; + +},{"./_freeGlobal":273}],315:[function(require,module,exports){ +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. */ -var objectToString = objectProto.toString; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} -/** Built-in value references. */ -var Symbol = root.Symbol, - splice = arrayProto.splice; +module.exports = setCacheAdd; -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'), - nativeCreate = getNative(Object, 'create'); +},{}],316:[function(require,module,exports){ +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; +module.exports = setCacheHas; +},{}],317:[function(require,module,exports){ /** - * Creates a hash object. + * Converts `set` to an array of its values. * * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. */ -function Hash(entries) { +function setToArray(set) { var index = -1, - length = entries ? entries.length : 0; + result = Array(set.size); - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } + set.forEach(function(value) { + result[++index] = value; + }); + return result; } +module.exports = setToArray; + +},{}],318:[function(require,module,exports){ +var ListCache = require('./_ListCache'); + /** - * Removes all key-value entries from the hash. + * Removes all key-value entries from the stack. * * @private * @name clear - * @memberOf Hash + * @memberOf Stack */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; +function stackClear() { + this.__data__ = new ListCache; + this.size = 0; } +module.exports = stackClear; + +},{"./_ListCache":217}],319:[function(require,module,exports){ /** - * Removes `key` and its value from the hash. + * Removes `key` and its value from the stack. * * @private * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. + * @memberOf Stack * @param {string} key The key of the value to remove. * @returns {boolean} Returns `true` if the entry was removed, else `false`. */ -function hashDelete(key) { - return this.has(key) && delete this.__data__[key]; +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; } +module.exports = stackDelete; + +},{}],320:[function(require,module,exports){ /** - * Gets the hash value for `key`. + * Gets the stack value for `key`. * * @private * @name get - * @memberOf Hash + * @memberOf Stack * @param {string} key The key of the value to get. * @returns {*} Returns the entry value. */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; +function stackGet(key) { + return this.__data__.get(key); } +module.exports = stackGet; + +},{}],321:[function(require,module,exports){ /** - * Checks if a hash value for `key` exists. + * Checks if a stack value for `key` exists. * * @private * @name has - * @memberOf Hash + * @memberOf Stack * @param {string} key The key of the entry to check. * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +function stackHas(key) { + return this.__data__.has(key); } +module.exports = stackHas; + +},{}],322:[function(require,module,exports){ +var ListCache = require('./_ListCache'), + Map = require('./_Map'), + MapCache = require('./_MapCache'); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + /** - * Sets the hash `key` to `value`. + * Sets the stack `key` to `value`. * * @private * @name set - * @memberOf Hash + * @memberOf Stack * @param {string} key The key of the value to set. * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. + * @returns {Object} Returns the stack cache instance. */ -function hashSet(key, value) { +function stackSet(key, value) { var data = this.__data__; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; return this; } -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries ? entries.length : 0; +module.exports = stackSet; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} +},{"./_ListCache":217,"./_Map":218,"./_MapCache":219}],323:[function(require,module,exports){ +var asciiToArray = require('./_asciiToArray'), + hasUnicode = require('./_hasUnicode'), + unicodeToArray = require('./_unicodeToArray'); /** - * Removes all key-value entries from the list cache. + * Converts `string` to an array. * * @private - * @name clear - * @memberOf ListCache + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. */ -function listCacheClear() { - this.__data__ = []; +function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); } -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); +module.exports = stringToArray; - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - return true; -} +},{"./_asciiToArray":233,"./_hasUnicode":283,"./_unicodeToArray":327}],324:[function(require,module,exports){ +var memoizeCapped = require('./_memoizeCapped'); -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - return index < 0 ? undefined : data[index][1]; -} +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; /** - * Checks if a list cache value for `key` exists. + * Converts `string` to a property path array. * * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +module.exports = stringToPath; + +},{"./_memoizeCapped":308}],325:[function(require,module,exports){ +var isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; /** - * Sets the list cache `key` to `value`. + * Converts `value` to a string key if it's not a string or symbol. * * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - data.push([key, value]); - } else { - data[index][1] = value; +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; } - return this; + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; +module.exports = toKey; + +},{"./isSymbol":345}],326:[function(require,module,exports){ +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; /** - * Creates a map cache object to store key-value pairs. + * Converts `func` to its source code. * * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. */ -function MapCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} } + return ''; } +module.exports = toSource; + +},{}],327:[function(require,module,exports){ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + /** - * Removes all key-value entries from the map. + * Converts a Unicode `string` to an array. * * @private - * @name clear - * @memberOf MapCache + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. */ -function mapCacheClear() { - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; +function unicodeToArray(string) { + return string.match(reUnicode) || []; } +module.exports = unicodeToArray; + +},{}],328:[function(require,module,exports){ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]", + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; + +/** Used to match complex or compound words. */ +var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji +].join('|'), 'g'); + /** - * Removes `key` and its value from the map. + * Splits a Unicode `string` into an array of its words. * * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. */ -function mapCacheDelete(key) { - return getMapData(this, key)['delete'](key); +function unicodeWords(string) { + return string.match(reUnicodeWord) || []; } -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} +module.exports = unicodeWords; -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} +},{}],329:[function(require,module,exports){ +var capitalize = require('./capitalize'), + createCompounder = require('./_createCompounder'); /** - * Sets the map `key` to `value`. + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' */ -function mapCacheSet(key, value) { - getMapData(this, key).set(key, value); - return this; -} +var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); +}); -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; +module.exports = camelCase; -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - object[key] = value; - } -} +},{"./_createCompounder":267,"./capitalize":330}],330:[function(require,module,exports){ +var toString = require('./toString'), + upperFirst = require('./upperFirst'); /** - * Gets the index at which the `key` is found in `array` of key-value pairs. + * Converts the first character of `string` to upper case and the remaining + * to lower case. * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; -} - -/** - * The base implementation of `_.isNative` without bad shim checks. + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. + * _.capitalize('FRED'); + * // => 'Fred' */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); +function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); } -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = isKey(path, object) ? [path] : castPath(path); +module.exports = capitalize; - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; +},{"./toString":356,"./upperFirst":357}],331:[function(require,module,exports){ +var deburrLetter = require('./_deburrLetter'), + toString = require('./toString'); - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; +/** Used to match Latin Unicode letters (excluding mathematical operators). */ +var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; -} +/** Used to compose unicode character classes. */ +var rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange; + +/** Used to compose unicode capture groups. */ +var rsCombo = '[' + rsComboRange + ']'; /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} +var reComboMark = RegExp(rsCombo, 'g'); /** - * Casts `value` to a path array if it's not one. + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast property path array. + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' */ -function castPath(value) { - return isArray(value) ? value : stringToPath(value); +function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); } +module.exports = deburr; + +},{"./_deburrLetter":268,"./toString":356}],332:[function(require,module,exports){ /** - * Gets the data for `map`. + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; +function eq(value, other) { + return value === other || (value !== value && other !== other); } +module.exports = eq; + +},{}],333:[function(require,module,exports){ +var baseGet = require('./_baseGet'); + /** - * Gets the native function at `key` of `object`. + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. * - * @private + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -/** - * Checks if `value` is a valid array-like index. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' */ -function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; } +module.exports = get; + +},{"./_baseGet":239}],334:[function(require,module,exports){ +var baseHas = require('./_baseHas'), + hasPath = require('./_hasPath'); + /** - * Checks if `value` is a property name and not a property path. + * Checks if `path` is a direct property of `object`. * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false */ -function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); +function has(object, path) { + return object != null && hasPath(object, path, baseHas); } +module.exports = has; + +},{"./_baseHas":242,"./_hasPath":282}],335:[function(require,module,exports){ +var baseHasIn = require('./_baseHasIn'), + hasPath = require('./_hasPath'); + /** - * Checks if `value` is suitable for use as unique object key. + * Checks if `path` is a direct or inherited property of `object`. * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); +function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); } +module.exports = hasIn; + +},{"./_baseHasIn":243,"./_hasPath":282}],336:[function(require,module,exports){ /** - * Checks if `func` has its source masked. + * This method returns the first argument it receives. * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); +function identity(value) { + return value; } -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = memoize(function(string) { - string = toString(string); +module.exports = identity; - var result = []; - if (reLeadingDot.test(string)) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); +},{}],337:[function(require,module,exports){ +var baseIsArguments = require('./_baseIsArguments'), + isObjectLike = require('./isObjectLike'); -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; /** - * Converts `func` to its source code. + * Checks if `value` is likely an `arguments` object. * - * @private - * @param {Function} func The function to process. - * @returns {string} Returns the source code. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; +module.exports = isArguments; + +},{"./_baseIsArguments":244,"./isObjectLike":344}],338:[function(require,module,exports){ /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `delete`, `get`, `has`, and `set`. + * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] + * _.isArray([1, 2, 3]); + * // => true * - * object.a = 2; - * values(object); - * // => [1, 2] + * _.isArray(document.body.children); + * // => false * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] + * _.isArray('abc'); + * // => false * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; + * _.isArray(_.noop); + * // => false */ -function memoize(func, resolver) { - if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; +var isArray = Array.isArray; - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result); - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; -} +module.exports = isArray; -// Assign cache to `_.memoize`. -memoize.Cache = MapCache; +},{}],339:[function(require,module,exports){ +var isFunction = require('./isFunction'), + isLength = require('./isLength'); /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); + * _.isArrayLike([1, 2, 3]); * // => true * - * _.eq(object, other); - * // => false + * _.isArrayLike(document.body.children); + * // => true * - * _.eq('a', 'a'); + * _.isArrayLike('abc'); * // => true * - * _.eq('a', Object('a')); + * _.isArrayLike(_.noop); * // => false - * - * _.eq(NaN, NaN); - * // => true */ -function eq(value, other) { - return value === other || (value !== value && other !== other); +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); } +module.exports = isArrayLike; + +},{"./isFunction":341,"./isLength":342}],340:[function(require,module,exports){ +var root = require('./_root'), + stubFalse = require('./stubFalse'); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + /** - * Checks if `value` is classified as an `Array` object. + * Checks if `value` is a buffer. * * @static * @memberOf _ - * @since 0.1.0 + * @since 4.3.0 * @category Lang * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * - * _.isArray([1, 2, 3]); + * _.isBuffer(new Buffer(2)); * // => true * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); + * _.isBuffer(new Uint8Array(2)); * // => false */ -var isArray = Array.isArray; +var isBuffer = nativeIsBuffer || stubFalse; + +module.exports = isBuffer; + +},{"./_root":314,"./stubFalse":355}],341:[function(require,module,exports){ +var baseGetTag = require('./_baseGetTag'), + isObject = require('./isObject'); + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. @@ -34916,12 +40914,55 @@ var isArray = Array.isArray; * // => false */ function isFunction(value) { + if (!isObject(value)) { + return false; + } // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8-9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +module.exports = isFunction; + +},{"./_baseGetTag":241,"./isObject":343}],342:[function(require,module,exports){ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } +module.exports = isLength; + +},{}],343:[function(require,module,exports){ /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) @@ -34949,9 +40990,12 @@ function isFunction(value) { */ function isObject(value) { var type = typeof value; - return !!value && (type == 'object' || type == 'function'); + return value != null && (type == 'object' || type == 'function'); } +module.exports = isObject; + +},{}],344:[function(require,module,exports){ /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". @@ -34977,9 +41021,18 @@ function isObject(value) { * // => false */ function isObjectLike(value) { - return !!value && typeof value == 'object'; + return value != null && typeof value == 'object'; } +module.exports = isObjectLike; + +},{}],345:[function(require,module,exports){ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + /** * Checks if `value` is classified as a `Symbol` primitive or object. * @@ -34999,42983 +41052,43824 @@ function isObjectLike(value) { */ function isSymbol(value) { return typeof value == 'symbol' || - (isObjectLike(value) && objectToString.call(value) == symbolTag); + (isObjectLike(value) && baseGetTag(value) == symbolTag); } +module.exports = isSymbol; + +},{"./_baseGetTag":241,"./isObjectLike":344}],346:[function(require,module,exports){ +var baseIsTypedArray = require('./_baseIsTypedArray'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. + * Checks if `value` is classified as a typed array. * * @static * @memberOf _ - * @since 4.0.0 + * @since 3.0.0 * @category Lang - * @param {*} value The value to process. - * @returns {string} Returns the string. + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' + * _.isTypedArray(new Uint8Array); + * // => true * - * _.toString([1, 2, 3]); - * // => '1,2,3' + * _.isTypedArray([]); + * // => false */ -function toString(value) { - return value == null ? '' : baseToString(value); -} +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +module.exports = isTypedArray; + +},{"./_baseIsTypedArray":249,"./_baseUnary":260,"./_nodeUtil":311}],347:[function(require,module,exports){ +var arrayLikeKeys = require('./_arrayLikeKeys'), + baseKeys = require('./_baseKeys'), + isArrayLike = require('./isArrayLike'); /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. + * Creates an array of the own enumerable property names of `object`. * - * **Note:** This method mutates `object`. + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. * * @static + * @since 0.1.0 * @memberOf _ - * @since 3.7.0 * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. * @example * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ -function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); -} - -module.exports = set; - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],215:[function(require,module,exports){ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var DataView = getNative(root, 'DataView'); - -module.exports = DataView; - -},{"./_getNative":277,"./_root":314}],216:[function(require,module,exports){ -var hashClear = require('./_hashClear'), - hashDelete = require('./_hashDelete'), - hashGet = require('./_hashGet'), - hashHas = require('./_hashHas'), - hashSet = require('./_hashSet'); - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -module.exports = Hash; - -},{"./_hashClear":285,"./_hashDelete":286,"./_hashGet":287,"./_hashHas":288,"./_hashSet":289}],217:[function(require,module,exports){ -var listCacheClear = require('./_listCacheClear'), - listCacheDelete = require('./_listCacheDelete'), - listCacheGet = require('./_listCacheGet'), - listCacheHas = require('./_listCacheHas'), - listCacheSet = require('./_listCacheSet'); - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -module.exports = ListCache; - -},{"./_listCacheClear":296,"./_listCacheDelete":297,"./_listCacheGet":298,"./_listCacheHas":299,"./_listCacheSet":300}],218:[function(require,module,exports){ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'); - -module.exports = Map; - -},{"./_getNative":277,"./_root":314}],219:[function(require,module,exports){ -var mapCacheClear = require('./_mapCacheClear'), - mapCacheDelete = require('./_mapCacheDelete'), - mapCacheGet = require('./_mapCacheGet'), - mapCacheHas = require('./_mapCacheHas'), - mapCacheSet = require('./_mapCacheSet'); - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -module.exports = MapCache; - -},{"./_mapCacheClear":301,"./_mapCacheDelete":302,"./_mapCacheGet":303,"./_mapCacheHas":304,"./_mapCacheSet":305}],220:[function(require,module,exports){ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Promise = getNative(root, 'Promise'); - -module.exports = Promise; - -},{"./_getNative":277,"./_root":314}],221:[function(require,module,exports){ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Set = getNative(root, 'Set'); - -module.exports = Set; - -},{"./_getNative":277,"./_root":314}],222:[function(require,module,exports){ -var MapCache = require('./_MapCache'), - setCacheAdd = require('./_setCacheAdd'), - setCacheHas = require('./_setCacheHas'); - -/** + * function Foo() { + * this.a = 1; + * this.b = 2; + * } * - * Creates an array cache object to store unique values. + * Foo.prototype.c = 3; * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; -SetCache.prototype.has = setCacheHas; - -module.exports = SetCache; - -},{"./_MapCache":219,"./_setCacheAdd":315,"./_setCacheHas":316}],223:[function(require,module,exports){ -var ListCache = require('./_ListCache'), - stackClear = require('./_stackClear'), - stackDelete = require('./_stackDelete'), - stackGet = require('./_stackGet'), - stackHas = require('./_stackHas'), - stackSet = require('./_stackSet'); - -/** - * Creates a stack cache object to store key-value pairs. + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. + * _.keys('hi'); + * // => ['0', '1'] */ -function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; -} - -// Add methods to `Stack`. -Stack.prototype.clear = stackClear; -Stack.prototype['delete'] = stackDelete; -Stack.prototype.get = stackGet; -Stack.prototype.has = stackHas; -Stack.prototype.set = stackSet; +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} -module.exports = Stack; +module.exports = keys; -},{"./_ListCache":217,"./_stackClear":318,"./_stackDelete":319,"./_stackGet":320,"./_stackHas":321,"./_stackSet":322}],224:[function(require,module,exports){ -var root = require('./_root'); +},{"./_arrayLikeKeys":228,"./_baseKeys":251,"./isArrayLike":339}],348:[function(require,module,exports){ +(function (global){(function (){ +/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { -/** Built-in value references. */ -var Symbol = root.Symbol; + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; -module.exports = Symbol; + /** Used as the semantic version number. */ + var VERSION = '4.17.21'; -},{"./_root":314}],225:[function(require,module,exports){ -var root = require('./_root'); + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; -/** Built-in value references. */ -var Uint8Array = root.Uint8Array; + /** Error message constants. */ + var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', + FUNC_ERROR_TEXT = 'Expected a function', + INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; -module.exports = Uint8Array; + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; -},{"./_root":314}],226:[function(require,module,exports){ -var getNative = require('./_getNative'), - root = require('./_root'); + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; -/* Built-in method references that are verified to be native. */ -var WeakMap = getNative(root, 'WeakMap'); + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; -module.exports = WeakMap; + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; -},{"./_getNative":277,"./_root":314}],227:[function(require,module,exports){ -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; -module.exports = arrayFilter; + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; -},{}],228:[function(require,module,exports){ -var baseTimes = require('./_baseTimes'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isIndex = require('./_isIndex'), - isTypedArray = require('./isTypedArray'); + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; -/** Used for built-in method references. */ -var objectProto = Object.prototype; + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; -module.exports = arrayLikeKeys; + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + domExcTag = '[object DOMException]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; -},{"./_baseTimes":258,"./_isIndex":290,"./isArguments":337,"./isArray":338,"./isBuffer":340,"./isTypedArray":346}],229:[function(require,module,exports){ -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; -module.exports = arrayMap; + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); -},{}],230:[function(require,module,exports){ -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; -module.exports = arrayPush; + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); -},{}],231:[function(require,module,exports){ -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; + /** Used to match leading whitespace. */ + var reTrimStart = /^\s+/; - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} + /** Used to match a single whitespace character. */ + var reWhitespace = /\s/; -module.exports = arrayReduce; + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; -},{}],232:[function(require,module,exports){ -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; + /** Used to match words composed of alphanumeric characters. */ + var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} + /** + * Used to validate the `validate` option in `_.template` variable. + * + * Forbids characters which could potentially change the meaning of the function argument definition: + * - "()," (modification of function parameters) + * - "=" (default value) + * - "[]{}" (destructuring of function parameters) + * - "/" (beginning of a comment) + * - whitespace + */ + var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; -module.exports = arraySome; + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; -},{}],233:[function(require,module,exports){ -/** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function asciiToArray(string) { - return string.split(''); -} + /** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; -module.exports = asciiToArray; + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; -},{}],234:[function(require,module,exports){ -/** Used to match words composed of alphanumeric characters. */ -var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; -/** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ -function asciiWords(string) { - return string.match(reAsciiWord) || []; -} + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; -module.exports = asciiWords; + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; -},{}],235:[function(require,module,exports){ -var eq = require('./eq'); + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; -} + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; -module.exports = assocIndexOf; + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; -},{"./eq":332}],236:[function(require,module,exports){ -var defineProperty = require('./_defineProperty'); + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; -module.exports = baseAssignValue; + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; -},{"./_defineProperty":269}],237:[function(require,module,exports){ -var createBaseFor = require('./_createBaseFor'); + /** Used to compose unicode capture groups. */ + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; -/** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseFor = createBaseFor(); + /** Used to compose unicode regexes. */ + var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; -module.exports = baseFor; + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); -},{"./_createBaseFor":265}],238:[function(require,module,exports){ -var baseFor = require('./_baseFor'), - keys = require('./keys'); + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); -} + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to match complex or compound words. */ + var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji + ].join('|'), 'g'); -module.exports = baseForOwn; + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); -},{"./_baseFor":237,"./keys":347}],239:[function(require,module,exports){ -var castPath = require('./_castPath'), - toKey = require('./_toKey'); + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = castPath(path, object); + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', + '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; - var index = 0, - length = path.length; + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; -} + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; -module.exports = baseGet; + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; -},{"./_castPath":262,"./_toKey":325}],240:[function(require,module,exports){ -var arrayPush = require('./_arrayPush'), - isArray = require('./isArray'); + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); -} + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; -module.exports = baseGetAllKeys; + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; -},{"./_arrayPush":230,"./isArray":338}],241:[function(require,module,exports){ -var Symbol = require('./_Symbol'), - getRawTag = require('./_getRawTag'), - objectToString = require('./_objectToString'); + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; -/** `Object#toString` result references. */ -var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; -/** Built-in value references. */ -var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; -/** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); -} + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; -module.exports = baseGetTag; + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); -},{"./_Symbol":224,"./_getRawTag":278,"./_objectToString":312}],242:[function(require,module,exports){ -/** Used for built-in method references. */ -var objectProto = Object.prototype; + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); -} + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; -module.exports = baseHas; + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; -},{}],243:[function(require,module,exports){ -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; -module.exports = baseHasIn; + if (types) { + return types; + } -},{}],244:[function(require,module,exports){ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]'; + /* Node.js helper references. */ + var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, + nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; -} + /*--------------------------------------------------------------------------*/ -module.exports = baseIsArguments; + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } -},{"./_baseGetTag":241,"./isObjectLike":344}],245:[function(require,module,exports){ -var baseIsEqualDeep = require('./_baseIsEqualDeep'), - isObjectLike = require('./isObjectLike'); + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; } - if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { - return value !== value && other !== other; + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} -module.exports = baseIsEqual; + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; -},{"./_baseIsEqualDeep":246,"./isObjectLike":344}],246:[function(require,module,exports){ -var Stack = require('./_Stack'), - equalArrays = require('./_equalArrays'), - equalByTag = require('./_equalByTag'), - equalObjects = require('./_equalObjects'), - getTag = require('./_getTag'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isTypedArray = require('./isTypedArray'); + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1; + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } -/** Used for built-in method references. */ -var objectProto = Object.prototype; + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = objIsArr ? arrayTag : getTag(object), - othTag = othIsArr ? arrayTag : getTag(other); + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; + while (++index < length) { + result[index] = iteratee(array[index], index, array); } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + return result; } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + while (++index < length) { + array[offset + index] = values[index]; } + return array; } - if (!isSameTag) { - return false; + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; } - stack || (stack = new Stack); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} -module.exports = baseIsEqualDeep; + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } -},{"./_Stack":223,"./_equalArrays":270,"./_equalByTag":271,"./_equalObjects":272,"./_getTag":280,"./isArray":338,"./isBuffer":340,"./isTypedArray":346}],247:[function(require,module,exports){ -var Stack = require('./_Stack'), - baseIsEqual = require('./_baseIsEqual'); + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); - if (object == null) { - return !length; + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } + + /** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function asciiWords(string) { + return string.match(reAsciiWord) || []; } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; return false; } - } + }); + return result; } - return true; -} -module.exports = baseIsMatch; + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); -},{"./_Stack":223,"./_baseIsEqual":245}],248:[function(require,module,exports){ -var isFunction = require('./isFunction'), - isMasked = require('./_isMasked'), - isObject = require('./isObject'), - toSource = require('./_toSource'); + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto = Object.prototype; + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + /** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ + function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; + } -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} -module.exports = baseIsNative; + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } -},{"./_isMasked":293,"./_toSource":326,"./isFunction":341,"./isObject":343}],249:[function(require,module,exports){ -var baseGetTag = require('./_baseGetTag'), - isLength = require('./isLength'), - isObjectLike = require('./isObjectLike'); + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; + /** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag] = -typedArrayTags[setTag] = typedArrayTags[stringTag] = -typedArrayTags[weakMapTag] = false; + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; + } -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; -} + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); -module.exports = baseIsTypedArray; + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } -},{"./_baseGetTag":241,"./isLength":342,"./isObjectLike":344}],250:[function(require,module,exports){ -var baseMatches = require('./_baseMatches'), - baseMatchesProperty = require('./_baseMatchesProperty'), - identity = require('./identity'), - isArray = require('./isArray'), - property = require('./property'); + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; + /** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ + function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; } - if (value == null) { - return identity; + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); } - return property(value); -} -module.exports = baseIteratee; + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } -},{"./_baseMatches":252,"./_baseMatchesProperty":253,"./identity":336,"./isArray":338,"./property":352}],251:[function(require,module,exports){ -var isPrototype = require('./_isPrototype'), - nativeKeys = require('./_nativeKeys'); + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; -/** Used for built-in method references. */ -var objectProto = Object.prototype; + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } } + return result; } - return result; -} -module.exports = baseKeys; + /** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + var deburrLetter = basePropertyOf(deburredLetters); -},{"./_isPrototype":294,"./_nativeKeys":310}],252:[function(require,module,exports){ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'), - matchesStrictComparable = require('./_matchesStrictComparable'); + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; -} -module.exports = baseMatches; + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } -},{"./_baseIsMatch":247,"./_getMatchData":276,"./_matchesStrictComparable":307}],253:[function(require,module,exports){ -var baseIsEqual = require('./_baseIsEqual'), - get = require('./get'), - hasIn = require('./hasIn'), - isKey = require('./_isKey'), - isStrictComparable = require('./_isStrictComparable'), - matchesStrictComparable = require('./_matchesStrictComparable'), - toKey = require('./_toKey'); + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; + /** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ + function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); + } -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; -} -module.exports = baseMatchesProperty; + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); -},{"./_baseIsEqual":245,"./_isKey":291,"./_isStrictComparable":295,"./_matchesStrictComparable":307,"./_toKey":325,"./get":333,"./hasIn":335}],254:[function(require,module,exports){ -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } -module.exports = baseProperty; + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } -},{}],255:[function(require,module,exports){ -var baseGet = require('./_baseGet'); + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; -} + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } -module.exports = basePropertyDeep; + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); -},{"./_baseGet":239}],256:[function(require,module,exports){ -/** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; -} + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } -module.exports = basePropertyOf; + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); -},{}],257:[function(require,module,exports){ -/** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ -function baseSlice(array, start, end) { - var index = -1, - length = array.length; + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; + } - if (start < 0) { - start = -start > length ? 0 : (length + start); + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; } - end = end > length ? length : end; - if (end < 0) { - end += length; + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); } - return result; -} -module.exports = baseSlice; + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } -},{}],258:[function(require,module,exports){ -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedEndIndex(string) { + var index = string.length; - while (++index < n) { - result[index] = iteratee(index); + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; } - return result; -} -module.exports = baseTimes; + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } -},{}],259:[function(require,module,exports){ -var Symbol = require('./_Symbol'), - arrayMap = require('./_arrayMap'), - isArray = require('./isArray'), - isSymbol = require('./isSymbol'); + /** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function unicodeWords(string) { + return string.match(reUnicodeWord) || []; + } -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; + /*--------------------------------------------------------------------------*/ -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + var runInContext = (function runInContext(context) { + context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} + /** Built-in constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; -module.exports = baseToString; + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; -},{"./_Symbol":224,"./_arrayMap":229,"./isArray":338,"./isSymbol":345}],260:[function(require,module,exports){ -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} + /** Used to detect overreaching core-js shims. */ + var coreJsData = context['__core-js_shared__']; -module.exports = baseUnary; + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; -},{}],261:[function(require,module,exports){ -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; -module.exports = cacheHas; + /** Used to generate unique IDs. */ + var idCounter = 0; -},{}],262:[function(require,module,exports){ -var isArray = require('./isArray'), - isKey = require('./_isKey'), - stringToPath = require('./_stringToPath'), - toString = require('./toString'); + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); -} + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; -module.exports = castPath; + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); -},{"./_isKey":291,"./_stringToPath":324,"./isArray":338,"./toString":356}],263:[function(require,module,exports){ -var baseSlice = require('./_baseSlice'); + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; -/** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ -function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); -} + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); -module.exports = castSlice; + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, + symIterator = Symbol ? Symbol.iterator : undefined, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; -},{"./_baseSlice":257}],264:[function(require,module,exports){ -var root = require('./_root'); + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; + /** Mocked built-ins. */ + var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, + ctxNow = Date && Date.now !== root.Date.now && Date.now, + ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; -module.exports = coreJsData; + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; -},{"./_root":314}],265:[function(require,module,exports){ -/** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; + /* Built-in method references that are verified to be native. */ + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; -module.exports = createBaseFor; + /** Used to lookup unminified function names. */ + var realNames = {}; -},{}],266:[function(require,module,exports){ -var castSlice = require('./_castSlice'), - hasUnicode = require('./_hasUnicode'), - stringToArray = require('./_stringToArray'), - toString = require('./toString'); + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); -/** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ -function createCaseFirst(methodName) { - return function(string) { - string = toString(string); + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; + /*------------------------------------------------------------------------*/ - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); - return chr[methodName]() + trailing; - }; -} + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } -module.exports = createCaseFirst; + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } -},{"./_castSlice":263,"./_hasUnicode":283,"./_stringToArray":323,"./toString":356}],267:[function(require,module,exports){ -var arrayReduce = require('./_arrayReduce'), - deburr = require('./deburr'), - words = require('./words'); + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { -/** Used to compose unicode capture groups. */ -var rsApos = "['\u2019]"; + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, -/** Used to match apostrophes. */ -var reApos = RegExp(rsApos, 'g'); + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, -/** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ -function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; -} + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, -module.exports = createCompounder; + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', -},{"./_arrayReduce":231,"./deburr":331,"./words":358}],268:[function(require,module,exports){ -var basePropertyOf = require('./_basePropertyOf'); + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { -/** Used to map Latin Unicode letters to basic Latin letters. */ -var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', - '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', - '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', - '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', - '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', - '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', - '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', - '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', - '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', - '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', - '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', - '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', - '\u0134': 'J', '\u0135': 'j', - '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', - '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', - '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', - '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', - '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', - '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', - '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', - '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', - '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', - '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', - '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', - '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', - '\u0163': 't', '\u0165': 't', '\u0167': 't', - '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', - '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', - '\u0174': 'W', '\u0175': 'w', - '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', - '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', - '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', - '\u0132': 'IJ', '\u0133': 'ij', - '\u0152': 'Oe', '\u0153': 'oe', - '\u0149': "'n", '\u017f': 's' -}; + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; -/** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ -var deburrLetter = basePropertyOf(deburredLetters); + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; -module.exports = deburrLetter; + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; -},{"./_basePropertyOf":256}],269:[function(require,module,exports){ -var getNative = require('./_getNative'); + /*------------------------------------------------------------------------*/ -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } -module.exports = defineProperty; + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } -},{"./_getNative":277}],270:[function(require,module,exports){ -var SetCache = require('./_SetCache'), - arraySome = require('./_arraySome'), - cacheHas = require('./_cacheHas'); + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + outer: + while (length-- && resIndex < takeCount) { + index += dir; - stack.set(array, other); - stack.set(other, array); + var iterIndex = -1, + value = array[index]; - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; } - })) { - result = false; - break; + } + } + result[resIndex++] = value; } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; + return result; } - } - stack['delete'](array); - stack['delete'](other); - return result; -} -module.exports = equalArrays; + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; -},{"./_SetCache":222,"./_arraySome":232,"./_cacheHas":261}],271:[function(require,module,exports){ -var Symbol = require('./_Symbol'), - Uint8Array = require('./_Uint8Array'), - eq = require('./eq'), - equalArrays = require('./_equalArrays'), - mapToArray = require('./_mapToArray'), - setToArray = require('./_setToArray'); + /*------------------------------------------------------------------------*/ -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; } - object = object.buffer; - other = other.buffer; + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } - case errorTag: - return object.name == other.name && object.message == other.message; + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); + /*------------------------------------------------------------------------*/ - case mapTag: - var convert = mapToArray; + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); - if (object.size != other.size && !isPartial) { + if (index < 0) { return false; } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); } - bitmask |= COMPARE_UNORDERED_FLAG; + --this.size; + return true; + } - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} + return index < 0 ? undefined : data[index][1]; + } -module.exports = equalByTag; + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } -},{"./_Symbol":224,"./_Uint8Array":225,"./_equalArrays":270,"./_mapToArray":306,"./_setToArray":317,"./eq":332}],272:[function(require,module,exports){ -var getAllKeys = require('./_getAllKeys'); + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1; + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } -/** Used for built-in method references. */ -var objectProto = Object.prototype; + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + /*------------------------------------------------------------------------*/ -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = getAllKeys(object), - objLength = objProps.length, - othProps = getAllKeys(other), - othLength = othProps.length; + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } } - } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -module.exports = equalObjects; - -},{"./_getAllKeys":274}],273:[function(require,module,exports){ -(function (global){(function (){ -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -module.exports = freeGlobal; - -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],274:[function(require,module,exports){ -var baseGetAllKeys = require('./_baseGetAllKeys'), - getSymbols = require('./_getSymbols'), - keys = require('./keys'); - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); -} -module.exports = getAllKeys; - -},{"./_baseGetAllKeys":240,"./_getSymbols":279,"./keys":347}],275:[function(require,module,exports){ -var isKeyable = require('./_isKeyable'); - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } -module.exports = getMapData; + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } -},{"./_isKeyable":292}],276:[function(require,module,exports){ -var isStrictComparable = require('./_isStrictComparable'), - keys = require('./keys'); + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = keys(object), - length = result.length; + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } - while (length--) { - var key = result[length], - value = object[key]; + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; - result[length] = [key, value, isStrictComparable(value)]; - } - return result; -} + /*------------------------------------------------------------------------*/ -module.exports = getMatchData; + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; -},{"./_isStrictComparable":295,"./keys":347}],277:[function(require,module,exports){ -var baseIsNative = require('./_baseIsNative'), - getValue = require('./_getValue'); + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } -module.exports = getNative; + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } -},{"./_baseIsNative":248,"./_getValue":281}],278:[function(require,module,exports){ -var Symbol = require('./_Symbol'); + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; -/** Used for built-in method references. */ -var objectProto = Object.prototype; + /*------------------------------------------------------------------------*/ -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } -/** Built-in value references. */ -var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); -/** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ -function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; + this.size = data.size; + return result; + } - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; } - } - return result; -} -module.exports = getRawTag; + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; -},{"./_Symbol":224}],279:[function(require,module,exports){ -var arrayFilter = require('./_arrayFilter'), - stubArray = require('./stubArray'); + /*------------------------------------------------------------------------*/ -/** Used for built-in method references. */ -var objectProto = Object.prototype; + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; + /** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ + function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; + } -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = !nativeGetSymbols ? stubArray : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return arrayFilter(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; + /** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); + } -module.exports = getSymbols; + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } -},{"./_arrayFilter":227,"./stubArray":354}],280:[function(require,module,exports){ -var DataView = require('./_DataView'), - Map = require('./_Map'), - Promise = require('./_Promise'), - Set = require('./_Set'), - WeakMap = require('./_WeakMap'), - baseGetTag = require('./_baseGetTag'), - toSource = require('./_toSource'); + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - setTag = '[object Set]', - weakMapTag = '[object WeakMap]'; + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } -var dataViewTag = '[object DataView]'; + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } -/** Used to detect maps, sets, and weakmaps. */ -var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } -/** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -var getTag = baseGetTag; + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } -// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. -if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); + } - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; } } - return result; - }; -} - -module.exports = getTag; -},{"./_DataView":215,"./_Map":218,"./_Promise":220,"./_Set":221,"./_WeakMap":226,"./_baseGetTag":241,"./_toSource":326}],281:[function(require,module,exports){ -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; -module.exports = getValue; + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } -},{}],282:[function(require,module,exports){ -var castPath = require('./_castPath'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isIndex = require('./_isIndex'), - isLength = require('./isLength'), - toKey = require('./_toKey'); + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = castPath(path, object); + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; - var index = -1, - length = path.length, - result = false; + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); -} + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); -module.exports = hasPath; + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } -},{"./_castPath":262,"./_isIndex":290,"./_toKey":325,"./isArguments":337,"./isArray":338,"./isLength":342}],283:[function(require,module,exports){ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ + function baseConforms(source) { + var props = keys(source); + return function(object) { + return baseConformsTo(object, source, props); + }; + } -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} + /** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ + function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; -module.exports = hasUnicode; + if ((value === undefined && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; + } -},{}],284:[function(require,module,exports){ -/** Used to detect strings that need a more robust regexp to match words. */ -var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } -/** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ -function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); -} + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; -module.exports = hasUnicodeWord; + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); -},{}],285:[function(require,module,exports){ -var nativeCreate = require('./_nativeCreate'); + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; -} + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); -module.exports = hashClear; + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); -},{"./_nativeCreate":309}],286:[function(require,module,exports){ -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; -} + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } -module.exports = hashDelete; + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; -},{}],287:[function(require,module,exports){ -var nativeCreate = require('./_nativeCreate'); + while (++index < length) { + var value = array[index], + current = iteratee(value); -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } -/** Used for built-in method references. */ -var objectProto = Object.prototype; + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; -} + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } -module.exports = hashGet; + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; -},{"./_nativeCreate":309}],288:[function(require,module,exports){ -var nativeCreate = require('./_nativeCreate'); + predicate || (predicate = isFlattenable); + result || (result = []); -/** Used for built-in method references. */ -var objectProto = Object.prototype; + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); -} + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); -module.exports = hashHas; + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } -},{"./_nativeCreate":309}],289:[function(require,module,exports){ -var nativeCreate = require('./_nativeCreate'); + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); + } -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; -} + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); -module.exports = hashSet; + var index = 0, + length = path.length; -},{"./_nativeCreate":309}],290:[function(require,module,exports){ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } -module.exports = isIndex; + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); + } -},{}],291:[function(require,module,exports){ -var isArray = require('./isArray'), - isSymbol = require('./isSymbol'); + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; + /** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; -module.exports = isKey; + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; -},{"./isArray":338,"./isSymbol":345}],292:[function(require,module,exports){ -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} + var index = -1, + seen = caches[0]; -module.exports = isKeyable; + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; -},{}],293:[function(require,module,exports){ -var coreJsData = require('./_coreJsData'); + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined : apply(func, object, args); + } -module.exports = isMasked; + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } -},{"./_coreJsData":264}],294:[function(require,module,exports){ -/** Used for built-in method references. */ -var objectProto = Object.prototype; + /** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ + function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; + } -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } - return value === proto; -} + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } -module.exports = isPrototype; + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); -},{}],295:[function(require,module,exports){ -var isObject = require('./isObject'); + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !isObject(value); -} + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; -module.exports = isStrictComparable; + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); -},{"./isObject":343}],296:[function(require,module,exports){ -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; - this.size = 0; -} + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; -module.exports = listCacheClear; + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } -},{}],297:[function(require,module,exports){ -var assocIndexOf = require('./_assocIndexOf'); + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } -/** Used for built-in method references. */ -var arrayProto = Array.prototype; + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; -/** Built-in value references. */ -var splice = arrayProto.splice; + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; -} + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } -module.exports = listCacheDelete; + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } -},{"./_assocIndexOf":235}],298:[function(require,module,exports){ -var assocIndexOf = require('./_assocIndexOf'); + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } - return index < 0 ? undefined : data[index][1]; -} + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } -module.exports = listCacheGet; + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } -},{"./_assocIndexOf":235}],299:[function(require,module,exports){ -var assocIndexOf = require('./_assocIndexOf'); + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; -module.exports = listCacheHas; + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } -},{"./_assocIndexOf":235}],300:[function(require,module,exports){ -var assocIndexOf = require('./_assocIndexOf'); + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + stack || (stack = new Stack); + if (isObject(srcValue)) { + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; -module.exports = listCacheSet; + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } -},{"./_assocIndexOf":235}],301:[function(require,module,exports){ -var Hash = require('./_Hash'), - ListCache = require('./_ListCache'), - Map = require('./_Map'); + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; -} + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; -module.exports = mapCacheClear; + var isCommon = newValue === undefined; -},{"./_Hash":216,"./_ListCache":217,"./_Map":218}],302:[function(require,module,exports){ -var getMapData = require('./_getMapData'); + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; -} + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); + } -module.exports = mapCacheDelete; + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } -},{"./_getMapData":275}],303:[function(require,module,exports){ -var getMapData = require('./_getMapData'); + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = arrayMap(iteratees, function(iteratee) { + if (isArray(iteratee)) { + return function(value) { + return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); + } + } + return iteratee; + }); + } else { + iteratees = [identity]; + } -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} + var index = -1; + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); -module.exports = mapCacheGet; + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); -},{"./_getMapData":275}],304:[function(require,module,exports){ -var getMapData = require('./_getMapData'); + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); + } -module.exports = mapCacheHas; + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; -},{"./_getMapData":275}],305:[function(require,module,exports){ -var getMapData = require('./_getMapData'); + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; + } - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; -} + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } -module.exports = mapCacheSet; + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; -},{"./_getMapData":275}],306:[function(require,module,exports){ -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } -module.exports = mapToArray; + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; -},{}],307:[function(require,module,exports){ -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} -module.exports = matchesStrictComparable; + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } -},{}],308:[function(require,module,exports){ -var memoize = require('./memoize'); + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ + function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); + return result; } - return key; - }); - - var cache = result.cache; - return result; -} -module.exports = memoizeCapped; + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } -},{"./memoize":351}],309:[function(require,module,exports){ -var getNative = require('./_getNative'); + /** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ + function baseSample(collection) { + return arraySample(values(collection)); + } -/* Built-in method references that are verified to be native. */ -var nativeCreate = getNative(Object, 'create'); + /** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); + } -module.exports = nativeCreate; + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); -},{"./_getNative":277}],310:[function(require,module,exports){ -var overArg = require('./_overArg'); + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object); + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; -module.exports = nativeKeys; + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } -},{"./_overArg":313}],311:[function(require,module,exports){ -var freeGlobal = require('./_freeGlobal'); + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values(collection)); + } -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports && freeGlobal.process; + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; - if (types) { - return types; + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; } - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); - -module.exports = nodeUtil; - -},{"./_freeGlobal":273}],312:[function(require,module,exports){ -/** Used for built-in method references. */ -var objectProto = Object.prototype; + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } -/** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ -function objectToString(value) { - return nativeObjectToString.call(value); -} + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; -module.exports = objectToString; + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; -},{}],313:[function(require,module,exports){ -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } -module.exports = overArg; + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + var low = 0, + high = array == null ? 0 : array.length; + if (high === 0) { + return 0; + } -},{}],314:[function(require,module,exports){ -var freeGlobal = require('./_freeGlobal'); + value = iteratee(value); + var valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } -module.exports = root; + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; -},{"./_freeGlobal":273}],315:[function(require,module,exports){ -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } -module.exports = setCacheAdd; + /** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ + function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; + } -},{}],316:[function(require,module,exports){ -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } -module.exports = setCacheHas; + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; -},{}],317:[function(require,module,exports){ -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } -module.exports = setToArray; + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } -},{}],318:[function(require,module,exports){ -var ListCache = require('./_ListCache'); + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } -/** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ -function stackClear() { - this.__data__ = new ListCache; - this.size = 0; -} + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; -module.exports = stackClear; + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} -},{"./_ListCache":217}],319:[function(require,module,exports){ -/** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } - this.size = data.size; - return result; -} + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } -module.exports = stackDelete; + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); -},{}],320:[function(require,module,exports){ -/** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function stackGet(key) { - return this.__data__.get(key); -} + while (++index < length) { + var array = arrays[index], + othIndex = -1; -module.exports = stackGet; + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } -},{}],321:[function(require,module,exports){ -/** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function stackHas(key) { - return this.__data__.has(key); -} + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; -module.exports = stackHas; + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } -},{}],322:[function(require,module,exports){ -var ListCache = require('./_ListCache'), - Map = require('./_Map'), - MapCache = require('./_MapCache'); + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } -/** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ -function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; -} -module.exports = stackSet; + /** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + var castRest = baseRest; -},{"./_ListCache":217,"./_Map":218,"./_MapCache":219}],323:[function(require,module,exports){ -var asciiToArray = require('./_asciiToArray'), - hasUnicode = require('./_hasUnicode'), - unicodeToArray = require('./_unicodeToArray'); + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } -/** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); -} + /** + * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * + * @private + * @param {number|Object} id The timer id or timeout object of the timer to clear. + */ + var clearTimeout = ctxClearTimeout || function(id) { + return root.clearTimeout(id); + }; -module.exports = stringToArray; + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); -},{"./_asciiToArray":233,"./_hasUnicode":283,"./_unicodeToArray":327}],324:[function(require,module,exports){ -var memoizeCapped = require('./_memoizeCapped'); + buffer.copy(result); + return result; + } -/** Used to match property names within property paths. */ -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } -module.exports = stringToPath; + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } -},{"./_memoizeCapped":308}],325:[function(require,module,exports){ -var isSymbol = require('./isSymbol'); + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); -module.exports = toKey; + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } -},{"./isSymbol":345}],326:[function(require,module,exports){ -/** Used for built-in method references. */ -var funcProto = Function.prototype; + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; -module.exports = toSource; + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } -},{}],327:[function(require,module,exports){ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } -/** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function unicodeToArray(string) { - return string.match(reUnicode) || []; -} + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); -module.exports = unicodeToArray; + var index = -1, + length = props.length; -},{}],328:[function(require,module,exports){ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + while (++index < length) { + var key = props[index]; -/** Used to compose unicode capture groups. */ -var rsApos = "['\u2019]", - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; -/** Used to compose unicode regexes. */ -var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', - rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', - rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } -/** Used to match complex or compound words. */ -var reUnicodeWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', - rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, - rsUpper + '+' + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji -].join('|'), 'g'); + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } -/** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ -function unicodeWords(string) { - return string.match(reUnicodeWord) || []; -} + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); + } -module.exports = unicodeWords; + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; -},{}],329:[function(require,module,exports){ -var capitalize = require('./capitalize'), - createCompounder = require('./_createCompounder'); + return func(collection, setter, getIteratee(iteratee, 2), accumulator); + }; + } -/** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ -var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); -}); + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; -module.exports = camelCase; + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; -},{"./_createCompounder":267,"./capitalize":330}],330:[function(require,module,exports){ -var toString = require('./toString'), - upperFirst = require('./upperFirst'); + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } -/** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ -function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); -} + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); -module.exports = capitalize; + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } -},{"./toString":356,"./upperFirst":357}],331:[function(require,module,exports){ -var deburrLetter = require('./_deburrLetter'), - toString = require('./toString'); + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; -/** Used to match Latin Unicode letters (excluding mathematical operators). */ -var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } -/** Used to compose unicode character classes. */ -var rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange; + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); -/** Used to compose unicode capture groups. */ -var rsCombo = '[' + rsComboRange + ']'; + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } -/** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ -var reComboMark = RegExp(rsCombo, 'g'); + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); -/** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ -function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); -} + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; -module.exports = deburr; + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); -},{"./_deburrLetter":268,"./toString":356}],332:[function(require,module,exports){ -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); -module.exports = eq; + return chr[methodName]() + trailing; + }; + } -},{}],333:[function(require,module,exports){ -var baseGet = require('./_baseGet'); + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; -} + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } -module.exports = get; + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); -},{"./_baseGet":239}],334:[function(require,module,exports){ -var baseHas = require('./_baseHas'), - hasPath = require('./_hasPath'); + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && hasPath(object, path, baseHas); -} + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); -module.exports = has; + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } -},{"./_baseHas":242,"./_hasPath":282}],335:[function(require,module,exports){ -var baseHasIn = require('./_baseHasIn'), - hasPath = require('./_hasPath'); + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = getIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); -} + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return flatRest(function(funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; -module.exports = hasIn; + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; -},{"./_baseHasIn":243,"./_hasPath":282}],336:[function(require,module,exports){ -/** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity(value) { - return value; -} + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; -module.exports = identity; + if (data && isLaziable(data[0]) && + data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; -},{}],337:[function(require,module,exports){ -var baseIsArguments = require('./_baseIsArguments'), - isObjectLike = require('./isObjectLike'); + if (wrapper && args.length == 1 && isArray(value)) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; -/** Used for built-in method references. */ -var objectProto = Object.prototype; + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtor(func); -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; -module.exports = isArguments; + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } -},{"./_baseIsArguments":244,"./isObjectLike":344}],338:[function(require,module,exports){ -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } -module.exports = isArray; + /** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ + function createMathOperation(operator, defaultValue) { + return function(value, other) { + var result; + if (value === undefined && other === undefined) { + return defaultValue; + } + if (value !== undefined) { + result = value; + } + if (other !== undefined) { + if (result === undefined) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; + } -},{}],339:[function(require,module,exports){ -var isFunction = require('./isFunction'), - isLength = require('./isLength'); + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ + function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(length, chars) { + chars = chars === undefined ? ' ' : baseToString(chars); -module.exports = isArrayLike; + var charsLength = chars.length; + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars; + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); + return hasUnicode(chars) + ? castSlice(stringToArray(result), 0, length).join('') + : result.slice(0, length); + } -},{"./isFunction":341,"./isLength":342}],340:[function(require,module,exports){ -var root = require('./_root'), - stubFalse = require('./stubFalse'); + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } -/** Built-in value references. */ -var Buffer = moduleExports ? root.Buffer : undefined; + /** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ + function createRelationalOperation(operator) { + return function(value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; + } -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = nativeIsBuffer || stubFalse; + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); -module.exports = isBuffer; + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; -},{"./_root":314,"./stubFalse":355}],341:[function(require,module,exports){ -var baseGetTag = require('./_baseGetTag'), - isObject = require('./isObject'); + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } -/** `Object#toString` result references. */ -var asyncTag = '[object AsyncFunction]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); + if (precision && nativeIsFinite(number)) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; -} + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } -module.exports = isFunction; + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; -},{"./_baseGetTag":241,"./isObject":343}],342:[function(require,module,exports){ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; + /** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ + function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; + } -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; -module.exports = isLength; + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; -},{}],343:[function(require,module,exports){ -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); -module.exports = isObject; + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; -},{}],344:[function(require,module,exports){ -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); -module.exports = isObjectLike; + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } -},{}],345:[function(require,module,exports){ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); + /** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ + function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; + } -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); -} + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; + } -module.exports = isSymbol; + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; -},{"./_baseGetTag":241,"./isObjectLike":344}],346:[function(require,module,exports){ -var baseIsTypedArray = require('./_baseIsTypedArray'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + stack.set(array, other); + stack.set(other, array); -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } -module.exports = isTypedArray; + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; -},{"./_baseIsTypedArray":249,"./_baseUnary":260,"./_nodeUtil":311}],347:[function(require,module,exports){ -var arrayLikeKeys = require('./_arrayLikeKeys'), - baseKeys = require('./_baseKeys'), - isArrayLike = require('./isArrayLike'); + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); -} + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); -module.exports = keys; + case errorTag: + return object.name == other.name && object.message == other.message; -},{"./_arrayLikeKeys":228,"./_baseKeys":251,"./isArrayLike":339}],348:[function(require,module,exports){ -(function (global){(function (){ -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -;(function() { + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; + case mapTag: + var convert = mapToArray; - /** Used as the semantic version number. */ - var VERSION = '4.17.21'; + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); - /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; - /** Error message constants. */ - var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', - FUNC_ERROR_TEXT = 'Expected a function', - INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__'; + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } - /** Used as the maximum memoize cache size. */ - var MAX_MEMOIZE_SIZE = 500; + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; - /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); - /** Used to compose bitmasks for cloning. */ - var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; - /** Used to compose bitmasks for value comparisons. */ - var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; - /** Used to compose bitmasks for function metadata. */ - var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_BOUND_FLAG = 4, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256, - WRAP_FLIP_FLAG = 512; + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } - /** Used as default options for `_.truncate`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...'; + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 800, - HOT_SPAN = 16; + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } - /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2, - LAZY_WHILE_FLAG = 3; + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); + } - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991, - MAX_INTEGER = 1.7976931348623157e+308, - NAN = 0 / 0; + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; - /** Used to associate wrap methods with their bit flags. */ - var wrapFlags = [ - ['ary', WRAP_ARY_FLAG], - ['bind', WRAP_BIND_FLAG], - ['bindKey', WRAP_BIND_KEY_FLAG], - ['curry', WRAP_CURRY_FLAG], - ['curryRight', WRAP_CURRY_RIGHT_FLAG], - ['flip', WRAP_FLIP_FLAG], - ['partial', WRAP_PARTIAL_FLAG], - ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], - ['rearg', WRAP_REARG_FLAG] - ]; + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - asyncTag = '[object AsyncFunction]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - domExcTag = '[object DOMException]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - nullTag = '[object Null]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - undefinedTag = '[object Undefined]', - weakMapTag = '[object WeakMap]', - weakSetTag = '[object WeakSet]'; + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; + /** + * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, + * this function returns the custom method, otherwise it returns `baseIteratee`. + * If arguments are provided, the chosen function is invoked with them and + * its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } - /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } - /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, - reUnescapedHtml = /[&<>"']/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; - /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g; + while (length--) { + var key = result[length], + value = object[key]; - /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } - /** Used to match leading whitespace. */ - var reTrimStart = /^\s+/; + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; - /** Used to match a single whitespace character. */ - var reWhitespace = /\s/; + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} - /** Used to match wrap detail comments. */ - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, - reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & /; + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } - /** Used to match words composed of alphanumeric characters. */ - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; - /** - * Used to validate the `validate` option in `_.template` variable. - * - * Forbids characters which could potentially change the meaning of the function argument definition: - * - "()," (modification of function parameters) - * - "=" (default value) - * - "[]{}" (destructuring of function parameters) - * - "/" (beginning of a comment) - * - whitespace - */ - var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; + }; - /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; - /** - * Used to match - * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). - */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; + while (++index < length) { + var data = transforms[index], + size = data.size; - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; + } - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); - /** Used to match Latin Unicode letters (excluding mathematical operators). */ - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + var index = -1, + length = path.length, + result = false; - /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/; + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } - /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } - /** Used to compose unicode capture groups. */ - var rsApos = "['\u2019]", - rsAstral = '[' + rsAstralRange + ']', - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } - /** Used to compose unicode regexes. */ - var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', - rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', - rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); - /** Used to match apostrophes. */ - var reApos = RegExp(rsApos, 'g'); + case boolTag: + case dateTag: + return new Ctor(+object); - /** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ - var reComboMark = RegExp(rsCombo, 'g'); + case dataViewTag: + return cloneDataView(object, isDeep); - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); - /** Used to match complex or compound words. */ - var reUnicodeWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', - rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, - rsUpper + '+' + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji - ].join('|'), 'g'); + case mapTag: + return new Ctor; - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + case numberTag: + case stringTag: + return new Ctor(object); - /** Used to detect strings that need a more robust regexp to match words. */ - var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + case regexpTag: + return cloneRegExp(object); - /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', - 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', - 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', - 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', - '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' - ]; + case setTag: + return new Ctor; - /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1; + case symbolTag: + return cloneSymbol(object); + } + } - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = - typedArrayTags[errorTag] = typedArrayTags[funcTag] = - typedArrayTags[mapTag] = typedArrayTags[numberTag] = - typedArrayTags[objectTag] = typedArrayTags[regexpTag] = - typedArrayTags[setTag] = typedArrayTags[stringTag] = - typedArrayTags[weakMapTag] = false; + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } - /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = - cloneableTags[boolTag] = cloneableTags[dateTag] = - cloneableTags[float32Tag] = cloneableTags[float64Tag] = - cloneableTags[int8Tag] = cloneableTags[int16Tag] = - cloneableTags[int32Tag] = cloneableTags[mapTag] = - cloneableTags[numberTag] = cloneableTags[objectTag] = - cloneableTags[regexpTag] = cloneableTags[setTag] = - cloneableTags[stringTag] = cloneableTags[symbolTag] = - cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[weakMapTag] = false; + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } - /** Used to map Latin Unicode letters to basic Latin letters. */ - var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', - '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', - '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', - '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', - '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', - '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', - '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', - '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', - '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', - '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', - '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', - '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', - '\u0134': 'J', '\u0135': 'j', - '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', - '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', - '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', - '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', - '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', - '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', - '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', - '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', - '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', - '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', - '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', - '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', - '\u0163': 't', '\u0165': 't', '\u0167': 't', - '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', - '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', - '\u0174': 'W', '\u0175': 'w', - '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', - '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', - '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', - '\u0132': 'IJ', '\u0133': 'ij', - '\u0152': 'Oe', '\u0153': 'oe', - '\u0149': "'n", '\u017f': 's' - }; + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } - /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" - }; + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } - /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat, - freeParseInt = parseInt; + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); + /** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ + var isMaskable = coreJsData ? isFunction : stubFalse; - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + return value === proto; + } - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process; + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); - if (types) { - return types; - } + var cache = result.cache; + return result; + } - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} - }()); + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); - /* Node.js helper references. */ - var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, - nodeIsDate = nodeUtil && nodeUtil.isDate, - nodeIsMap = nodeUtil && nodeUtil.isMap, - nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, - nodeIsSet = nodeUtil && nodeUtil.isSet, - nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); - /*--------------------------------------------------------------------------*/ + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); + return data; } - return func.apply(thisArg, args); - } - /** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array == null ? 0 : array.length; + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); } - return accumulator; - } - /** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; } - return array; - } - /** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEachRight(array, iteratee) { - var length = array == null ? 0 : array.length; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); } - return array; - } - /** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ - function arrayEvery(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; } + return array; } - return true; - } - /** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; + /** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; + if (key == '__proto__') { + return; } + + return object[key]; } - return result; - } - /** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && baseIndexOf(array, value, 0) > -1; - } + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); - /** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; + /** + * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @returns {number|Object} Returns the timer id or timeout object. + */ + var setTimeout = ctxSetTimeout || function(func, wait) { + return root.setTimeout(func, wait); + }; - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); } - return false; - } - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); - while (++index < length) { - result[index] = iteratee(array[index], index, array); + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; } - return result; - } - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; - while (++index < length) { - array[offset + index] = values[index]; + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; } - return array; - } - /** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } - return accumulator; - } - /** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array == null ? 0 : array.length; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; } - return accumulator; - } - /** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; } - return false; - } - - /** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - var asciiSize = baseProperty('length'); - - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split(''); - } - /** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function asciiWords(string) { - return string.match(reAsciiWord) || []; - } + /*------------------------------------------------------------------------*/ - /** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); } - }); - return result; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); } + return result; } - return -1; - } - - /** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex); - } - /** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; - while (++index < length) { - if (comparator(array[index], value)) { - return index; + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } } + return result; } - return -1; - } - - /** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ - function baseIsNaN(value) { - return value !== value; - } - /** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ - function baseMean(array, iteratee) { - var length = array == null ? 0 : array.length; - return length ? (baseSum(array, iteratee) / length) : NAN; - } + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; - } + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) + : []; }); - return accumulator; - } - /** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ - function baseSortBy(array, comparer) { - var length = array.length; + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); - array.sort(comparer); - while (length--) { - array[length] = array[length].value; + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); } - return array; - } - - /** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ - function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); } - return result; - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - while (++index < n) { - result[index] = iteratee(index); + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; } - return result; - } - /** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ - function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); - } + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } - /** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ - function baseTrim(string) { - return string - ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; - } + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, getIteratee(predicate, 3), index); + } - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, getIteratee(predicate, 3), index, true); + } - /** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function cacheHas(cache, key) { - return cache.has(key); - } + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } - /** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } - /** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ - function countHolders(array, placeholder) { - var length = array.length, - result = 0; + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } - while (length--) { - if (array[length] === placeholder) { - ++result; + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); } + return baseIndexOf(array, value, index); } - return result; - } - /** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ - var deburrLetter = basePropertyOf(deburredLetters); + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes); + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); - /** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; - } + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; - } + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee, 2)) + : []; + }); - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string); - } + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); - /** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ - function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); - } + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); - /** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ - function iteratorToArray(iterator) { - var data, - result = []; + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } - while (!(data = iterator.next()).done) { - result.push(data.value); + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; } - return result; - } - /** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ - function mapToArray(map) { - var index = -1, - result = Array(map.size); + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); - /** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee, 2)) + : array; } - return result; - } - /** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ - function setToArray(set) { - var index = -1, - result = Array(set.size); + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } - set.forEach(function(value) { - result[++index] = value; - }); - return result; - } + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); - /** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ - function setToPairs(set) { - var index = -1, - result = Array(set.size); + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); - set.forEach(function(value) { - result[++index] = [value, value]; + return result; }); - return result; - } - - /** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - while (++index < length) { - if (array[index] === value) { - return index; + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; } - } - return -1; - } + var index = -1, + indexes = [], + length = array.length; - /** - * A specialized version of `_.lastIndexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array[index] === value) { - return index; + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } } + basePullAt(array, indexes); + return result; } - return index; - } - - /** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ - function stringSize(string) { - return hasUnicode(string) - ? unicodeSize(string) - : asciiSize(string); - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); - } - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ - function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; - } - - /** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - /** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); } - return result; - } - - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } - - /** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function unicodeWords(string) { - return string.match(reUnicodeWord) || []; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new pristine `lodash` function using the `context` object. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Util - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `lodash` function. - * @example - * - * _.mixin({ 'foo': _.constant('foo') }); - * - * var lodash = _.runInContext(); - * lodash.mixin({ 'bar': lodash.constant('bar') }); - * - * _.isFunction(_.foo); - * // => true - * _.isFunction(_.bar); - * // => false - * - * lodash.isFunction(lodash.foo); - * // => false - * lodash.isFunction(lodash.bar); - * // => true - * - * // Create a suped-up `defer` in Node.js. - * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; - */ - var runInContext = (function runInContext(context) { - context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); - - /** Built-in constructor references. */ - var Array = context.Array, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError; - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } - /** Used to detect overreaching core-js shims. */ - var coreJsData = context['__core-js_shared__']; + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); + } - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } - /** Used to generate unique IDs. */ - var idCounter = 0; + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); + } /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 */ - var nativeObjectToString = objectProto.toString; - - /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object); - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** Built-in value references. */ - var Buffer = moduleExports ? context.Buffer : undefined, - Symbol = context.Symbol, - Uint8Array = context.Uint8Array, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, - getPrototype = overArg(Object.getPrototypeOf, Object), - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice, - spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, - symIterator = Symbol ? Symbol.iterator : undefined, - symToStringTag = Symbol ? Symbol.toStringTag : undefined; - - var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} - }()); + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } - /** Mocked built-ins. */ - var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, - ctxNow = Date && Date.now !== root.Date.now && Date.now, - ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeFloor = Math.floor, - nativeGetSymbols = Object.getOwnPropertySymbols, - nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, - nativeIsFinite = context.isFinite, - nativeJoin = arrayProto.join, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max, - nativeMin = Math.min, - nativeNow = Date.now, - nativeParseInt = context.parseInt, - nativeRandom = Math.random, - nativeReverse = arrayProto.reverse; + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, getIteratee(iteratee, 2)) + : []; + } - /* Built-in method references that are verified to be native. */ - var DataView = getNative(context, 'DataView'), - Map = getNative(context, 'Map'), - Promise = getNative(context, 'Promise'), - Set = getNative(context, 'Set'), - WeakMap = getNative(context, 'WeakMap'), - nativeCreate = getNative(Object, 'create'); + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } - /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap; + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } - /** Used to lookup unminified function names. */ - var realNames = {}; + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } - /** Used to detect maps, sets, and weakmaps. */ - var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } - /*------------------------------------------------------------------------*/ + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array and iteratees accept only - * one argument. The heuristic for whether a section qualifies for shortcut - * fusion is subject to change. + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example * - * In addition to lodash methods, wrappers have `Array` and `String` methods. + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. * - * The wrapper `String` methods are: - * `replace` and `split` + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. * @example * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. * - * // Returns a wrapped value. - * var squares = wrapped.map(square); + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example * - * _.isArray(squares); - * // => false + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] * - * _.isArray(squares.value()); - * // => true + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] */ - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value); - } + function unzip(array) { + if (!(array && array.length)) { + return []; } - return new LodashWrapper(value); + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); } /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] */ - var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { return result; - }; - }()); + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } /** - * The function whose prototype chain sequence wrappers inherit from. + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. * - * @private + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] */ - function baseLodash() { - // No operation performed. - } + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); /** - * The base constructor for creating `lodash` wrapper objects. + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; - } + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); /** - * By default, the template delimiters used by lodash are like those in - * embedded Ruby (ERB) as well as ES2015 template strings. Change the - * following template settings to use alternative delimiters. + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). * * @static * @memberOf _ - * @type {Object} + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] */ - lodash.templateSettings = { - - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'escape': reEscape, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'evaluate': reEvaluate, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'interpolate': reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type {string} - */ - 'variable': '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type {Object} - */ - 'imports': { - - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type {Function} - */ - '_': lodash + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; } - }; - - // Ensure wrappers are instances of `baseLodash`. - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; - - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); + }); - /*------------------------------------------------------------------------*/ + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); /** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. * - * @private - * @constructor - * @param {*} value The value to wrap. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } + var zip = baseRest(unzip); /** - * Creates a clone of the lazy wrapper object. + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); } /** - * Reverses the direction of lazy iteration. + * This method is like `_.zipObject` except that it supports property paths. * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); } /** - * Extracts the unwrapped value from its lazy wrapper. + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || (!isRight && arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; - } + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; - // Ensure `LazyWrapper` is an instance of `baseLodash`. - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); /*------------------------------------------------------------------------*/ /** - * Creates a hash object. + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' */ - function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; } /** - * Removes all key-value entries from the hash. + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. * - * @private - * @name clear - * @memberOf Hash + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] */ - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; + function tap(value, interceptor) { + interceptor(value); + return value; } /** - * Removes `key` and its value from the hash. + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] */ - function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; + function thru(value, interceptor) { + return interceptor(value); } /** - * Gets the hash value for `key`. + * This method is the wrapper version of `_.at`. * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] */ - function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; + var wrapperAt = flatRest(function(paths) { + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function(object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); } - return hasOwnProperty.call(data, key) ? data[key] : undefined; - } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }); + return new LodashWrapper(value, this.__chain__).thru(function(array) { + if (length && !array.length) { + array.push(undefined); + } + return array; + }); + }); /** - * Checks if a hash value for `key` exists. + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } */ - function hashHas(key) { - var data = this.__data__; - return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + function wrapperChain() { + return chain(this); } /** - * Sets the hash `key` to `value`. + * Executes the chain sequence and returns the wrapped result. * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] */ - function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); } - // Add methods to `Hash`. - Hash.prototype.clear = hashClear; - Hash.prototype['delete'] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - - /*------------------------------------------------------------------------*/ - /** - * Creates an list cache object. + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } */ - function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); + function wrapperNext() { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()); } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; } /** - * Removes all key-value entries from the list cache. + * Enables the wrapper to be iterable. * - * @private - * @name clear - * @memberOf ListCache + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] */ - function listCacheClear() { - this.__data__ = []; - this.size = 0; + function wrapperToIterator() { + return this; } /** - * Removes `key` and its value from the list cache. + * Creates a clone of the chain sequence planting `value` as the wrapped value. * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] */ - function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); + function wrapperPlant(value) { + var result, + parent = this; - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; } - --this.size; - return true; + previous.__wrapped__ = value; + return result; } /** - * Gets the list cache value for `key`. + * This method is the wrapper version of `_.reverse`. * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; - } - - /** - * Checks if a list cache value for `key` exists. + * **Note:** This method mutates the wrapped array. * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] */ - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); } /** - * Sets the list cache `key` to `value`. + * Executes the chain sequence to resolve the unwrapped value. * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] */ - function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); } - // Add methods to `ListCache`. - ListCache.prototype.clear = listCacheClear; - ListCache.prototype['delete'] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - /*------------------------------------------------------------------------*/ /** - * Creates a map cache object to store key-value pairs. + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } */ - function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); + var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); } - } + }); /** - * Removes all key-value entries from the map. + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). * - * @private - * @name clear - * @memberOf MapCache + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false */ - function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); } /** - * Removes `key` and its value from the map. + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] */ - function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); } /** - * Gets the map value for `key`. + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' */ - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } + var find = createFind(findIndex); /** - * Checks if a map value for `key` exists. + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 */ - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } + var findLast = createFind(findLastIndex); /** - * Sets the map `key` to `value`. + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] */ - function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); } - // Add methods to `MapCache`. - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype['delete'] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - - /*------------------------------------------------------------------------*/ - /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. * - * Creates an array cache object to store unique values. + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example * - * @private - * @constructor - * @param {Array} [values] The values to cache. + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] */ - function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } + function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); } /** - * Adds `value` to the array cache. + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] */ - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; + function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); } /** - * Checks if `value` is in the array cache. + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). */ - function setCacheHas(value) { - return this.__data__.has(value); + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, getIteratee(iteratee, 3)); } - // Add methods to `SetCache`. - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - - /*------------------------------------------------------------------------*/ - /** - * Creates a stack cache object to store key-value pairs. + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. */ - function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; + function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, getIteratee(iteratee, 3)); } /** - * Removes all key-value entries from the stack. + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). * - * @private - * @name clear - * @memberOf Stack + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } */ - function stackClear() { - this.__data__ = new ListCache; - this.size = 0; - } + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } + }); /** - * Removes `key` and its value from the stack. + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true */ - function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - this.size = data.size; - return result; + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); } /** - * Gets the stack value for `key`. + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function stackGet(key) { - return this.__data__.get(key); - } - - /** - * Checks if a stack value for `key` exists. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function stackHas(key) { - return this.__data__.has(key); - } - - /** - * Sets the stack `key` to `value`. + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] */ - function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; - } - - // Add methods to `Stack`. - Stack.prototype.clear = stackClear; - Stack.prototype['delete'] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; + var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; - /*------------------------------------------------------------------------*/ + baseEach(collection, function(value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; + }); /** - * Creates an array of the enumerable property names of the array-like `value`. + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } */ - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; - } + var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); + }); /** - * A specialized version of `_.sample` for arrays. + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] */ - function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); } /** - * A specialized version of `_.sampleSize` for arrays. + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); - } - - /** - * A specialized version of `_.shuffle` for arrays. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } - - /** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] */ - function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; } + return baseOrderBy(collection, iteratees, orders); } /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); /** - * Gets the index at which the `key` is found in `array` of key-value pairs. + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) */ - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); } /** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. * - * @private + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] */ - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); } /** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(getIteratee(predicate, 3))); } /** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. + * Gets a random element from `collection`. * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 */ - function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object); + function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); } /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); + function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1; } else { - object[key] = value; + n = toInteger(n); } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); } /** - * The base implementation of `_.at` without support for individual paths. + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths to pick. - * @returns {Array} Returns the picked elements. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] */ - function baseAt(object, paths) { - var index = -1, - length = paths.length, - result = Array(length), - skip = object == null; - - while (++index < length) { - result[index] = skip ? undefined : get(object, paths[index]); - } - return result; + function shuffle(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); } /** - * The base implementation of `_.clamp` which doesn't coerce arguments. + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } + function size(collection) { + if (collection == null) { + return 0; } - return number; + if (isArrayLike(collection)) { + return isString(collection) ? stringSize(collection) : collection.length; + } + var tag = getTag(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return baseKeys(collection).length; } /** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true */ - function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; + return func(collection, getIteratee(predicate, 3)); + } - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat - ? copySymbolsIn(value, baseAssignIn(result, value)) - : copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, isDeep); - } + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ + var sortBy = baseRest(function(collection, iteratees) { + if (collection == null) { + return []; } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; } - stack.set(value, result); + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); - if (isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - } + /*------------------------------------------------------------------------*/ - var keysFunc = isFull - ? (isFlat ? getAllKeysIn : getAllKeys) - : (isFlat ? keysIn : keys); + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = ctxNow || function() { + return root.Date.now(); + }; - var props = isArr ? undefined : keysFunc(value); - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; - } + /*------------------------------------------------------------------------*/ /** - * The base implementation of `_.conforms` which doesn't clone `source`. + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. */ - function baseConforms(source) { - var props = keys(source); - return function(object) { - return baseConformsTo(object, source, props); + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } }; } /** - * The base implementation of `_.conformsTo` which accepts `props` to check. + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] */ - function baseConformsTo(object, source, props) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length], - predicate = source[key], - value = object[key]; - - if ((value === undefined && !(key in object)) || !predicate(value)) { - return false; - } - } - return true; + function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); } /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. */ - function baseDelay(func, wait, args) { + function before(n, func) { + var result; if (typeof func != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } - return setTimeout(function() { func.apply(undefined, args); }, wait); + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; } /** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' */ - function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee == null ? value : iteratee(value); - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } + var bind = baseRest(function(func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; } - return result; - } + return createWrap(func, bitmask, thisArg, partials, holders); + }); /** - * The base implementation of `_.forEach` without support for iteratee shorthands. + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' */ - var baseEach = createBaseEach(baseForOwn); + var bindKey = baseRest(function(object, key, partials) { + var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); + }); /** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] */ - var baseEachRight = createBaseEach(baseForOwnRight, true); + function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; + } /** - * The base implementation of `_.every` without support for iteratee shorthands. + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); + function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; return result; } /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } - while (++index < length) { - var value = array[index], - current = iteratee(value); + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } - if (current != null && (computed === undefined - ? (current === current && !isSymbol(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; } - return result; - } - /** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ - function baseFill(array, value, start, end) { - var length = array.length; + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; } - return array; - } - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); } - }); - return result; - } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } - predicate || (predicate = isFlattenable); - result || (result = []); + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); } - } else if (!isStrict) { - result[result.length] = value; + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); } + return result; } - return result; + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; } /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. */ - var baseForRight = createBaseFor(true); + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. */ - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); - } + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. + * Creates a function that invokes `func` with arguments reversed. * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `_.get` without support for default values. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ - function baseGet(object, path) { - path = castPath(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; - } - - /** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] */ - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + function flip(func) { + return createWrap(func, WRAP_FLIP_FLAG); } /** - * The base implementation of `getTag` without fallbacks for buggy environments. + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; */ - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); - } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; } - /** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); - } + // Expose `MapCache`. + memoize.Cache = MapCache; /** - * The base implementation of `_.hasIn` without support for deep paths. + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHasIn(object, key) { - return object != null && key in Object(object); - } - - /** - * The base implementation of `_.inRange` which doesn't coerce arguments. + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ - function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); - } - - /** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. + * function isEven(n) { + * return n % 2 == 0; + * } * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] */ - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); } - array = arrays[0]; - - var index = -1, - seen = caches[0]; - - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); + return function() { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); } - } - return result; + return !predicate.apply(this, args); + }; } /** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); } /** - * The base implementation of `_.invoke` without support for individual - * method arguments. + * Creates a function that invokes `func` with its arguments transformed. * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + * The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] */ - function baseInvoke(object, path, args) { - path = castPath(path, object); - object = parent(object, path); - var func = object == null ? object : object[toKey(last(path))]; - return func == null ? undefined : apply(func, object, args); - } + var overArgs = castRest(function(func, transforms) { + transforms = (transforms.length == 1 && isArray(transforms[0])) + ? arrayMap(transforms[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); + + var funcsLength = transforms.length; + return baseRest(function(args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); /** - * The base implementation of `_.isArguments`. + * Creates a function that invokes `func` with `partials` prepended to the + * arguments it receives. This method is like `_.bind` except it does **not** + * alter the `this` binding. * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 0.2.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' */ - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; - } + var partial = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partial)); + return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); + }); /** - * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' */ - function baseIsArrayBuffer(value) { - return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; - } + var partialRight = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partialRight)); + return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); + }); /** - * The base implementation of `_.isDate` without Node.js optimizations. + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] */ - function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; - } + var rearg = flatRest(function(func, indexes) { + return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); + }); /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' */ - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { - return value !== value && other !== other; + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + start = start === undefined ? start : toInteger(start); + return baseRest(func, start); } /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 */ - function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = objIsArr ? arrayTag : getTag(object), - othTag = othIsArr ? arrayTag : getTag(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start == null ? 0 : nativeMax(toInteger(start), 0); + return baseRest(function(args) { + var array = args[start], + otherArgs = castSlice(args, 0, start); - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; + if (array) { + arrayPush(otherArgs, array); } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + return apply(func, this, otherArgs); + }); + } - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); } - if (!isSameTag) { - return false; + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; } - stack || (stack = new Stack); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); } /** - * The base implementation of `_.isMap` without Node.js optimizations. + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] */ - function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; + function unary(func) { + return ary(func, 1); } /** - * The base implementation of `_.isMatch` without support for iteratee shorthands. + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

fred, barney, & pebbles

' */ - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; + function wrap(value, wrapper) { + return partial(castFunction(wrapper), value); + } - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; + /*------------------------------------------------------------------------*/ - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; } - return true; + var value = arguments[0]; + return isArray(value) ? value : [value]; } /** - * The base implementation of `_.isNative` without bad shim checks. + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); } /** - * The base implementation of `_.isRegExp` without Node.js optimizations. + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; + function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); } /** - * The base implementation of `_.isSet` without Node.js optimizations. + * This method is like `_.clone` except that it recursively clones `value`. * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false */ - function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); } /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. + * This method is like `_.cloneWith` except that it recursively clones `value`. * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 */ - function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); } /** - * The base implementation of `_.iteratee`. + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false */ - function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); + function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); } /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; + function eq(value, other) { + return value === other || (value !== value && other !== other); } /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * Checks if `value` is greater than `other`. * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } + var gt = createRelationalOperation(baseGt); /** - * The base implementation of `_.lt` which doesn't coerce arguments. + * Checks if `value` is greater than or equal to `other`. * - * @private + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang * @param {*} value The value to compare. * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false */ - function baseLt(value, other) { - return value < other; - } + var gte = createRelationalOperation(function(value, other) { + return value >= other; + }); /** - * The base implementation of `_.map` without support for iteratee shorthands. + * Checks if `value` is likely an `arguments` object. * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; /** - * The base implementation of `_.matches` which doesn't clone `source`. + * Checks if `value` is classified as an `Array` object. * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } + var isArray = Array.isArray; /** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * Checks if `value` is classified as an `ArrayBuffer` object. * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false */ - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; - } + var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; /** - * The base implementation of `_.merge` without support for multiple sources. + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - stack || (stack = new Stack); - if (isObject(srcValue)) { - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); } /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = safeGet(object, key), - srcValue = safeGet(source, key), - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); - - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || isFunction(objValue)) { - newValue = initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); } /** - * The base implementation of `_.nth` which doesn't coerce arguments. + * Checks if `value` is classified as a boolean primitive or object. * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false */ - function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); } /** - * The base implementation of `_.orderBy` without param guards. + * Checks if `value` is a buffer. * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false */ - function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = arrayMap(iteratees, function(iteratee) { - if (isArray(iteratee)) { - return function(value) { - return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); - } - } - return iteratee; - }); - } else { - iteratees = [identity]; - } - - var index = -1; - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); + var isBuffer = nativeIsBuffer || stubFalse; - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; /** - * The base implementation of `_.pick` without support for individual - * property identifiers. + * Checks if `value` is likely a DOM element. * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false */ - function basePick(object, paths) { - return basePickBy(object, paths, function(value, path) { - return hasIn(object, path); - }); + function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); } /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. + * Checks if `value` is an empty object, collection, map, or set. * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false */ - function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = baseGet(object, path); - - if (predicate(value, path)) { - baseSet(result, castPath(path, object), value); + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; } } - return result; + return true; } /** - * A specialized version of `baseProperty` which supports deep paths. + * Performs a deep comparison between two values to determine if they are + * equivalent. * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false */ - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; + function isEqual(value, other) { + return baseIsEqual(value, other); } /** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true */ - function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; + } - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; } - return array; + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); } /** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. + * Checks if `value` is a finite primitive number. * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } else { - baseUnset(array, index); - } - } + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; } - return array; + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. + * Checks if `value` is an integer. * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); } /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. + * Checks if `value` is a valid array-like length. * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; } /** - * The base implementation of `_.repeat` which doesn't coerce arguments. + * Checks if `value` is classified as a `Map` object. * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false */ - function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); - - return result; - } + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); } /** - * The base implementation of `_.sample`. + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true */ - function baseSample(collection) { - return arraySample(values(collection)); + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); } /** - * The base implementation of `_.sampleSize` without param guards. + * Checks if `value` is `NaN`. * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false */ - function baseSampleSize(collection, n) { - var array = values(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; } /** - * The base implementation of `_.set`. + * Checks if `value` is a pristine native function. * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false */ - function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = castPath(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (key === '__proto__' || key === 'constructor' || key === 'prototype') { - return object; - } - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; + function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); } - return object; + return baseIsNative(value); } /** - * The base implementation of `setData` without support for hot loop shorting. + * Checks if `value` is `null`. * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false */ - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; + function isNull(value) { + return value === null; + } /** - * The base implementation of `setToString` without support for hot loop shorting. + * Checks if `value` is `null` or `undefined`. * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false */ - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); - }; + function isNil(value) { + return value == null; + } /** - * The base implementation of `_.shuffle`. + * Checks if `value` is classified as a `Number` primitive or object. * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false */ - function baseShuffle(collection) { - return shuffleSelf(values(collection)); + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); } /** - * The base implementation of `_.slice` without an iteratee call guard. + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; + var proto = getPrototype(value); + if (proto === null) { + return true; } - return result; + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; } /** - * The base implementation of `_.some` without support for iteratee shorthands. + * Checks if `value` is classified as a `RegExp` object. * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; /** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false */ - function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array == null ? low : array.length; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if (computed !== null && !isSymbol(computed) && - (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; } /** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). + * Checks if `value` is classified as a `Set` object. * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndexBy(array, value, iteratee, retHighest) { - var low = 0, - high = array == null ? 0 : array.length; - if (high === 0) { - return 0; - } - - value = iteratee(value); - var valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; /** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. + * Checks if `value` is classified as a `String` primitive or object. * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false */ - function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); } /** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. + * Checks if `value` is classified as a `Symbol` primitive or object. * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false */ - function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); } /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. + * Checks if `value` is classified as a typed array. * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; /** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * Checks if `value` is `undefined`. * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false */ - function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; + function isUndefined(value) { + return value === undefined; } /** - * The base implementation of `_.unset`. + * Checks if `value` is classified as a `WeakMap` object. * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The property path to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false */ - function baseUnset(object, path) { - path = castPath(path, object); - object = parent(object, path); - return object == null || delete object[toKey(last(path))]; + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; } /** - * The base implementation of `_.update`. + * Checks if `value` is classified as a `WeakSet` object. * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false */ - function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); + function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; } /** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. + * Checks if `value` is less than `other`. * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length) && - predicate(array[index], index, array)) {} + var lt = createRelationalOperation(baseLt); - return isDrop - ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); - } + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + var lte = createRelationalOperation(function(value, other) { + return value <= other; + }); /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. + * Converts `value` to an array. * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); + function toArray(value) { + if (!value) { + return []; } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); } /** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. + * Converts `value` to a finite number. * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 */ - function baseXor(arrays, iteratee, comparator) { - var length = arrays.length; - if (length < 2) { - return length ? baseUniq(arrays[0]) : []; + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; } - var index = -1, - result = Array(length); + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } - while (++index < length) { - var array = arrays[index], - othIndex = -1; + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; - while (++othIndex < length) { - if (othIndex != index) { - result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); - } - } - } - return baseUniq(baseFlatten(result, 1), iteratee, comparator); + return result === result ? (remainder ? result - remainder : result) : 0; } /** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * Converts `value` to an integer suitable for use as the length of an + * array-like object. * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 */ - function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; } - return result; + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); } /** - * Casts `value` to an empty array if it's not an array like object. + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } */ - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; + function toPlainObject(value) { + return copyObject(value, keysIn(value)); } /** - * Casts `value` to `identity` if it's not a function. + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 */ - function castFunction(value) { - return typeof value == 'function' ? value : identity; + function toSafeInteger(value) { + return value + ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) + : (value === 0 ? value : 0); } /** - * Casts `value` to a path array if it's not one. + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' */ - function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); + function toString(value) { + return value == null ? '' : baseToString(value); } - /** - * A `baseRest` alias which can be replaced with `identity` by module - * replacement plugins. - * - * @private - * @type {Function} - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - var castRest = baseRest; + /*------------------------------------------------------------------------*/ /** - * Casts `array` to a slice if it's needed. + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } + var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); /** - * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. * - * @private - * @param {number|Object} id The timer id or timeout object of the timer to clear. + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } */ - var clearTimeout = ctxClearTimeout || function(id) { - return root.clearTimeout(id); - }; + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); /** - * Creates a clone of `buffer`. + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - - buffer.copy(result); - return result; - } + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); + }); /** - * Creates a clone of `arrayBuffer`. + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } */ - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; - } + var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); + }); /** - * Creates a clone of `dataView`. + * Creates an array of values corresponding to `paths` of `object`. * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] */ - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } + var at = flatRest(baseAt); /** - * Creates a clone of `regexp`. + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true */ - function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); } /** - * Creates a clone of the `symbol` object. + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } */ - function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; - } + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); /** - * Creates a clone of `typedArray`. + * This method is like `_.defaults` except that it recursively assigns + * default properties. * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } */ - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } + var defaultsDeep = baseRest(function(args) { + args.push(undefined, customDefaultsMerge); + return apply(mergeWith, undefined, args); + }); /** - * Compares values to sort them in ascending order. + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; + function findKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); } /** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; + function findLastKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); } /** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). */ - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, getIteratee(iteratee, 3), keysIn); } /** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. */ - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, getIteratee(iteratee, 3), keysIn); } /** - * Copies the values of `source` to `array`. + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; + function forOwn(object, iteratee) { + return object && baseForOwn(object, getIteratee(iteratee, 3)); } /** - * Copies properties of `source` to `object`. + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, getIteratee(iteratee, 3)); } /** - * Copies own symbols of `source` to `object`. + * Creates an array of function property names from own enumerable properties + * of `object`. * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); } /** - * Copies own and inherited symbols of `source` to `object`. + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] */ - function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object); + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); } /** - * Creates a function like `_.groupBy`. + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' */ - function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, getIteratee(iteratee, 2), accumulator); - }; + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; } /** - * Creates a function like `_.assign`. + * Checks if `path` is a direct property of `object`. * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); + function has(object, path) { + return object != null && hasPath(object, path, baseHas); } /** - * Creates a `baseEach` or `baseEachRight` function. + * Checks if `path` is a direct or inherited property of `object`. * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); } /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; + var invert = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } + result[value] = key; + }, constant(identity)); /** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } */ - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); + var invertBy = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; } - return wrapper; - } + }, getIteratee); /** - * Creates a function like `_.lowerFirst`. + * Invokes the method at `path` of `object`. * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; - } + var invoke = baseRest(baseInvoke); /** - * Creates a function like `_.camelCase`. + * Creates an array of the own enumerable property names of `object`. * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] */ - function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * Creates an array of the own and inherited enumerable property names of `object`. * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) */ - function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); } /** - * Creates a function that wraps `func` to enable currying. + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } */ - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); - - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); - length -= holders.length; - if (length < arity) { - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; } /** - * Creates a `_.find` or `_.findLast` function. + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = getIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; - } - - /** - * Creates a `_.flow` or `_.flowRight` function. + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) */ - function createFlow(fromRight) { - return flatRest(function(funcs) { - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; - - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && - data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && - !data[4].length && data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) - ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && isArray(value)) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); }); + return result; } /** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } */ - function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & WRAP_ARY_FLAG, - isBind = bitmask & WRAP_BIND_FLAG, - isBindKey = bitmask & WRAP_BIND_KEY_FLAG, - isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), - isFlip = bitmask & WRAP_FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, thisArg, - args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); /** - * Creates a function like `_.invertBy`. + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } */ - function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; - } + var omit = flatRest(function(object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function(path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; + }); /** - * Creates a function that performs a mathematical operation on two values. + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example * - * @private - * @param {Function} operator The function to perform the operation. - * @param {number} [defaultValue] The value used for `undefined` arguments. - * @returns {Function} Returns the new mathematical operation function. + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } */ - function createMathOperation(operator, defaultValue) { - return function(value, other) { - var result; - if (value === undefined && other === undefined) { - return defaultValue; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; + function omitBy(object, predicate) { + return pickBy(object, negate(getIteratee(predicate))); } /** - * Creates a function like `_.over`. + * Creates an object composed of the picked `object` properties. * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } */ - function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); - } + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); /** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } */ - function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); - - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; + function pickBy(object, predicate) { + if (object == null) { + return {}; } - var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return hasUnicode(chars) - ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length); + var props = arrayMap(getAllKeysIn(object), function(prop) { + return [prop]; + }); + predicate = getIteratee(predicate); + return basePickBy(object, props, function(value, path) { + return predicate(value, path[0]); + }); } /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' */ - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); + function result(object, path, defaultValue) { + path = castPath(path, object); - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + var index = -1, + length = path.length; - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; + // Ensure the loop is entered when path is empty. + if (!length) { + length = 1; + object = undefined; + } + while (++index < length) { + var value = object == null ? undefined : object[toKey(path[index])]; + if (value === undefined) { + index = length; + value = defaultValue; } - return apply(fn, isBind ? thisArg : this, args); + object = isFunction(value) ? value.call(object) : value; } - return wrapper; + return object; } /** - * Creates a `_.range` or `_.rangeRight` function. + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - - /** - * Creates a function that performs a relational operation on two values. + * **Note:** This method mutates `object`. * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 */ - function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); } /** - * Creates a function that wraps `func` to continue currying. + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } */ - function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & WRAP_CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); - - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; - - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseSet(object, path, value, customizer); } /** - * Creates a function like `_.round`. + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) */ - function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); - if (precision && nativeIsFinite(number)) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); - - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; - } + var toPairs = createToPairs(keys); /** - * Creates a set object of `values`. + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) */ - var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); - }; + var toPairsIn = createToPairs(keysIn); /** - * Creates a `_.toPairs` or `_.toPairsIn` function. + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } */ - function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); + function transform(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = getIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; } - if (tag == setTag) { - return setToPairs(object); + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; } - return baseToPairs(object, keysFunc(object)); - }; + else { + accumulator = {}; + } + } + (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; } /** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. + * Removes the property at `path` of `object`. * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; - - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] === undefined - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); - - if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { - bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG) { - var result = createBind(func, bitmask, thisArg); - } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { - result = createCurry(func, bitmask, arity); - } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); } /** - * Used by `_.defaults` to customize its `_.assignIn` use to assign properties - * of source objects to the destination object for all destination properties - * that resolve to `undefined`. + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 */ - function customDefaultsAssignIn(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, castFunction(updater)); } /** - * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source - * objects into destination objects that are passed thru. + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } */ - function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); - stack['delete'](srcValue); - } - return objValue; + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); } /** - * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain - * objects. + * Creates an array of the own enumerable string keyed property values of `object`. * - * @private - * @param {*} value The value to inspect. - * @param {string} key The key of the property to inspect. - * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] */ - function customOmitClone(value) { - return isPlainObject(value) ? undefined : value; + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); } /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) */ - function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; } - // Check that cyclic values are equal. - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; } - stack['delete'](array); - stack['delete'](other); - return result; + return baseClamp(toNumber(number), lower, upper); } /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true */ - function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } + function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); } - return false; + number = toNumber(number); + return baseInRange(number, start, end); } /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 */ - function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = getAllKeys(object), - objLength = objProps.length, - othProps = getAllKeys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; } } - // Check that cyclic values are equal. - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); } - skipCtor || (skipCtor = key == 'constructor'); } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; } - stack['delete'](object); - stack['delete'](other); - return result; + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); } + /*------------------------------------------------------------------------*/ + /** - * A specialized version of `baseRest` which flattens the rest array. + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); - } + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); /** - * Creates an array of own enumerable property names and symbols of `object`. + * Converts the first character of `string` to upper case and the remaining + * to lower case. * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' */ - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); } /** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' */ - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); } /** - * Gets metadata for `func`. + * Checks if `string` ends with the given target string. * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; - - /** - * Gets the name of `func`. + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true */ - function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; + function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; } /** - * Gets the argument placeholder value for `func`. + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' */ - function getHolder(func) { - var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; - return object.placeholder; + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; } /** - * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, - * this function returns the custom method, otherwise it returns `baseIteratee`. - * If arguments are provided, the chosen function is invoked with them and - * its result is returned. + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. * - * @private - * @param {*} [value] The value to convert to an iteratee. - * @param {number} [arity] The arity of the created iteratee. - * @returns {Function} Returns the chosen function or its result. + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' */ - function getIteratee() { - var result = lodash.iteratee || iteratee; - result = result === iteratee ? baseIteratee : result; - return arguments.length ? result(arguments[0], arguments[1]) : result; + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; } /** - * Gets the data for `map`. + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' */ - function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; - } + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); /** - * Gets the property names, values, and compare flags of `object`. + * Converts `string`, as space separated words, to lower case. * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' */ - function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; - } + var lowerCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); /** - * Gets the native function at `key` of `object`. + * Converts the first character of `string` to lower case. * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; - } + var lowerFirst = createCaseFirst('toLowerCase'); /** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' */ - function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; - - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } + var strLength = length ? stringSize(string) : 0; + if (!length || strLength >= length) { + return string; } - return result; + var mid = (length - strLength) / 2; + return ( + createPadding(nativeFloor(mid), chars) + + string + + createPadding(nativeCeil(mid), chars) + ); } /** - * Creates an array of the own enumerable symbols of `object`. + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' */ - var getSymbols = !nativeGetSymbols ? stubArray : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return arrayFilter(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); - }; + function padEnd(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (string + createPadding(length - strLength, chars)) + : string; + } /** - * Creates an array of the own and inherited enumerable symbols of `object`. + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' */ - var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; - }; + function padStart(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (createPadding(length - strLength, chars) + string) + : string; + } /** - * Gets the `toStringTag` of `value`. + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a + * hexadecimal, in which case a `radix` of `16` is used. * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. + * **Note:** This method aligns with the + * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] */ - var getTag = baseGetTag; - - // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. - if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; + function parseInt(string, radix, guard) { + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); } /** - * Gets the view, applying any `transforms` to the `start` and `end` positions. + * Repeats the given string `n` times. * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } + function repeat(string, n, guard) { + if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); } - return { 'start': start, 'end': end }; + return baseRepeat(toString(string), n); } /** - * Extracts wrapper details from the `source` body comment. + * Replaces matches for `pattern` in `string` with `replacement`. * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' */ - function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); } /** - * Checks if `path` exists on `object`. + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' */ - function hasPath(object, path, hasFunc) { - path = castPath(path, object); - - var index = -1, - length = path.length, - result = false; + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined; } - if (result || ++index != length) { - return result; + limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; + if (!limit) { + return []; } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); + string = toString(string); + if (string && ( + typeof separator == 'string' || + (separator != null && !isRegExp(separator)) + )) { + separator = baseToString(separator); + if (!separator && hasUnicode(string)) { + return castSlice(stringToArray(string), 0, limit); + } + } + return string.split(separator, limit); } /** - * Initializes an array clone. + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' */ - function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word); + }); /** - * Initializes an object clone. + * Checks if `string` starts with the given target string. * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + * else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true */ - function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; + function startsWith(string, target, position) { + string = toString(string); + position = position == null + ? 0 + : baseClamp(toInteger(position), 0, string.length); + + target = baseToString(target); + return string.slice(position, position + target.length) == target; } /** - * Initializes an object clone based on its `toStringTag`. + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='lodash.templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': '