From c679d66b900f0f695a14e47943751d1f141d48cc Mon Sep 17 00:00:00 2001 From: Sarah Doire Date: Mon, 20 Mar 2023 11:47:52 -0500 Subject: [PATCH] remove creation of fixtures directory from generate customer parser script --- dist/generate-custom-parser.js | 4 +--- dist/generate-custom-parser.js.map | 2 +- dist/mercury.js | 12 ++++++------ dist/mercury.js.map | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/dist/generate-custom-parser.js b/dist/generate-custom-parser.js index ccff3753..849c689c 100644 --- a/dist/generate-custom-parser.js +++ b/dist/generate-custom-parser.js @@ -8342,7 +8342,6 @@ function scaffoldCustomParser(url) { if (!fs.existsSync(dir)) { newParser = true; confirmCreateDir(dir, "Creating ".concat(hostname, " directory")); - confirmCreateDir("./fixtures/".concat(hostname), 'Creating fixtures directory'); } confirm(mercury.fetchResource, [url], 'Fetching fixture', newParser); @@ -8379,8 +8378,7 @@ function savePage($, _ref, newParser) { hostname = _URL$parse5.hostname; spinner.succeed(); - var filename = new Date().getTime(); - var file = "./fixtures/".concat(hostname, "/").concat(filename, ".html"); // fix http(s) relative links: + var file = "./fixtures/".concat(hostname, ".html"); // fix http(s) relative links: makeLinksAbsolute$$1($('*').first(), $, url); $('[src], [href]').each(function (index, node) { diff --git a/dist/generate-custom-parser.js.map b/dist/generate-custom-parser.js.map index df983d89..25052d20 100644 --- a/dist/generate-custom-parser.js.map +++ b/dist/generate-custom-parser.js.map @@ -1 +1 @@ -{"version":3,"file":"generate-custom-parser.js","sources":["../src/utils/dom/constants.js","../src/utils/dom/strip-junk-tags.js","../src/extractors/generic/content/scoring/constants.js","../src/extractors/generic/content/scoring/score-commas.js","../src/utils/text/extract-from-url.js","../src/utils/text/constants.js","../src/utils/text/has-sentence-end.js","../src/extractors/generic/content/scoring/index.js","../src/utils/dom/make-links-absolute.js","../src/utils/dom/strip-tags.js","../src/utils/dom/node-is-sufficient.js","../src/utils/dom/get-attrs.js","../src/utils/dom/set-attr.js","../src/utils/dom/index.js","../scripts/templates/insert-values.js","../scripts/templates/index.js","../scripts/templates/custom-extractor.js","../scripts/templates/custom-extractor-test.js","../scripts/generate-custom-parser.js"],"sourcesContent":["// Spacer images to be removed\nexport const SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nexport const KEEP_CLASS = 'mercury-parser-keep';\n\nexport const KEEP_SELECTORS = [\n 'iframe[src^=\"https://www.youtube.com\"]',\n 'iframe[src^=\"https://www.youtube-nocookie.com\"]',\n 'iframe[src^=\"http://www.youtube.com\"]',\n 'iframe[src^=\"https://player.vimeo\"]',\n 'iframe[src^=\"http://player.vimeo\"]',\n 'iframe[src^=\"https://www.redditmedia.com\"]',\n];\n\n// A list of tags to strip from the output if we encounter them.\nexport const STRIP_OUTPUT_TAGS = [\n 'title',\n 'script',\n 'noscript',\n 'link',\n 'style',\n 'hr',\n 'embed',\n 'iframe',\n 'object',\n];\n\n// cleanAttributes\nexport const REMOVE_ATTRS = ['style', 'align'];\nexport const REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(\n selector => `[${selector}]`\n);\nexport const REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nexport const WHITELIST_ATTRS = [\n 'src',\n 'srcset',\n 'sizes',\n 'type',\n 'href',\n 'class',\n 'id',\n 'alt',\n 'xlink:href',\n 'width',\n 'height',\n];\n\nexport const WHITELIST_ATTRS_RE = new RegExp(\n `^(${WHITELIST_ATTRS.join('|')})$`,\n 'i'\n);\n\n// removeEmpty\nexport const REMOVE_EMPTY_TAGS = ['p'];\nexport const REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(\n tag => `${tag}:empty`\n).join(',');\n\n// cleanTags\nexport const CLEAN_CONDITIONALLY_TAGS = [\n 'ul',\n 'ol',\n 'table',\n 'div',\n 'button',\n 'form',\n].join(',');\n\n// cleanHeaders\nconst HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nexport const HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n // 'form', // This is too generic, has too many false positives\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'outbrain',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'taboola',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a
to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into

tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nexport const IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\nexport const NEXT_LINK_TEXT_RE = /(next|weiter|continue|>([^|]|$)|»([^|]|$))/i;\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match 2 or more consecutive
tags\nexport const BR_TAGS_RE = new RegExp('(]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp(']*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import { STRIP_OUTPUT_TAGS, KEEP_CLASS } from './constants';\n\nexport default function stripJunkTags(article, $, tags = []) {\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article)\n .not(`.${KEEP_CLASS}`)\n .remove();\n\n return $;\n}\n","// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n 'form',\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a

to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into

tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// Match 2 or more consecutive
tags\nexport const BR_TAGS_RE = new RegExp('(]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp(']*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","// return 1 for every comma in text\nexport default function scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n","// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nexport default function extractFromUrl(url, regexList) {\n const matchRe = regexList.find(re => re.test(url));\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n","// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nexport const PAGE_IN_HREF_RE = new RegExp(\n '(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})',\n 'i'\n);\n\nexport const HAS_ALPHA_RE = /[a-z]/i;\n\nexport const IS_ALPHA_RE = /^[a-z]+$/i;\nexport const IS_DIGIT_RE = /^[0-9]+$/i;\n\nexport const ENCODING_RE = /charset=([\\w-]+)\\b/;\nexport const DEFAULT_ENCODING = 'utf-8';\n","// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nconst SENTENCE_END_RE = new RegExp('.( |$)');\nexport default function hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n","// Scoring\nexport { default as getWeight } from './get-weight';\nexport { default as getScore } from './get-score';\nexport { default as scoreCommas } from './score-commas';\nexport { default as scoreLength } from './score-length';\nexport { default as scoreParagraph } from './score-paragraph';\nexport { default as setScore } from './set-score';\nexport { default as addScore } from './add-score';\nexport { default as addToParent } from './add-to-parent';\nexport { default as getOrInitScore } from './get-or-init-score';\nexport { default as scoreNode } from './score-node';\nexport { default as scoreContent } from './score-content';\nexport { default as findTopCandidate } from './find-top-candidate';\n","import URL from 'url';\n\nimport { getAttrs, setAttr } from 'utils/dom';\n\nfunction absolutize($, rootUrl, attr) {\n const baseUrl = $('base').attr('href');\n\n $(`[${attr}]`).each((_, node) => {\n const attrs = getAttrs(node);\n const url = attrs[attr];\n if (!url) return;\n const absoluteUrl = URL.resolve(baseUrl || rootUrl, url);\n\n setAttr(node, attr, absoluteUrl);\n });\n}\n\nfunction absolutizeSet($, rootUrl, $content) {\n $('[srcset]', $content).each((_, node) => {\n const attrs = getAttrs(node);\n const urlSet = attrs.srcset;\n\n if (urlSet) {\n // a comma should be considered part of the candidate URL unless preceded by a descriptor\n // descriptors can only contain positive numbers followed immediately by either 'w' or 'x'\n // space characters inside the URL should be encoded (%20 or +)\n const candidates = urlSet.match(\n /(?:\\s*)(\\S+(?:\\s*[\\d.]+[wx])?)(?:\\s*,\\s*)?/g\n );\n if (!candidates) return;\n const absoluteCandidates = candidates.map(candidate => {\n // a candidate URL cannot start or end with a comma\n // descriptors are separated from the URLs by unescaped whitespace\n const parts = candidate\n .trim()\n .replace(/,$/, '')\n .split(/\\s+/);\n parts[0] = URL.resolve(rootUrl, parts[0]);\n return parts.join(' ');\n });\n const absoluteUrlSet = [...new Set(absoluteCandidates)].join(', ');\n setAttr(node, 'srcset', absoluteUrlSet);\n }\n });\n}\n\nexport default function makeLinksAbsolute($content, $, url) {\n ['href', 'src'].forEach(attr => absolutize($, url, attr));\n absolutizeSet($, url, $content);\n\n return $content;\n}\n","// strips all tags from a string of text\nexport default function stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n const cleanText = $(`${text}`).text();\n return cleanText === '' ? text : cleanText;\n}\n","// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nexport default function nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n","export default function getAttrs(node) {\n const { attribs, attributes } = node;\n\n if (!attribs && attributes) {\n const attrs = Reflect.ownKeys(attributes).reduce((acc, index) => {\n const attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n","export default function setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n","// DOM manipulation\nexport {\n default as stripUnlikelyCandidates,\n} from './strip-unlikely-candidates';\nexport { default as brsToPs } from './brs-to-ps';\nexport { default as paragraphize } from './paragraphize';\nexport { default as convertToParagraphs } from './convert-to-paragraphs';\nexport { default as convertNodeTo } from './convert-node-to';\nexport { default as cleanImages } from './clean-images';\nexport { default as markToKeep } from './mark-to-keep';\nexport { default as stripJunkTags } from './strip-junk-tags';\nexport { default as cleanHOnes } from './clean-h-ones';\nexport { default as cleanAttributes } from './clean-attributes';\nexport { default as removeEmpty } from './remove-empty';\nexport { default as cleanTags } from './clean-tags';\nexport { default as cleanHeaders } from './clean-headers';\nexport { default as rewriteTopLevel } from './rewrite-top-level';\nexport { default as makeLinksAbsolute } from './make-links-absolute';\nexport { textLength, linkDensity } from './link-density';\nexport { default as extractFromMeta } from './extract-from-meta';\nexport { default as extractFromSelectors } from './extract-from-selectors';\nexport { default as stripTags } from './strip-tags';\nexport { default as withinComment } from './within-comment';\nexport { default as nodeIsSufficient } from './node-is-sufficient';\nexport { default as isWordpress } from './is-wordpress';\nexport { default as getAttrs } from './get-attrs';\nexport { default as setAttr } from './set-attr';\nexport { default as setAttrs } from './set-attrs';\n","export default function insertValues(strings, ...values) {\n if (values.length) {\n return strings.reduce((result, part, idx) => {\n let value = values[idx];\n\n if (value && typeof value.toString === 'function') {\n value = value.toString();\n } else {\n value = '';\n }\n\n return result + part + value;\n }, '');\n }\n\n return strings.join('');\n}\n","import insertValues from './insert-values';\n\nconst bodyPattern = /^\\n([\\s\\S]+)\\s{2}$/gm;\nconst trailingWhitespace = /\\s+$/;\n\nexport default function template(strings, ...values) {\n const compiled = insertValues(strings, ...values);\n let [body] = compiled.match(bodyPattern) || [];\n let indentLevel = /^\\s{0,4}(.+)$/g;\n\n if (!body) {\n body = compiled;\n indentLevel = /^\\s{0,2}(.+)$/g;\n }\n\n return body\n .split('\\n')\n .slice(1)\n .map(line => {\n line = line.replace(indentLevel, '$1');\n\n if (trailingWhitespace.test(line)) {\n line = line.replace(trailingWhitespace, '');\n }\n\n return line;\n })\n .join('\\n');\n}\n","import template from './index';\n\nexport default function(hostname, name) {\n return template`\n export const ${name} = {\n domain: '${hostname}',\n\n title: {\n selectors: [\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n // enter author selectors\n ],\n },\n\n date_published: {\n selectors: [\n // enter selectors\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ]\n },\n }\n `;\n}\n","import template from './index';\n\nconst IGNORE = [\n 'url',\n 'domain',\n 'content',\n 'word_count',\n 'next_page_url',\n 'excerpt',\n 'direction',\n 'total_pages',\n 'rendered_pages',\n];\n\nfunction testFor(key, value, dir) {\n if (IGNORE.find(k => k === key)) return '';\n\n return template`\n it('returns the ${key}', async () => {\n // To pass this test, fill out the ${key} selector\n // in ${dir}/index.js.\n const { ${key} } = await result\n\n // Update these values with the expected values from\n // the article.\n assert.equal(${key}, ${value ? `\\`${value}\\`` : \"''\"})\n });\n `;\n}\n\nexport default function(file, url, dir, result, name) {\n return template`\n import assert from 'assert';\n import URL from 'url';\n import cheerio from 'cheerio';\n\n import Parser from 'mercury';\n import getExtractor from 'extractors/get-extractor';\n import { excerptContent } from 'utils/text';\n\n const fs = require('fs');\n\n describe('${name}', () => {\n describe('initial test case', () => {\n let result;\n let url;\n beforeAll(() => {\n url =\n '${url}';\n const html =\n fs.readFileSync('${file}');\n result =\n Parser.parse(url, { html, fallback: false });\n });\n\n it('is selected properly', () => {\n // This test should be passing by default.\n // It sanity checks that the correct parser\n // is being selected for URLs from this domain\n const extractor = getExtractor(url);\n assert.equal(extractor.domain, URL.parse(url).hostname)\n })\n\n ${Reflect.ownKeys(result)\n .map(k => testFor(k, result[k], dir))\n .join('\\n\\n')}\n\n it('returns the content', async () => {\n // To pass this test, fill out the content selector\n // in ${dir}/index.js.\n // You may also want to make use of the clean and transform\n // options.\n const { content } = await result;\n\n const $ = cheerio.load(content || '');\n\n const first13 = excerptContent($('*').first().text(), 13)\n\n // Update these values with the expected values from\n // the article.\n assert.equal(first13, 'Add the first 13 words of the article here');\n });\n });\n });\n `;\n}\n","/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable no-use-before-define */\n/* eslint-disable no-console */\nimport fs from 'fs';\nimport URL from 'url';\nimport inquirer from 'inquirer';\nimport ora from 'ora';\nimport { exec } from 'child_process';\n\nimport { stripJunkTags, makeLinksAbsolute } from 'utils/dom';\nimport Parser from '../dist/mercury';\nimport extractorTemplate from './templates/custom-extractor';\nimport extractorTestTemplate from './templates/custom-extractor-test';\n\nconst questions = [\n {\n type: 'input',\n name: 'website',\n message:\n \"Paste a url to an article you'd like to create or extend a parser for:\",\n validate(value) {\n const { hostname } = URL.parse(value);\n if (hostname) return true;\n\n return false;\n },\n },\n];\nlet spinner;\n\nfunction confirm(fn, args, msg, newParser) {\n spinner = ora({ text: msg });\n spinner.start();\n const result = fn(...args);\n\n if (result && result.then) {\n result.then(r => savePage(r, args, newParser));\n } else {\n spinner.succeed();\n }\n\n return result;\n}\n\nfunction confirmCreateDir(dir, msg) {\n if (!fs.existsSync(dir)) {\n confirm(fs.mkdirSync, [dir], msg);\n }\n}\n\nfunction getDir(url) {\n const { hostname } = URL.parse(url);\n return `./src/extractors/custom/${hostname}`;\n}\n\nfunction scaffoldCustomParser(url) {\n const dir = getDir(url);\n const { hostname } = URL.parse(url);\n let newParser = false;\n\n if (!fs.existsSync(dir)) {\n newParser = true;\n confirmCreateDir(dir, `Creating ${hostname} directory`);\n confirmCreateDir(`./fixtures/${hostname}`, 'Creating fixtures directory');\n }\n\n confirm(Parser.fetchResource, [url], 'Fetching fixture', newParser);\n}\n\n// if has arg, just assume that arg is a url and skip prmopt\nconst urlArg = process.argv[2];\nif (urlArg) {\n scaffoldCustomParser(urlArg);\n} else {\n inquirer.prompt(questions).then(answers => {\n scaffoldCustomParser(answers.website);\n });\n}\n\nfunction generateScaffold(url, file, result) {\n const { hostname } = URL.parse(url);\n const extractor = extractorTemplate(hostname, extractorName(hostname));\n const extractorTest = extractorTestTemplate(\n file,\n url,\n getDir(url),\n result,\n extractorName(hostname)\n );\n\n fs.writeFileSync(`${getDir(url)}/index.js`, extractor);\n fs.writeFileSync(`${getDir(url)}/index.test.js`, extractorTest);\n fs.appendFileSync('./src/extractors/custom/index.js', exportString(url));\n exec(`npm run lint-fix-quiet -- ${getDir(url)}/*.js`);\n}\n\nfunction savePage($, [url], newParser) {\n const { hostname } = URL.parse(url);\n\n spinner.succeed();\n\n const filename = new Date().getTime();\n const file = `./fixtures/${hostname}/${filename}.html`;\n // fix http(s) relative links:\n makeLinksAbsolute($('*').first(), $, url);\n $('[src], [href]').each((index, node) => {\n const $node = $(node);\n const link = $node.attr('src');\n if (link && link.slice(0, 2) === '//') {\n $node.attr('src', `http:${link}`);\n }\n });\n const html = stripJunkTags($('*').first(), $, ['script']).html();\n\n fs.writeFileSync(file, html);\n\n Parser.parse(url, { html }).then(result => {\n if (newParser) {\n confirm(\n generateScaffold,\n [url, file, result],\n 'Generating parser and tests'\n );\n console.log(`Your custom site extractor has been set up. To get started building it, run\n yarn watch:test -- ${hostname}\n -- OR --\n npm run watch:test -- ${hostname}`);\n } else {\n console.log(`\n It looks like you already have a custom parser for this url.\n The page you linked to has been added to ${file}. Copy and paste\n the following code to use that page in your tests:\n const html = fs.readFileSync('${file}');`);\n }\n });\n}\n\nfunction exportString(url) {\n const { hostname } = URL.parse(url);\n return `export * from './${hostname}';`;\n}\n\nfunction extractorName(hostname) {\n const name = hostname\n .split('.')\n .map(w => `${w.charAt(0).toUpperCase()}${w.slice(1)}`)\n .join('');\n return `${name}Extractor`;\n}\n"],"names":["KEEP_CLASS","STRIP_OUTPUT_TAGS","stripJunkTags","article","$","tags","length","join","not","remove","absolutize","rootUrl","attr","baseUrl","each","_","node","attrs","getAttrs","url","absoluteUrl","URL","resolve","setAttr","absolutizeSet","$content","urlSet","srcset","candidates","match","absoluteCandidates","map","candidate","parts","trim","replace","split","absoluteUrlSet","makeLinksAbsolute","forEach","attribs","attributes","reduce","acc","index","name","value","val","setAttribute","insertValues","strings","values","result","part","idx","toString","bodyPattern","trailingWhitespace","template","compiled","body","indentLevel","slice","line","test","hostname","IGNORE","testFor","key","dir","find","k","file","questions","type","message","validate","parse","spinner","confirm","fn","args","msg","newParser","ora","text","start","then","r","savePage","succeed","confirmCreateDir","fs","existsSync","mkdirSync","getDir","scaffoldCustomParser","Parser","fetchResource","urlArg","process","argv","inquirer","prompt","answers","website","generateScaffold","extractor","extractorTemplate","extractorName","extractorTest","extractorTestTemplate","writeFileSync","appendFileSync","exportString","exec","filename","Date","getTime","first","$node","link","html","console","log","w","charAt","toUpperCase"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"} \ No newline at end of file +{"version":3,"file":"generate-custom-parser.js","sources":["../src/utils/dom/constants.js","../src/utils/dom/strip-junk-tags.js","../src/extractors/generic/content/scoring/constants.js","../src/extractors/generic/content/scoring/score-commas.js","../src/utils/text/extract-from-url.js","../src/utils/text/constants.js","../src/utils/text/has-sentence-end.js","../src/extractors/generic/content/scoring/index.js","../src/utils/dom/make-links-absolute.js","../src/utils/dom/strip-tags.js","../src/utils/dom/node-is-sufficient.js","../src/utils/dom/get-attrs.js","../src/utils/dom/set-attr.js","../src/utils/dom/index.js","../scripts/templates/insert-values.js","../scripts/templates/index.js","../scripts/templates/custom-extractor.js","../scripts/templates/custom-extractor-test.js","../scripts/generate-custom-parser.js"],"sourcesContent":["// Spacer images to be removed\nexport const SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nexport const KEEP_CLASS = 'mercury-parser-keep';\n\nexport const KEEP_SELECTORS = [\n 'iframe[src^=\"https://www.youtube.com\"]',\n 'iframe[src^=\"https://www.youtube-nocookie.com\"]',\n 'iframe[src^=\"http://www.youtube.com\"]',\n 'iframe[src^=\"https://player.vimeo\"]',\n 'iframe[src^=\"http://player.vimeo\"]',\n 'iframe[src^=\"https://www.redditmedia.com\"]',\n];\n\n// A list of tags to strip from the output if we encounter them.\nexport const STRIP_OUTPUT_TAGS = [\n 'title',\n 'script',\n 'noscript',\n 'link',\n 'style',\n 'hr',\n 'embed',\n 'iframe',\n 'object',\n];\n\n// cleanAttributes\nexport const REMOVE_ATTRS = ['style', 'align'];\nexport const REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(\n selector => `[${selector}]`\n);\nexport const REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nexport const WHITELIST_ATTRS = [\n 'src',\n 'srcset',\n 'sizes',\n 'type',\n 'href',\n 'class',\n 'id',\n 'alt',\n 'xlink:href',\n 'width',\n 'height',\n];\n\nexport const WHITELIST_ATTRS_RE = new RegExp(\n `^(${WHITELIST_ATTRS.join('|')})$`,\n 'i'\n);\n\n// removeEmpty\nexport const REMOVE_EMPTY_TAGS = ['p'];\nexport const REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(\n tag => `${tag}:empty`\n).join(',');\n\n// cleanTags\nexport const CLEAN_CONDITIONALLY_TAGS = [\n 'ul',\n 'ol',\n 'table',\n 'div',\n 'button',\n 'form',\n].join(',');\n\n// cleanHeaders\nconst HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nexport const HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n // 'form', // This is too generic, has too many false positives\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'outbrain',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'taboola',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a

to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into

tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nexport const IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\nexport const NEXT_LINK_TEXT_RE = /(next|weiter|continue|>([^|]|$)|»([^|]|$))/i;\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match 2 or more consecutive
tags\nexport const BR_TAGS_RE = new RegExp('(]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp(']*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import { STRIP_OUTPUT_TAGS, KEEP_CLASS } from './constants';\n\nexport default function stripJunkTags(article, $, tags = []) {\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article)\n .not(`.${KEEP_CLASS}`)\n .remove();\n\n return $;\n}\n","// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n 'form',\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a

to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into

tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// Match 2 or more consecutive
tags\nexport const BR_TAGS_RE = new RegExp('(]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp(']*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","// return 1 for every comma in text\nexport default function scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n","// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nexport default function extractFromUrl(url, regexList) {\n const matchRe = regexList.find(re => re.test(url));\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n","// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nexport const PAGE_IN_HREF_RE = new RegExp(\n '(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})',\n 'i'\n);\n\nexport const HAS_ALPHA_RE = /[a-z]/i;\n\nexport const IS_ALPHA_RE = /^[a-z]+$/i;\nexport const IS_DIGIT_RE = /^[0-9]+$/i;\n\nexport const ENCODING_RE = /charset=([\\w-]+)\\b/;\nexport const DEFAULT_ENCODING = 'utf-8';\n","// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nconst SENTENCE_END_RE = new RegExp('.( |$)');\nexport default function hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n","// Scoring\nexport { default as getWeight } from './get-weight';\nexport { default as getScore } from './get-score';\nexport { default as scoreCommas } from './score-commas';\nexport { default as scoreLength } from './score-length';\nexport { default as scoreParagraph } from './score-paragraph';\nexport { default as setScore } from './set-score';\nexport { default as addScore } from './add-score';\nexport { default as addToParent } from './add-to-parent';\nexport { default as getOrInitScore } from './get-or-init-score';\nexport { default as scoreNode } from './score-node';\nexport { default as scoreContent } from './score-content';\nexport { default as findTopCandidate } from './find-top-candidate';\n","import URL from 'url';\n\nimport { getAttrs, setAttr } from 'utils/dom';\n\nfunction absolutize($, rootUrl, attr) {\n const baseUrl = $('base').attr('href');\n\n $(`[${attr}]`).each((_, node) => {\n const attrs = getAttrs(node);\n const url = attrs[attr];\n if (!url) return;\n const absoluteUrl = URL.resolve(baseUrl || rootUrl, url);\n\n setAttr(node, attr, absoluteUrl);\n });\n}\n\nfunction absolutizeSet($, rootUrl, $content) {\n $('[srcset]', $content).each((_, node) => {\n const attrs = getAttrs(node);\n const urlSet = attrs.srcset;\n\n if (urlSet) {\n // a comma should be considered part of the candidate URL unless preceded by a descriptor\n // descriptors can only contain positive numbers followed immediately by either 'w' or 'x'\n // space characters inside the URL should be encoded (%20 or +)\n const candidates = urlSet.match(\n /(?:\\s*)(\\S+(?:\\s*[\\d.]+[wx])?)(?:\\s*,\\s*)?/g\n );\n if (!candidates) return;\n const absoluteCandidates = candidates.map(candidate => {\n // a candidate URL cannot start or end with a comma\n // descriptors are separated from the URLs by unescaped whitespace\n const parts = candidate\n .trim()\n .replace(/,$/, '')\n .split(/\\s+/);\n parts[0] = URL.resolve(rootUrl, parts[0]);\n return parts.join(' ');\n });\n const absoluteUrlSet = [...new Set(absoluteCandidates)].join(', ');\n setAttr(node, 'srcset', absoluteUrlSet);\n }\n });\n}\n\nexport default function makeLinksAbsolute($content, $, url) {\n ['href', 'src'].forEach(attr => absolutize($, url, attr));\n absolutizeSet($, url, $content);\n\n return $content;\n}\n","// strips all tags from a string of text\nexport default function stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n const cleanText = $(`${text}`).text();\n return cleanText === '' ? text : cleanText;\n}\n","// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nexport default function nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n","export default function getAttrs(node) {\n const { attribs, attributes } = node;\n\n if (!attribs && attributes) {\n const attrs = Reflect.ownKeys(attributes).reduce((acc, index) => {\n const attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n","export default function setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n","// DOM manipulation\nexport {\n default as stripUnlikelyCandidates,\n} from './strip-unlikely-candidates';\nexport { default as brsToPs } from './brs-to-ps';\nexport { default as paragraphize } from './paragraphize';\nexport { default as convertToParagraphs } from './convert-to-paragraphs';\nexport { default as convertNodeTo } from './convert-node-to';\nexport { default as cleanImages } from './clean-images';\nexport { default as markToKeep } from './mark-to-keep';\nexport { default as stripJunkTags } from './strip-junk-tags';\nexport { default as cleanHOnes } from './clean-h-ones';\nexport { default as cleanAttributes } from './clean-attributes';\nexport { default as removeEmpty } from './remove-empty';\nexport { default as cleanTags } from './clean-tags';\nexport { default as cleanHeaders } from './clean-headers';\nexport { default as rewriteTopLevel } from './rewrite-top-level';\nexport { default as makeLinksAbsolute } from './make-links-absolute';\nexport { textLength, linkDensity } from './link-density';\nexport { default as extractFromMeta } from './extract-from-meta';\nexport { default as extractFromSelectors } from './extract-from-selectors';\nexport { default as stripTags } from './strip-tags';\nexport { default as withinComment } from './within-comment';\nexport { default as nodeIsSufficient } from './node-is-sufficient';\nexport { default as isWordpress } from './is-wordpress';\nexport { default as getAttrs } from './get-attrs';\nexport { default as setAttr } from './set-attr';\nexport { default as setAttrs } from './set-attrs';\n","export default function insertValues(strings, ...values) {\n if (values.length) {\n return strings.reduce((result, part, idx) => {\n let value = values[idx];\n\n if (value && typeof value.toString === 'function') {\n value = value.toString();\n } else {\n value = '';\n }\n\n return result + part + value;\n }, '');\n }\n\n return strings.join('');\n}\n","import insertValues from './insert-values';\n\nconst bodyPattern = /^\\n([\\s\\S]+)\\s{2}$/gm;\nconst trailingWhitespace = /\\s+$/;\n\nexport default function template(strings, ...values) {\n const compiled = insertValues(strings, ...values);\n let [body] = compiled.match(bodyPattern) || [];\n let indentLevel = /^\\s{0,4}(.+)$/g;\n\n if (!body) {\n body = compiled;\n indentLevel = /^\\s{0,2}(.+)$/g;\n }\n\n return body\n .split('\\n')\n .slice(1)\n .map(line => {\n line = line.replace(indentLevel, '$1');\n\n if (trailingWhitespace.test(line)) {\n line = line.replace(trailingWhitespace, '');\n }\n\n return line;\n })\n .join('\\n');\n}\n","import template from './index';\n\nexport default function(hostname, name) {\n return template`\n export const ${name} = {\n domain: '${hostname}',\n\n title: {\n selectors: [\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n // enter author selectors\n ],\n },\n\n date_published: {\n selectors: [\n // enter selectors\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n\n ]\n },\n }\n `;\n}\n","import template from './index';\n\nconst IGNORE = [\n 'url',\n 'domain',\n 'content',\n 'word_count',\n 'next_page_url',\n 'excerpt',\n 'direction',\n 'total_pages',\n 'rendered_pages',\n];\n\nfunction testFor(key, value, dir) {\n if (IGNORE.find(k => k === key)) return '';\n\n return template`\n it('returns the ${key}', async () => {\n // To pass this test, fill out the ${key} selector\n // in ${dir}/index.js.\n const { ${key} } = await result\n\n // Update these values with the expected values from\n // the article.\n assert.equal(${key}, ${value ? `\\`${value}\\`` : \"''\"})\n });\n `;\n}\n\nexport default function(file, url, dir, result, name) {\n return template`\n import assert from 'assert';\n import URL from 'url';\n import cheerio from 'cheerio';\n\n import Parser from 'mercury';\n import getExtractor from 'extractors/get-extractor';\n import { excerptContent } from 'utils/text';\n\n const fs = require('fs');\n\n describe('${name}', () => {\n describe('initial test case', () => {\n let result;\n let url;\n beforeAll(() => {\n url =\n '${url}';\n const html =\n fs.readFileSync('${file}');\n result =\n Parser.parse(url, { html, fallback: false });\n });\n\n it('is selected properly', () => {\n // This test should be passing by default.\n // It sanity checks that the correct parser\n // is being selected for URLs from this domain\n const extractor = getExtractor(url);\n assert.equal(extractor.domain, URL.parse(url).hostname)\n })\n\n ${Reflect.ownKeys(result)\n .map(k => testFor(k, result[k], dir))\n .join('\\n\\n')}\n\n it('returns the content', async () => {\n // To pass this test, fill out the content selector\n // in ${dir}/index.js.\n // You may also want to make use of the clean and transform\n // options.\n const { content } = await result;\n\n const $ = cheerio.load(content || '');\n\n const first13 = excerptContent($('*').first().text(), 13)\n\n // Update these values with the expected values from\n // the article.\n assert.equal(first13, 'Add the first 13 words of the article here');\n });\n });\n });\n `;\n}\n","/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable no-use-before-define */\n/* eslint-disable no-console */\nimport fs from 'fs';\nimport URL from 'url';\nimport inquirer from 'inquirer';\nimport ora from 'ora';\nimport { exec } from 'child_process';\n\nimport { stripJunkTags, makeLinksAbsolute } from 'utils/dom';\nimport Parser from '../dist/mercury';\nimport extractorTemplate from './templates/custom-extractor';\nimport extractorTestTemplate from './templates/custom-extractor-test';\n\nconst questions = [\n {\n type: 'input',\n name: 'website',\n message:\n \"Paste a url to an article you'd like to create or extend a parser for:\",\n validate(value) {\n const { hostname } = URL.parse(value);\n if (hostname) return true;\n\n return false;\n },\n },\n];\nlet spinner;\n\nfunction confirm(fn, args, msg, newParser) {\n spinner = ora({ text: msg });\n spinner.start();\n const result = fn(...args);\n\n if (result && result.then) {\n result.then(r => savePage(r, args, newParser));\n } else {\n spinner.succeed();\n }\n\n return result;\n}\n\nfunction confirmCreateDir(dir, msg) {\n if (!fs.existsSync(dir)) {\n confirm(fs.mkdirSync, [dir], msg);\n }\n}\n\nfunction getDir(url) {\n const { hostname } = URL.parse(url);\n return `./src/extractors/custom/${hostname}`;\n}\n\nfunction scaffoldCustomParser(url) {\n const dir = getDir(url);\n const { hostname } = URL.parse(url);\n let newParser = false;\n\n if (!fs.existsSync(dir)) {\n newParser = true;\n confirmCreateDir(dir, `Creating ${hostname} directory`);\n }\n\n confirm(Parser.fetchResource, [url], 'Fetching fixture', newParser);\n}\n\n// if has arg, just assume that arg is a url and skip prmopt\nconst urlArg = process.argv[2];\nif (urlArg) {\n scaffoldCustomParser(urlArg);\n} else {\n inquirer.prompt(questions).then(answers => {\n scaffoldCustomParser(answers.website);\n });\n}\n\nfunction generateScaffold(url, file, result) {\n const { hostname } = URL.parse(url);\n const extractor = extractorTemplate(hostname, extractorName(hostname));\n const extractorTest = extractorTestTemplate(\n file,\n url,\n getDir(url),\n result,\n extractorName(hostname)\n );\n\n fs.writeFileSync(`${getDir(url)}/index.js`, extractor);\n fs.writeFileSync(`${getDir(url)}/index.test.js`, extractorTest);\n fs.appendFileSync('./src/extractors/custom/index.js', exportString(url));\n exec(`npm run lint-fix-quiet -- ${getDir(url)}/*.js`);\n}\n\nfunction savePage($, [url], newParser) {\n const { hostname } = URL.parse(url);\n\n spinner.succeed();\n\n const file = `./fixtures/${hostname}.html`;\n // fix http(s) relative links:\n makeLinksAbsolute($('*').first(), $, url);\n $('[src], [href]').each((index, node) => {\n const $node = $(node);\n const link = $node.attr('src');\n if (link && link.slice(0, 2) === '//') {\n $node.attr('src', `http:${link}`);\n }\n });\n const html = stripJunkTags($('*').first(), $, ['script']).html();\n\n fs.writeFileSync(file, html);\n\n Parser.parse(url, { html }).then(result => {\n if (newParser) {\n confirm(\n generateScaffold,\n [url, file, result],\n 'Generating parser and tests'\n );\n console.log(`Your custom site extractor has been set up. To get started building it, run\n yarn watch:test -- ${hostname}\n -- OR --\n npm run watch:test -- ${hostname}`);\n } else {\n console.log(`\n It looks like you already have a custom parser for this url.\n The page you linked to has been added to ${file}. Copy and paste\n the following code to use that page in your tests:\n const html = fs.readFileSync('${file}');`);\n }\n });\n}\n\nfunction exportString(url) {\n const { hostname } = URL.parse(url);\n return `export * from './${hostname}';`;\n}\n\nfunction extractorName(hostname) {\n const name = hostname\n .split('.')\n .map(w => `${w.charAt(0).toUpperCase()}${w.slice(1)}`)\n .join('');\n return `${name}Extractor`;\n}\n"],"names":["KEEP_CLASS","STRIP_OUTPUT_TAGS","stripJunkTags","article","$","tags","length","join","not","remove","absolutize","rootUrl","attr","baseUrl","each","_","node","attrs","getAttrs","url","absoluteUrl","URL","resolve","setAttr","absolutizeSet","$content","urlSet","srcset","candidates","match","absoluteCandidates","map","candidate","parts","trim","replace","split","absoluteUrlSet","makeLinksAbsolute","forEach","attribs","attributes","reduce","acc","index","name","value","val","setAttribute","insertValues","strings","values","result","part","idx","toString","bodyPattern","trailingWhitespace","template","compiled","body","indentLevel","slice","line","test","hostname","IGNORE","testFor","key","dir","find","k","file","questions","type","message","validate","parse","spinner","confirm","fn","args","msg","newParser","ora","text","start","then","r","savePage","succeed","confirmCreateDir","fs","existsSync","mkdirSync","getDir","scaffoldCustomParser","Parser","fetchResource","urlArg","process","argv","inquirer","prompt","answers","website","generateScaffold","extractor","extractorTemplate","extractorName","extractorTest","extractorTestTemplate","writeFileSync","appendFileSync","exportString","exec","first","$node","link","html","console","log","w","charAt","toUpperCase"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"} \ No newline at end of file diff --git a/dist/mercury.js b/dist/mercury.js index 23817530..74f7c299 100644 --- a/dist/mercury.js +++ b/dist/mercury.js @@ -7846,6 +7846,12 @@ var RootExtractor = { }; } + var extendedResults = {}; + + if (extractor.extend) { + extendedResults = selectExtendedTypes(extractor.extend, opts); + } + var title = extractResult(_objectSpread({}, opts, { type: 'title' })); @@ -7894,12 +7900,6 @@ var RootExtractor = { url = _ref3.url, domain = _ref3.domain; - var extendedResults = {}; - - if (extractor.extend) { - extendedResults = selectExtendedTypes(extractor.extend, opts); - } - return _objectSpread({ title: title, content: content, diff --git a/dist/mercury.js.map b/dist/mercury.js.map index 56054472..f8ca2097 100644 --- a/dist/mercury.js.map +++ b/dist/mercury.js.map @@ -1 +1 @@ -{"version":3,"file":"mercury.js","sources":["../src/utils/text/normalize-spaces.js","../src/utils/text/extract-from-url.js","../src/utils/text/constants.js","../src/utils/text/page-num-from-url.js","../src/utils/text/remove-anchor.js","../src/utils/text/article-base-url.js","../src/utils/text/has-sentence-end.js","../src/utils/text/excerpt-content.js","../src/utils/text/get-encoding.js","../src/resource/utils/constants.js","../src/resource/utils/fetch-resource.js","../src/resource/utils/dom/normalize-meta-tags.js","../src/utils/dom/constants.js","../src/utils/dom/strip-unlikely-candidates.js","../src/utils/dom/brs-to-ps.js","../src/utils/dom/paragraphize.js","../src/utils/dom/convert-to-paragraphs.js","../src/utils/dom/convert-node-to.js","../src/utils/dom/clean-images.js","../src/utils/dom/mark-to-keep.js","../src/utils/dom/strip-junk-tags.js","../src/utils/dom/clean-h-ones.js","../src/utils/dom/clean-attributes.js","../src/utils/dom/remove-empty.js","../src/extractors/generic/content/scoring/constants.js","../src/extractors/generic/content/scoring/get-weight.js","../src/extractors/generic/content/scoring/get-score.js","../src/extractors/generic/content/scoring/score-commas.js","../src/extractors/generic/content/scoring/score-length.js","../src/extractors/generic/content/scoring/score-paragraph.js","../src/extractors/generic/content/scoring/set-score.js","../src/extractors/generic/content/scoring/add-score.js","../src/extractors/generic/content/scoring/add-to-parent.js","../src/extractors/generic/content/scoring/get-or-init-score.js","../src/extractors/generic/content/scoring/score-node.js","../src/extractors/generic/content/scoring/score-content.js","../src/extractors/generic/content/scoring/merge-siblings.js","../src/extractors/generic/content/scoring/find-top-candidate.js","../src/extractors/generic/content/scoring/index.js","../src/utils/dom/clean-tags.js","../src/utils/dom/clean-headers.js","../src/utils/dom/rewrite-top-level.js","../src/utils/dom/make-links-absolute.js","../src/utils/dom/link-density.js","../src/utils/dom/extract-from-meta.js","../src/utils/dom/extract-from-selectors.js","../src/utils/dom/strip-tags.js","../src/utils/dom/within-comment.js","../src/utils/dom/node-is-sufficient.js","../src/utils/dom/is-wordpress.js","../src/utils/dom/get-attrs.js","../src/utils/dom/set-attr.js","../src/utils/dom/set-attrs.js","../src/utils/dom/index.js","../src/resource/utils/dom/constants.js","../src/resource/utils/dom/convert-lazy-loaded-images.js","../src/resource/utils/dom/clean.js","../src/resource/index.js","../src/utils/range.js","../src/utils/validate-url.js","../src/utils/merge-supported-domains.js","../src/extractors/add-extractor.js","../src/extractors/custom/blogspot.com/index.js","../src/extractors/custom/nymag.com/index.js","../src/extractors/custom/wikipedia.org/index.js","../src/extractors/custom/twitter.com/index.js","../src/extractors/custom/www.nytimes.com/index.js","../src/extractors/custom/www.theatlantic.com/index.js","../src/extractors/custom/www.newyorker.com/index.js","../src/extractors/custom/www.wired.com/index.js","../src/extractors/custom/www.msn.com/index.js","../src/extractors/custom/www.yahoo.com/index.js","../src/extractors/custom/www.buzzfeed.com/index.js","../src/extractors/custom/fandom.wikia.com/index.js","../src/extractors/custom/www.littlethings.com/index.js","../src/extractors/custom/www.politico.com/index.js","../src/extractors/custom/deadspin.com/index.js","../src/extractors/custom/www.broadwayworld.com/index.js","../src/extractors/custom/www.apartmenttherapy.com/index.js","../src/extractors/custom/medium.com/index.js","../src/extractors/custom/www.tmz.com/index.js","../src/extractors/custom/www.washingtonpost.com/index.js","../src/extractors/custom/www.huffingtonpost.com/index.js","../src/extractors/custom/newrepublic.com/index.js","../src/extractors/custom/money.cnn.com/index.js","../src/extractors/custom/www.theverge.com/index.js","../src/extractors/custom/www.cnn.com/index.js","../src/extractors/custom/www.aol.com/index.js","../src/extractors/custom/www.youtube.com/index.js","../src/extractors/custom/www.theguardian.com/index.js","../src/extractors/custom/www.sbnation.com/index.js","../src/extractors/custom/www.bloomberg.com/index.js","../src/extractors/custom/www.bustle.com/index.js","../src/extractors/custom/www.npr.org/index.js","../src/extractors/custom/www.recode.net/index.js","../src/extractors/custom/qz.com/index.js","../src/extractors/custom/www.dmagazine.com/index.js","../src/extractors/custom/www.reuters.com/index.js","../src/extractors/custom/mashable.com/index.js","../src/extractors/custom/www.chicagotribune.com/index.js","../src/extractors/custom/www.vox.com/index.js","../src/extractors/custom/news.nationalgeographic.com/index.js","../src/extractors/custom/www.nationalgeographic.com/index.js","../src/extractors/custom/www.latimes.com/index.js","../src/extractors/custom/pagesix.com/index.js","../src/extractors/custom/thefederalistpapers.org/index.js","../src/extractors/custom/www.cbssports.com/index.js","../src/extractors/custom/www.msnbc.com/index.js","../src/extractors/custom/www.thepoliticalinsider.com/index.js","../src/extractors/custom/www.mentalfloss.com/index.js","../src/extractors/custom/abcnews.go.com/index.js","../src/extractors/custom/www.nydailynews.com/index.js","../src/extractors/custom/www.cnbc.com/index.js","../src/extractors/custom/www.popsugar.com/index.js","../src/extractors/custom/observer.com/index.js","../src/extractors/custom/people.com/index.js","../src/extractors/custom/www.usmagazine.com/index.js","../src/extractors/custom/www.rollingstone.com/index.js","../src/extractors/custom/247sports.com/index.js","../src/extractors/custom/uproxx.com/index.js","../src/extractors/custom/www.eonline.com/index.js","../src/extractors/custom/www.miamiherald.com/index.js","../src/extractors/custom/www.refinery29.com/index.js","../src/extractors/custom/www.macrumors.com/index.js","../src/extractors/custom/www.androidcentral.com/index.js","../src/extractors/custom/www.si.com/index.js","../src/extractors/custom/www.rawstory.com/index.js","../src/extractors/custom/www.cnet.com/index.js","../src/extractors/custom/www.today.com/index.js","../src/extractors/custom/www.al.com/index.js","../src/extractors/custom/www.thepennyhoarder.com/index.js","../src/extractors/custom/www.westernjournalism.com/index.js","../src/extractors/custom/www.americanow.com/index.js","../src/extractors/custom/sciencefly.com/index.js","../src/extractors/custom/hellogiggles.com/index.js","../src/extractors/custom/thoughtcatalog.com/index.js","../src/extractors/custom/www.inquisitr.com/index.js","../src/extractors/custom/www.nbcnews.com/index.js","../src/extractors/custom/fortune.com/index.js","../src/extractors/custom/www.linkedin.com/index.js","../src/extractors/custom/obamawhitehouse.archives.gov/index.js","../src/extractors/custom/www.opposingviews.com/index.js","../src/extractors/custom/www.prospectmagazine.co.uk/index.js","../src/extractors/custom/forward.com/index.js","../src/extractors/custom/www.qdaily.com/index.js","../src/extractors/custom/gothamist.com/index.js","../src/extractors/custom/www.fool.com/index.js","../src/extractors/custom/www.slate.com/index.js","../src/extractors/custom/ici.radio-canada.ca/index.js","../src/extractors/custom/www.fortinet.com/index.js","../src/extractors/custom/www.fastcompany.com/index.js","../src/extractors/custom/blisterreview.com/index.js","../src/extractors/custom/news.mynavi.jp/index.js","../src/extractors/custom/clinicaltrials.gov/index.js","../src/extractors/custom/github.com/index.js","../src/extractors/custom/www.reddit.com/index.js","../src/extractors/custom/otrs.com/index.js","../src/extractors/custom/www.ossnews.jp/index.js","../src/extractors/custom/buzzap.jp/index.js","../src/extractors/custom/www.asahi.com/index.js","../src/extractors/custom/www.sanwa.co.jp/index.js","../src/extractors/custom/www.elecom.co.jp/index.js","../src/extractors/custom/scan.netsecurity.ne.jp/index.js","../src/extractors/custom/jvndb.jvn.jp/index.js","../src/extractors/custom/genius.com/index.js","../src/extractors/custom/www.jnsa.org/index.js","../src/extractors/custom/phpspot.org/index.js","../src/extractors/custom/www.infoq.com/index.js","../src/extractors/custom/www.moongift.jp/index.js","../src/extractors/custom/www.itmedia.co.jp/index.js","../src/extractors/custom/www.publickey1.jp/index.js","../src/extractors/custom/takagi-hiromitsu.jp/index.js","../src/extractors/custom/bookwalker.jp/index.js","../src/extractors/custom/www.yomiuri.co.jp/index.js","../src/extractors/custom/japan.cnet.com/index.js","../src/extractors/custom/deadline.com/index.js","../src/extractors/custom/www.gizmodo.jp/index.js","../src/extractors/custom/getnews.jp/index.js","../src/extractors/custom/www.lifehacker.jp/index.js","../src/extractors/custom/sect.iij.ad.jp/index.js","../src/extractors/custom/www.oreilly.co.jp/index.js","../src/extractors/custom/www.ipa.go.jp/index.js","../src/extractors/custom/weekly.ascii.jp/index.js","../src/extractors/custom/techlog.iij.ad.jp/index.js","../src/extractors/custom/wired.jp/index.js","../src/extractors/custom/japan.zdnet.com/index.js","../src/extractors/custom/www.rbbtoday.com/index.js","../src/extractors/custom/www.lemonde.fr/index.js","../src/extractors/custom/www.phoronix.com/index.js","../src/extractors/custom/pitchfork.com/index.js","../src/extractors/custom/biorxiv.org/index.js","../src/extractors/custom/epaper.zeit.de/index.js","../src/extractors/custom/www.ladbible.com/index.js","../src/extractors/custom/timesofindia.indiatimes.com/index.js","../src/extractors/custom/ma.ttias.be/index.js","../src/extractors/custom/pastebin.com/index.js","../src/extractors/custom/www.abendblatt.de/index.js","../src/extractors/custom/www.gruene.de/index.js","../src/extractors/custom/www.engadget.com/index.js","../src/extractors/custom/arstechnica.com/index.js","../src/extractors/custom/www.ndtv.com/index.js","../src/extractors/custom/www.spektrum.de/index.js","../src/extractors/custom/postlight.com/index.js","../src/extractors/custom/www.investmentexecutive.com/index.js","../src/extractors/custom/www.cbc.ca/index.js","../src/extractors/all.js","../src/cleaners/constants.js","../src/cleaners/author.js","../src/cleaners/lead-image-url.js","../src/cleaners/dek.js","../src/cleaners/date-published.js","../src/cleaners/content.js","../src/cleaners/title.js","../src/cleaners/resolve-split-title.js","../src/cleaners/index.js","../src/extractors/generic/content/extract-best-node.js","../src/extractors/generic/content/extractor.js","../src/extractors/generic/title/constants.js","../src/extractors/generic/title/extractor.js","../src/extractors/generic/author/constants.js","../src/extractors/generic/author/extractor.js","../src/extractors/generic/date-published/constants.js","../src/extractors/generic/date-published/extractor.js","../src/extractors/generic/dek/extractor.js","../src/extractors/generic/lead-image-url/constants.js","../src/extractors/generic/lead-image-url/score-image.js","../src/extractors/generic/lead-image-url/extractor.js","../src/extractors/generic/next-page-url/scoring/utils/score-similarity.js","../src/extractors/generic/next-page-url/scoring/utils/score-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-page-in-link.js","../src/extractors/generic/next-page-url/scoring/constants.js","../src/extractors/generic/next-page-url/scoring/utils/score-extraneous-links.js","../src/extractors/generic/next-page-url/scoring/utils/score-by-parents.js","../src/extractors/generic/next-page-url/scoring/utils/score-prev-link.js","../src/extractors/generic/next-page-url/scoring/utils/should-score.js","../src/extractors/generic/next-page-url/scoring/utils/score-base-url.js","../src/extractors/generic/next-page-url/scoring/utils/score-next-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-cap-links.js","../src/extractors/generic/next-page-url/scoring/score-links.js","../src/extractors/generic/next-page-url/extractor.js","../src/extractors/generic/url/constants.js","../src/extractors/generic/url/extractor.js","../src/extractors/generic/excerpt/constants.js","../src/extractors/generic/excerpt/extractor.js","../src/extractors/generic/word-count/extractor.js","../src/extractors/generic/index.js","../src/extractors/detect-by-html.js","../src/extractors/get-extractor.js","../src/extractors/root-extractor.js","../src/extractors/collect-all-pages.js","../src/mercury.js"],"sourcesContent":["const NORMALIZE_RE = /\\s{2,}(?![^<>]*<\\/(pre|code|textarea)>)/g;\n\nexport default function normalizeSpaces(text) {\n return text.replace(NORMALIZE_RE, ' ').trim();\n}\n","// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nexport default function extractFromUrl(url, regexList) {\n const matchRe = regexList.find(re => re.test(url));\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n","// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nexport const PAGE_IN_HREF_RE = new RegExp(\n '(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})',\n 'i'\n);\n\nexport const HAS_ALPHA_RE = /[a-z]/i;\n\nexport const IS_ALPHA_RE = /^[a-z]+$/i;\nexport const IS_DIGIT_RE = /^[0-9]+$/i;\n\nexport const ENCODING_RE = /charset=([\\w-]+)\\b/;\nexport const DEFAULT_ENCODING = 'utf-8';\n","import { PAGE_IN_HREF_RE } from './constants';\n\nexport default function pageNumFromUrl(url) {\n const matches = url.match(PAGE_IN_HREF_RE);\n if (!matches) return null;\n\n const pageNum = parseInt(matches[6], 10);\n\n // Return pageNum < 100, otherwise\n // return null\n return pageNum < 100 ? pageNum : null;\n}\n","export default function removeAnchor(url) {\n return url.split('#')[0].replace(/\\/$/, '');\n}\n","import URL from 'url';\n\nimport {\n HAS_ALPHA_RE,\n IS_ALPHA_RE,\n IS_DIGIT_RE,\n PAGE_IN_HREF_RE,\n} from './constants';\n\nfunction isGoodSegment(segment, index, firstSegmentHasLetters) {\n let goodSegment = true;\n\n // If this is purely a number, and it's the first or second\n // url_segment, it's probably a page number. Remove it.\n if (index < 2 && IS_DIGIT_RE.test(segment) && segment.length < 3) {\n goodSegment = true;\n }\n\n // If this is the first url_segment and it's just \"index\",\n // remove it\n if (index === 0 && segment.toLowerCase() === 'index') {\n goodSegment = false;\n }\n\n // If our first or second url_segment is smaller than 3 characters,\n // and the first url_segment had no alphas, remove it.\n if (index < 2 && segment.length < 3 && !firstSegmentHasLetters) {\n goodSegment = false;\n }\n\n return goodSegment;\n}\n\n// Take a URL, and return the article base of said URL. That is, no\n// pagination data exists in it. Useful for comparing to other links\n// that might have pagination data within them.\nexport default function articleBaseUrl(url, parsed) {\n const parsedUrl = parsed || URL.parse(url);\n const { protocol, host, path } = parsedUrl;\n\n let firstSegmentHasLetters = false;\n const cleanedSegments = path\n .split('/')\n .reverse()\n .reduce((acc, rawSegment, index) => {\n let segment = rawSegment;\n\n // Split off and save anything that looks like a file type.\n if (segment.includes('.')) {\n const [possibleSegment, fileExt] = segment.split('.');\n if (IS_ALPHA_RE.test(fileExt)) {\n segment = possibleSegment;\n }\n }\n\n // If our first or second segment has anything looking like a page\n // number, remove it.\n if (PAGE_IN_HREF_RE.test(segment) && index < 2) {\n segment = segment.replace(PAGE_IN_HREF_RE, '');\n }\n\n // If we're on the first segment, check to see if we have any\n // characters in it. The first segment is actually the last bit of\n // the URL, and this will be helpful to determine if we're on a URL\n // segment that looks like \"/2/\" for example.\n if (index === 0) {\n firstSegmentHasLetters = HAS_ALPHA_RE.test(segment);\n }\n\n // If it's not marked for deletion, push it to cleaned_segments.\n if (isGoodSegment(segment, index, firstSegmentHasLetters)) {\n acc.push(segment);\n }\n\n return acc;\n }, []);\n\n return `${protocol}//${host}${cleanedSegments.reverse().join('/')}`;\n}\n","// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nconst SENTENCE_END_RE = new RegExp('.( |$)');\nexport default function hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n","export default function excerptContent(content, words = 10) {\n return content\n .trim()\n .split(/\\s+/)\n .slice(0, words)\n .join(' ');\n}\n","import iconv from 'iconv-lite';\nimport { DEFAULT_ENCODING, ENCODING_RE } from './constants';\n\n// check a string for encoding; this is\n// used in our fetchResource function to\n// ensure correctly encoded responses\nexport default function getEncoding(str) {\n let encoding = DEFAULT_ENCODING;\n const matches = ENCODING_RE.exec(str);\n if (matches !== null) {\n [, str] = matches;\n }\n if (iconv.encodingExists(str)) {\n encoding = str;\n }\n return encoding;\n}\n","import cheerio from 'cheerio';\n\n// Browser does not like us setting user agent\nexport const REQUEST_HEADERS = cheerio.browser\n ? {}\n : {\n 'User-Agent':\n 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',\n };\n\n// The number of milliseconds to attempt to fetch a resource before timing out.\nexport const FETCH_TIMEOUT = 10000;\n\n// Content types that we do not extract content from\nconst BAD_CONTENT_TYPES = [\n 'audio/mpeg',\n 'image/gif',\n 'image/jpeg',\n 'image/jpg',\n];\n\nexport const BAD_CONTENT_TYPES_RE = new RegExp(\n `^(${BAD_CONTENT_TYPES.join('|')})$`,\n 'i'\n);\n\n// Use this setting as the maximum size an article can be\n// for us to attempt parsing. Defaults to 5 MB.\nexport const MAX_CONTENT_LENGTH = 5242880;\n\n// Turn the global proxy on or off\n// Proxying is not currently enabled in Python source\n// so not implementing logic in port.\nexport const PROXY_DOMAINS = false;\nexport const REQUESTS_PROXIES = {\n http: 'http://38.98.105.139:33333',\n https: 'http://38.98.105.139:33333',\n};\n\nexport const DOMAINS_TO_PROXY = ['nih.gov', 'gutenberg.org'];\n","import URL from 'url';\nimport request from 'postman-request';\n\nimport {\n REQUEST_HEADERS,\n FETCH_TIMEOUT,\n BAD_CONTENT_TYPES_RE,\n MAX_CONTENT_LENGTH,\n} from './constants';\n\nfunction get(options) {\n return new Promise((resolve, reject) => {\n request(options, (err, response, body) => {\n if (err) {\n reject(err);\n } else {\n resolve({ body, response });\n }\n });\n });\n}\n\n// Evaluate a response to ensure it's something we should be keeping.\n// This does not validate in the sense of a response being 200 or not.\n// Validation here means that we haven't found reason to bail from\n// further processing of this url.\n\nexport function validateResponse(response, parseNon200 = false) {\n // Check if we got a valid status code\n // This isn't great, but I'm requiring a statusMessage to be set\n // before short circuiting b/c nock doesn't set it in tests\n // statusMessage only not set in nock response, in which case\n // I check statusCode, which is currently only 200 for OK responses\n // in tests\n if (\n (response.statusMessage && response.statusMessage !== 'OK') ||\n response.statusCode !== 200\n ) {\n if (!response.statusCode) {\n throw new Error(\n `Unable to fetch content. Original exception was ${response.error}`\n );\n } else if (!parseNon200) {\n throw new Error(\n `Resource returned a response status code of ${\n response.statusCode\n } and resource was instructed to reject non-200 status codes.`\n );\n }\n }\n\n const {\n 'content-type': contentType,\n 'content-length': contentLength,\n } = response.headers;\n\n // Check that the content is not in BAD_CONTENT_TYPES\n if (BAD_CONTENT_TYPES_RE.test(contentType)) {\n throw new Error(\n `Content-type for this resource was ${contentType} and is not allowed.`\n );\n }\n\n // Check that the content length is below maximum\n if (contentLength > MAX_CONTENT_LENGTH) {\n throw new Error(\n `Content for this resource was too large. Maximum content length is ${MAX_CONTENT_LENGTH}.`\n );\n }\n\n return true;\n}\n\n// Grabs the last two pieces of the URL and joins them back together\n// This is to get the 'livejournal.com' from 'erotictrains.livejournal.com'\nexport function baseDomain({ host }) {\n return host\n .split('.')\n .slice(-2)\n .join('.');\n}\n\n// Set our response attribute to the result of fetching our URL.\n// TODO: This should gracefully handle timeouts and raise the\n// proper exceptions on the many failure cases of HTTP.\n// TODO: Ensure we are not fetching something enormous. Always return\n// unicode content for HTML, with charset conversion.\n\nexport default async function fetchResource(url, parsedUrl, headers = {}) {\n parsedUrl = parsedUrl || URL.parse(encodeURI(url));\n const options = {\n url: parsedUrl.href,\n headers: { ...REQUEST_HEADERS, ...headers },\n timeout: FETCH_TIMEOUT,\n // Accept cookies\n jar: true,\n // Set to null so the response returns as binary and body as buffer\n // https://github.com/request/request#requestoptions-callback\n encoding: null,\n // Accept and decode gzip\n gzip: true,\n // Follow any non-GET redirects\n followAllRedirects: true,\n ...(typeof window !== 'undefined'\n ? {}\n : {\n // Follow GET redirects; this option is for Node only\n followRedirect: true,\n }),\n };\n\n const { response, body } = await get(options);\n\n try {\n validateResponse(response);\n return {\n body,\n response,\n };\n } catch (e) {\n return {\n error: true,\n message: e.message,\n };\n }\n}\n","function convertMetaProp($, from, to) {\n $(`meta[${from}]`).each((_, node) => {\n const $node = $(node);\n\n const value = $node.attr(from);\n $node.attr(to, value);\n $node.removeAttr(from);\n });\n\n return $;\n}\n\n// For ease of use in extracting from meta tags,\n// replace the \"content\" attribute on meta tags with the\n// \"value\" attribute.\n//\n// In addition, normalize 'property' attributes to 'name' for ease of\n// querying later. See, e.g., og or twitter meta tags.\n\nexport default function normalizeMetaTags($) {\n $ = convertMetaProp($, 'content', 'value');\n $ = convertMetaProp($, 'property', 'name');\n return $;\n}\n","// Spacer images to be removed\nexport const SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nexport const KEEP_CLASS = 'mercury-parser-keep';\n\nexport const KEEP_SELECTORS = [\n 'iframe[src^=\"https://www.youtube.com\"]',\n 'iframe[src^=\"https://www.youtube-nocookie.com\"]',\n 'iframe[src^=\"http://www.youtube.com\"]',\n 'iframe[src^=\"https://player.vimeo\"]',\n 'iframe[src^=\"http://player.vimeo\"]',\n 'iframe[src^=\"https://www.redditmedia.com\"]',\n];\n\n// A list of tags to strip from the output if we encounter them.\nexport const STRIP_OUTPUT_TAGS = [\n 'title',\n 'script',\n 'noscript',\n 'link',\n 'style',\n 'hr',\n 'embed',\n 'iframe',\n 'object',\n];\n\n// cleanAttributes\nexport const REMOVE_ATTRS = ['style', 'align'];\nexport const REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(\n selector => `[${selector}]`\n);\nexport const REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nexport const WHITELIST_ATTRS = [\n 'src',\n 'srcset',\n 'sizes',\n 'type',\n 'href',\n 'class',\n 'id',\n 'alt',\n 'xlink:href',\n 'width',\n 'height',\n];\n\nexport const WHITELIST_ATTRS_RE = new RegExp(\n `^(${WHITELIST_ATTRS.join('|')})$`,\n 'i'\n);\n\n// removeEmpty\nexport const REMOVE_EMPTY_TAGS = ['p'];\nexport const REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(\n tag => `${tag}:empty`\n).join(',');\n\n// cleanTags\nexport const CLEAN_CONDITIONALLY_TAGS = [\n 'ul',\n 'ol',\n 'table',\n 'div',\n 'button',\n 'form',\n].join(',');\n\n// cleanHeaders\nconst HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nexport const HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n // 'form', // This is too generic, has too many false positives\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'outbrain',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'taboola',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a

to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into

tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nexport const IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\nexport const NEXT_LINK_TEXT_RE = /(next|weiter|continue|>([^|]|$)|»([^|]|$))/i;\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match 2 or more consecutive
tags\nexport const BR_TAGS_RE = new RegExp('(]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp(']*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import { CANDIDATES_WHITELIST, CANDIDATES_BLACKLIST } from './constants';\n\nexport default function stripUnlikelyCandidates($) {\n // Loop through the provided document and remove any non-link nodes\n // that are unlikely candidates for article content.\n //\n // Links are ignored because there are very often links to content\n // that are identified as non-body-content, but may be inside\n // article-like content.\n //\n // :param $: a cheerio object to strip nodes from\n // :return $: the cleaned cheerio object\n $('*')\n .not('a')\n .each((index, node) => {\n const $node = $(node);\n const classes = $node.attr('class');\n const id = $node.attr('id');\n if (!id && !classes) return;\n\n const classAndId = `${classes || ''} ${id || ''}`;\n if (CANDIDATES_WHITELIST.test(classAndId)) {\n return;\n }\n if (CANDIDATES_BLACKLIST.test(classAndId)) {\n $node.remove();\n }\n });\n\n return $;\n}\n","import { paragraphize } from './index';\n\n// ## NOTES:\n// Another good candidate for refactoring/optimizing.\n// Very imperative code, I don't love it. - AP\n\n// Given cheerio object, convert consecutive
tags into\n//

tags instead.\n//\n// :param $: A cheerio object\n\nexport default function brsToPs($) {\n let collapsing = false;\n $('br').each((index, element) => {\n const $element = $(element);\n const nextElement = $element.next().get(0);\n\n if (nextElement && nextElement.tagName.toLowerCase() === 'br') {\n collapsing = true;\n $element.remove();\n } else if (collapsing) {\n collapsing = false;\n paragraphize(element, $, true);\n }\n });\n\n return $;\n}\n","import { BLOCK_LEVEL_TAGS_RE } from './constants';\n\n// Given a node, turn it into a P if it is not already a P, and\n// make sure it conforms to the constraints of a P tag (I.E. does\n// not contain any other block tags.)\n//\n// If the node is a
, it treats the following inline siblings\n// as if they were its children.\n//\n// :param node: The node to paragraphize; this is a raw node\n// :param $: The cheerio object to handle dom manipulation\n// :param br: Whether or not the passed node is a br\n\nexport default function paragraphize(node, $, br = false) {\n const $node = $(node);\n\n if (br) {\n let sibling = node.nextSibling;\n const p = $('

');\n\n // while the next node is text or not a block level element\n // append it to a new p node\n while (\n sibling &&\n !(sibling.tagName && BLOCK_LEVEL_TAGS_RE.test(sibling.tagName))\n ) {\n const { nextSibling } = sibling;\n $(sibling).appendTo(p);\n sibling = nextSibling;\n }\n\n $node.replaceWith(p);\n $node.remove();\n return $;\n }\n\n return $;\n}\n","import { brsToPs, convertNodeTo } from 'utils/dom';\n\nimport { DIV_TO_P_BLOCK_TAGS } from './constants';\n\nfunction convertDivs($) {\n $('div').each((index, div) => {\n const $div = $(div);\n const convertible = $div.children(DIV_TO_P_BLOCK_TAGS).length === 0;\n\n if (convertible) {\n convertNodeTo($div, $, 'p');\n }\n });\n\n return $;\n}\n\nfunction convertSpans($) {\n $('span').each((index, span) => {\n const $span = $(span);\n const convertible = $span.parents('p, div, li, figcaption').length === 0;\n if (convertible) {\n convertNodeTo($span, $, 'p');\n }\n });\n\n return $;\n}\n\n// Loop through the provided doc, and convert any p-like elements to\n// actual paragraph tags.\n//\n// Things fitting this criteria:\n// * Multiple consecutive
tags.\n// *
tags without block level elements inside of them\n// * tags who are not children of

or

tags.\n//\n// :param $: A cheerio object to search\n// :return cheerio object with new p elements\n// (By-reference mutation, though. Returned just for convenience.)\n\nexport default function convertToParagraphs($) {\n $ = brsToPs($);\n $ = convertDivs($);\n $ = convertSpans($);\n\n return $;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function convertNodeTo($node, $, tag = 'p') {\n const node = $node.get(0);\n if (!node) {\n return $;\n }\n const attrs = getAttrs(node) || {};\n\n const attribString = Reflect.ownKeys(attrs)\n .map(key => `${key}=${attrs[key]}`)\n .join(' ');\n let html;\n\n if ($.browser) {\n // In the browser, the contents of noscript tags aren't rendered, therefore\n // transforms on the noscript tag (commonly used for lazy-loading) don't work\n // as expected. This test case handles that\n html =\n node.tagName.toLowerCase() === 'noscript' ? $node.text() : $node.html();\n } else {\n html = $node.contents();\n }\n $node.replaceWith(`<${tag} ${attribString}>${html}`);\n return $;\n}\n","import { SPACER_RE } from './constants';\n\nfunction cleanForHeight($img, $) {\n const height = parseInt($img.attr('height'), 10);\n const width = parseInt($img.attr('width'), 10) || 20;\n\n // Remove images that explicitly have very small heights or\n // widths, because they are most likely shims or icons,\n // which aren't very useful for reading.\n if ((height || 20) < 10 || width < 10) {\n $img.remove();\n } else if (height) {\n // Don't ever specify a height on images, so that we can\n // scale with respect to width without screwing up the\n // aspect ratio.\n $img.removeAttr('height');\n }\n\n return $;\n}\n\n// Cleans out images where the source string matches transparent/spacer/etc\n// TODO This seems very aggressive - AP\nfunction removeSpacers($img, $) {\n if (SPACER_RE.test($img.attr('src'))) {\n $img.remove();\n }\n\n return $;\n}\n\nexport default function cleanImages($article, $) {\n $article.find('img').each((index, img) => {\n const $img = $(img);\n\n cleanForHeight($img, $);\n removeSpacers($img, $);\n });\n\n return $;\n}\n","import URL from 'url';\n\nimport { KEEP_SELECTORS, KEEP_CLASS } from './constants';\n\nexport default function markToKeep(article, $, url, tags = []) {\n if (tags.length === 0) {\n tags = KEEP_SELECTORS;\n }\n\n if (url) {\n const { protocol, hostname } = URL.parse(url);\n tags = [...tags, `iframe[src^=\"${protocol}//${hostname}\"]`];\n }\n\n $(tags.join(','), article).addClass(KEEP_CLASS);\n\n return $;\n}\n","import { STRIP_OUTPUT_TAGS, KEEP_CLASS } from './constants';\n\nexport default function stripJunkTags(article, $, tags = []) {\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article)\n .not(`.${KEEP_CLASS}`)\n .remove();\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// H1 tags are typically the article title, which should be extracted\n// by the title extractor instead. If there's less than 3 of them (<3),\n// strip them. Otherwise, turn 'em into H2s.\nexport default function cleanHOnes(article, $) {\n const $hOnes = $('h1', article);\n\n if ($hOnes.length < 3) {\n $hOnes.each((index, node) => $(node).remove());\n } else {\n $hOnes.each((index, node) => {\n convertNodeTo($(node), $, 'h2');\n });\n }\n\n return $;\n}\n","import { getAttrs, setAttrs } from 'utils/dom';\n\nimport { WHITELIST_ATTRS_RE, KEEP_CLASS } from './constants';\n\nfunction removeAllButWhitelist($article, $) {\n $article.find('*').each((index, node) => {\n const attrs = getAttrs(node);\n\n setAttrs(\n node,\n Reflect.ownKeys(attrs).reduce((acc, attr) => {\n if (WHITELIST_ATTRS_RE.test(attr)) {\n return { ...acc, [attr]: attrs[attr] };\n }\n\n return acc;\n }, {})\n );\n });\n\n // Remove the mercury-parser-keep class from result\n $(`.${KEEP_CLASS}`, $article).removeClass(KEEP_CLASS);\n\n return $article;\n}\n\n// Remove attributes like style or align\nexport default function cleanAttributes($article, $) {\n // Grabbing the parent because at this point\n // $article will be wrapped in a div which will\n // have a score set on it.\n return removeAllButWhitelist(\n $article.parent().length ? $article.parent() : $article,\n $\n );\n}\n","export default function removeEmpty($article, $) {\n $article.find('p').each((index, p) => {\n const $p = $(p);\n if ($p.find('iframe, img').length === 0 && $p.text().trim() === '')\n $p.remove();\n });\n\n return $;\n}\n","// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n 'form',\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a
to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into

tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// Match 2 or more consecutive
tags\nexport const BR_TAGS_RE = new RegExp('(]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp(']*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PHOTO_HINTS_RE,\n READABILITY_ASSET,\n} from './constants';\n\n// Get the score of a node based on its className and id.\nexport default function getWeight(node) {\n const classes = node.attr('class');\n const id = node.attr('id');\n let score = 0;\n\n if (id) {\n // if id exists, try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(id)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(id)) {\n score -= 25;\n }\n }\n\n if (classes) {\n if (score === 0) {\n // if classes exist and id did not contribute to score\n // try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(classes)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(classes)) {\n score -= 25;\n }\n }\n\n // even if score has been set by id, add score for\n // possible photo matches\n // \"try to keep photos if we can\"\n if (PHOTO_HINTS_RE.test(classes)) {\n score += 10;\n }\n\n // add 25 if class matches entry-content-asset,\n // a class apparently instructed for use in the\n // Readability publisher guidelines\n // https://www.readability.com/developers/guidelines\n if (READABILITY_ASSET.test(classes)) {\n score += 25;\n }\n }\n\n return score;\n}\n","// returns the score of a node based on\n// the node's score attribute\n// returns null if no score set\nexport default function getScore($node) {\n return parseFloat($node.attr('score')) || null;\n}\n","// return 1 for every comma in text\nexport default function scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n","const idkRe = new RegExp('^(p|pre)$', 'i');\n\nexport default function scoreLength(textLength, tagName = 'p') {\n const chunks = textLength / 50;\n\n if (chunks > 0) {\n let lengthBonus;\n\n // No idea why p or pre are being tamped down here\n // but just following the source for now\n // Not even sure why tagName is included here,\n // since this is only being called from the context\n // of scoreParagraph\n if (idkRe.test(tagName)) {\n lengthBonus = chunks - 2;\n } else {\n lengthBonus = chunks - 1.25;\n }\n\n return Math.min(Math.max(lengthBonus, 0), 3);\n }\n\n return 0;\n}\n","import { scoreCommas, scoreLength } from './index';\n\n// Score a paragraph using various methods. Things like number of\n// commas, etc. Higher is better.\nexport default function scoreParagraph(node) {\n let score = 1;\n const text = node.text().trim();\n const textLength = text.length;\n\n // If this paragraph is less than 25 characters, don't count it.\n if (textLength < 25) {\n return 0;\n }\n\n // Add points for any commas within this paragraph\n score += scoreCommas(text);\n\n // For every 50 characters in this paragraph, add another point. Up\n // to 3 points.\n score += scoreLength(textLength);\n\n // Articles can end with short paragraphs when people are being clever\n // but they can also end with short paragraphs setting up lists of junk\n // that we strip. This negative tweaks junk setup paragraphs just below\n // the cutoff threshold.\n if (text.slice(-1) === ':') {\n score -= 1;\n }\n\n return score;\n}\n","export default function setScore($node, $, score) {\n $node.attr('score', score);\n return $node;\n}\n","import { getOrInitScore, setScore } from './index';\n\nexport default function addScore($node, $, amount) {\n try {\n const score = getOrInitScore($node, $) + amount;\n setScore($node, $, score);\n } catch (e) {\n // Ignoring; error occurs in scoreNode\n }\n\n return $node;\n}\n","import { addScore } from './index';\n\n// Adds 1/4 of a child's score to its parent\nexport default function addToParent(node, $, score) {\n const parent = node.parent();\n if (parent) {\n addScore(parent, $, score * 0.25);\n }\n\n return node;\n}\n","import { getScore, scoreNode, getWeight, addToParent } from './index';\n\n// gets and returns the score if it exists\n// if not, initializes a score based on\n// the node's tag type\nexport default function getOrInitScore($node, $, weightNodes = true) {\n let score = getScore($node);\n\n if (score) {\n return score;\n }\n\n score = scoreNode($node);\n\n if (weightNodes) {\n score += getWeight($node);\n }\n\n addToParent($node, $, score);\n\n return score;\n}\n","import { scoreParagraph } from './index';\nimport {\n PARAGRAPH_SCORE_TAGS,\n CHILD_CONTENT_TAGS,\n BAD_TAGS,\n} from './constants';\n\n// Score an individual node. Has some smarts for paragraphs, otherwise\n// just scores based on tag.\nexport default function scoreNode($node) {\n const { tagName } = $node.get(0);\n\n // TODO: Consider ordering by most likely.\n // E.g., if divs are a more common tag on a page,\n // Could save doing that regex test on every node – AP\n if (PARAGRAPH_SCORE_TAGS.test(tagName)) {\n return scoreParagraph($node);\n }\n if (tagName.toLowerCase() === 'div') {\n return 5;\n }\n if (CHILD_CONTENT_TAGS.test(tagName)) {\n return 3;\n }\n if (BAD_TAGS.test(tagName)) {\n return -3;\n }\n if (tagName.toLowerCase() === 'th') {\n return -5;\n }\n\n return 0;\n}\n","import { convertNodeTo } from 'utils/dom';\n\nimport { HNEWS_CONTENT_SELECTORS } from './constants';\nimport { scoreNode, setScore, getOrInitScore, addScore } from './index';\n\nfunction convertSpans($node, $) {\n if ($node.get(0)) {\n const { tagName } = $node.get(0);\n\n if (tagName === 'span') {\n // convert spans to divs\n convertNodeTo($node, $, 'div');\n }\n }\n}\n\nfunction addScoreTo($node, $, score) {\n if ($node) {\n convertSpans($node, $);\n addScore($node, $, score);\n }\n}\n\nfunction scorePs($, weightNodes) {\n $('p, pre')\n .not('[score]')\n .each((index, node) => {\n // The raw score for this paragraph, before we add any parent/child\n // scores.\n let $node = $(node);\n $node = setScore($node, $, getOrInitScore($node, $, weightNodes));\n\n const $parent = $node.parent();\n const rawScore = scoreNode($node);\n\n addScoreTo($parent, $, rawScore, weightNodes);\n if ($parent) {\n // Add half of the individual content score to the\n // grandparent\n addScoreTo($parent.parent(), $, rawScore / 2, weightNodes);\n }\n });\n\n return $;\n}\n\n// score content. Parents get the full value of their children's\n// content score, grandparents half\nexport default function scoreContent($, weightNodes = true) {\n // First, look for special hNews based selectors and give them a big\n // boost, if they exist\n HNEWS_CONTENT_SELECTORS.forEach(([parentSelector, childSelector]) => {\n $(`${parentSelector} ${childSelector}`).each((index, node) => {\n addScore($(node).parent(parentSelector), $, 80);\n });\n });\n\n // Doubling this again\n // Previous solution caused a bug\n // in which parents weren't retaining\n // scores. This is not ideal, and\n // should be fixed.\n scorePs($, weightNodes);\n scorePs($, weightNodes);\n\n return $;\n}\n","import { textLength, linkDensity } from 'utils/dom';\nimport { hasSentenceEnd } from 'utils/text';\n\nimport { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\n\n// Now that we have a top_candidate, look through the siblings of\n// it to see if any of them are decently scored. If they are, they\n// may be split parts of the content (Like two divs, a preamble and\n// a body.) Example:\n// http://articles.latimes.com/2009/oct/14/business/fi-bigtvs14\nexport default function mergeSiblings($candidate, topScore, $) {\n if (!$candidate.parent().length) {\n return $candidate;\n }\n\n const siblingScoreThreshold = Math.max(10, topScore * 0.25);\n const wrappingDiv = $('

');\n\n $candidate\n .parent()\n .children()\n .each((index, sibling) => {\n const $sibling = $(sibling);\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(sibling.tagName)) {\n return null;\n }\n\n const siblingScore = getScore($sibling);\n if (siblingScore) {\n if ($sibling.get(0) === $candidate.get(0)) {\n wrappingDiv.append($sibling);\n } else {\n let contentBonus = 0;\n const density = linkDensity($sibling);\n\n // If sibling has a very low link density,\n // give it a small bonus\n if (density < 0.05) {\n contentBonus += 20;\n }\n\n // If sibling has a high link density,\n // give it a penalty\n if (density >= 0.5) {\n contentBonus -= 20;\n }\n\n // If sibling node has the same class as\n // candidate, give it a bonus\n if ($sibling.attr('class') === $candidate.attr('class')) {\n contentBonus += topScore * 0.2;\n }\n\n const newScore = siblingScore + contentBonus;\n\n if (newScore >= siblingScoreThreshold) {\n return wrappingDiv.append($sibling);\n }\n if (sibling.tagName === 'p') {\n const siblingContent = $sibling.text();\n const siblingContentLength = textLength(siblingContent);\n\n if (siblingContentLength > 80 && density < 0.25) {\n return wrappingDiv.append($sibling);\n }\n if (\n siblingContentLength <= 80 &&\n density === 0 &&\n hasSentenceEnd(siblingContent)\n ) {\n return wrappingDiv.append($sibling);\n }\n }\n }\n }\n\n return null;\n });\n\n if (\n wrappingDiv.children().length === 1 &&\n wrappingDiv\n .children()\n .first()\n .get(0) === $candidate.get(0)\n ) {\n return $candidate;\n }\n\n return wrappingDiv;\n}\n","import { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\nimport mergeSiblings from './merge-siblings';\n\n// After we've calculated scores, loop through all of the possible\n// candidate nodes we found and find the one with the highest score.\nexport default function findTopCandidate($) {\n let $candidate;\n let topScore = 0;\n\n $('[score]').each((index, node) => {\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(node.tagName)) {\n return;\n }\n\n const $node = $(node);\n const score = getScore($node);\n\n if (score > topScore) {\n topScore = score;\n $candidate = $node;\n }\n });\n\n // If we don't have a candidate, return the body\n // or whatever the first element is\n if (!$candidate) {\n return $('body') || $('*').first();\n }\n\n $candidate = mergeSiblings($candidate, topScore, $);\n\n return $candidate;\n}\n","// Scoring\nexport { default as getWeight } from './get-weight';\nexport { default as getScore } from './get-score';\nexport { default as scoreCommas } from './score-commas';\nexport { default as scoreLength } from './score-length';\nexport { default as scoreParagraph } from './score-paragraph';\nexport { default as setScore } from './set-score';\nexport { default as addScore } from './add-score';\nexport { default as addToParent } from './add-to-parent';\nexport { default as getOrInitScore } from './get-or-init-score';\nexport { default as scoreNode } from './score-node';\nexport { default as scoreContent } from './score-content';\nexport { default as findTopCandidate } from './find-top-candidate';\n","import {\n getScore,\n setScore,\n getOrInitScore,\n scoreCommas,\n} from 'extractors/generic/content/scoring';\n\nimport { CLEAN_CONDITIONALLY_TAGS, KEEP_CLASS } from './constants';\nimport { normalizeSpaces } from '../text';\nimport { linkDensity } from './index';\n\nfunction removeUnlessContent($node, $, weight) {\n // Explicitly save entry-content-asset tags, which are\n // noted as valuable in the Publisher guidelines. For now\n // this works everywhere. We may want to consider making\n // this less of a sure-thing later.\n if ($node.hasClass('entry-content-asset')) {\n return;\n }\n\n const content = normalizeSpaces($node.text());\n\n if (scoreCommas(content) < 10) {\n const pCount = $('p', $node).length;\n const inputCount = $('input', $node).length;\n\n // Looks like a form, too many inputs.\n if (inputCount > pCount / 3) {\n $node.remove();\n return;\n }\n\n const contentLength = content.length;\n const imgCount = $('img', $node).length;\n\n // Content is too short, and there are no images, so\n // this is probably junk content.\n if (contentLength < 25 && imgCount === 0) {\n $node.remove();\n return;\n }\n\n const density = linkDensity($node);\n\n // Too high of link density, is probably a menu or\n // something similar.\n // console.log(weight, density, contentLength)\n if (weight < 25 && density > 0.2 && contentLength > 75) {\n $node.remove();\n return;\n }\n\n // Too high of a link density, despite the score being\n // high.\n if (weight >= 25 && density > 0.5) {\n // Don't remove the node if it's a list and the\n // previous sibling starts with a colon though. That\n // means it's probably content.\n const tagName = $node.get(0).tagName.toLowerCase();\n const nodeIsList = tagName === 'ol' || tagName === 'ul';\n if (nodeIsList) {\n const previousNode = $node.prev();\n if (\n previousNode &&\n normalizeSpaces(previousNode.text()).slice(-1) === ':'\n ) {\n return;\n }\n }\n\n $node.remove();\n return;\n }\n\n const scriptCount = $('script', $node).length;\n\n // Too many script tags, not enough content.\n if (scriptCount > 0 && contentLength < 150) {\n $node.remove();\n }\n }\n}\n\n// Given an article, clean it of some superfluous content specified by\n// tags. Things like forms, ads, etc.\n//\n// Tags is an array of tag name's to search through. (like div, form,\n// etc)\n//\n// Return this same doc.\nexport default function cleanTags($article, $) {\n $(CLEAN_CONDITIONALLY_TAGS, $article).each((index, node) => {\n const $node = $(node);\n // If marked to keep, skip it\n if ($node.hasClass(KEEP_CLASS) || $node.find(`.${KEEP_CLASS}`).length > 0)\n return;\n\n let weight = getScore($node);\n if (!weight) {\n weight = getOrInitScore($node, $);\n setScore($node, $, weight);\n }\n\n // drop node if its weight is < 0\n if (weight < 0) {\n $node.remove();\n } else {\n // deteremine if node seems like content\n removeUnlessContent($node, $, weight);\n }\n });\n\n return $;\n}\n","import { getWeight } from 'extractors/generic/content/scoring';\n\nimport { HEADER_TAG_LIST } from './constants';\nimport { normalizeSpaces } from '../text';\n\nexport default function cleanHeaders($article, $, title = '') {\n $(HEADER_TAG_LIST, $article).each((index, header) => {\n const $header = $(header);\n // Remove any headers that appear before all other p tags in the\n // document. This probably means that it was part of the title, a\n // subtitle or something else extraneous like a datestamp or byline,\n // all of which should be handled by other metadata handling.\n if ($($header, $article).prevAll('p').length === 0) {\n return $header.remove();\n }\n\n // Remove any headers that match the title exactly.\n if (normalizeSpaces($(header).text()) === title) {\n return $header.remove();\n }\n\n // If this header has a negative weight, it's probably junk.\n // Get rid of it.\n if (getWeight($(header)) < 0) {\n return $header.remove();\n }\n\n return $header;\n });\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// Rewrite the tag name to div if it's a top level node like body or\n// html to avoid later complications with multiple body tags.\nexport default function rewriteTopLevel(article, $) {\n // I'm not using context here because\n // it's problematic when converting the\n // top-level/root node - AP\n $ = convertNodeTo($('html'), $, 'div');\n $ = convertNodeTo($('body'), $, 'div');\n\n return $;\n}\n","import URL from 'url';\n\nimport { getAttrs, setAttr } from 'utils/dom';\n\nfunction absolutize($, rootUrl, attr) {\n const baseUrl = $('base').attr('href');\n\n $(`[${attr}]`).each((_, node) => {\n const attrs = getAttrs(node);\n const url = attrs[attr];\n if (!url) return;\n const absoluteUrl = URL.resolve(baseUrl || rootUrl, url);\n\n setAttr(node, attr, absoluteUrl);\n });\n}\n\nfunction absolutizeSet($, rootUrl, $content) {\n $('[srcset]', $content).each((_, node) => {\n const attrs = getAttrs(node);\n const urlSet = attrs.srcset;\n\n if (urlSet) {\n // a comma should be considered part of the candidate URL unless preceded by a descriptor\n // descriptors can only contain positive numbers followed immediately by either 'w' or 'x'\n // space characters inside the URL should be encoded (%20 or +)\n const candidates = urlSet.match(\n /(?:\\s*)(\\S+(?:\\s*[\\d.]+[wx])?)(?:\\s*,\\s*)?/g\n );\n if (!candidates) return;\n const absoluteCandidates = candidates.map(candidate => {\n // a candidate URL cannot start or end with a comma\n // descriptors are separated from the URLs by unescaped whitespace\n const parts = candidate\n .trim()\n .replace(/,$/, '')\n .split(/\\s+/);\n parts[0] = URL.resolve(rootUrl, parts[0]);\n return parts.join(' ');\n });\n const absoluteUrlSet = [...new Set(absoluteCandidates)].join(', ');\n setAttr(node, 'srcset', absoluteUrlSet);\n }\n });\n}\n\nexport default function makeLinksAbsolute($content, $, url) {\n ['href', 'src'].forEach(attr => absolutize($, url, attr));\n absolutizeSet($, url, $content);\n\n return $content;\n}\n","export function textLength(text) {\n return text.trim().replace(/\\s+/g, ' ').length;\n}\n\n// Determines what percentage of the text\n// in a node is link text\n// Takes a node, returns a float\nexport function linkDensity($node) {\n const totalTextLength = textLength($node.text());\n\n const linkText = $node.find('a').text();\n const linkLength = textLength(linkText);\n\n if (totalTextLength > 0) {\n return linkLength / totalTextLength;\n }\n if (totalTextLength === 0 && linkLength > 0) {\n return 1;\n }\n\n return 0;\n}\n","import { stripTags } from 'utils/dom';\n\n// Given a node type to search for, and a list of meta tag names to\n// search for, find a meta tag associated.\nexport default function extractFromMeta(\n $,\n metaNames,\n cachedNames,\n cleanTags = true\n) {\n const foundNames = metaNames.filter(name => cachedNames.indexOf(name) !== -1);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const name of foundNames) {\n const type = 'name';\n const value = 'value';\n\n const nodes = $(`meta[${type}=\"${name}\"]`);\n\n // Get the unique value of every matching node, in case there\n // are two meta tags with the same name and value.\n // Remove empty values.\n const values = nodes\n .map((index, node) => $(node).attr(value))\n .toArray()\n .filter(text => text !== '');\n\n // If we have more than one value for the same name, we have a\n // conflict and can't trust any of them. Skip this name. If we have\n // zero, that means our meta tags had no values. Skip this name\n // also.\n if (values.length === 1) {\n let metaValue;\n // Meta values that contain HTML should be stripped, as they\n // weren't subject to cleaning previously.\n if (cleanTags) {\n metaValue = stripTags(values[0], $);\n } else {\n [metaValue] = values;\n }\n\n return metaValue;\n }\n }\n\n // If nothing is found, return null\n return null;\n}\n","import { withinComment } from 'utils/dom';\n\nfunction isGoodNode($node, maxChildren) {\n // If it has a number of children, it's more likely a container\n // element. Skip it.\n if ($node.children().length > maxChildren) {\n return false;\n }\n // If it looks to be within a comment, skip it.\n if (withinComment($node)) {\n return false;\n }\n\n return true;\n}\n\n// Given a a list of selectors find content that may\n// be extractable from the document. This is for flat\n// meta-information, like author, title, date published, etc.\nexport default function extractFromSelectors(\n $,\n selectors,\n maxChildren = 1,\n textOnly = true\n) {\n // eslint-disable-next-line no-restricted-syntax\n for (const selector of selectors) {\n const nodes = $(selector);\n\n // If we didn't get exactly one of this selector, this may be\n // a list of articles or comments. Skip it.\n if (nodes.length === 1) {\n const $node = $(nodes[0]);\n\n if (isGoodNode($node, maxChildren)) {\n let content;\n if (textOnly) {\n content = $node.text();\n } else {\n content = $node.html();\n }\n\n if (content) {\n return content;\n }\n }\n }\n }\n\n return null;\n}\n","// strips all tags from a string of text\nexport default function stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n const cleanText = $(`${text}`).text();\n return cleanText === '' ? text : cleanText;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function withinComment($node) {\n const parents = $node.parents().toArray();\n const commentParent = parents.find(parent => {\n const attrs = getAttrs(parent);\n const { class: nodeClass, id } = attrs;\n const classAndId = `${nodeClass} ${id}`;\n return classAndId.includes('comment');\n });\n\n return commentParent !== undefined;\n}\n","// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nexport default function nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n","import { IS_WP_SELECTOR } from './constants';\n\nexport default function isWordpress($) {\n return $(IS_WP_SELECTOR).length > 0;\n}\n","export default function getAttrs(node) {\n const { attribs, attributes } = node;\n\n if (!attribs && attributes) {\n const attrs = Reflect.ownKeys(attributes).reduce((acc, index) => {\n const attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n","export default function setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n","export default function setAttrs(node, attrs) {\n if (node.attribs) {\n node.attribs = attrs;\n } else if (node.attributes) {\n while (node.attributes.length > 0) {\n node.removeAttribute(node.attributes[0].name);\n }\n\n Reflect.ownKeys(attrs).forEach(key => {\n node.setAttribute(key, attrs[key]);\n });\n }\n\n return node;\n}\n","// DOM manipulation\nexport {\n default as stripUnlikelyCandidates,\n} from './strip-unlikely-candidates';\nexport { default as brsToPs } from './brs-to-ps';\nexport { default as paragraphize } from './paragraphize';\nexport { default as convertToParagraphs } from './convert-to-paragraphs';\nexport { default as convertNodeTo } from './convert-node-to';\nexport { default as cleanImages } from './clean-images';\nexport { default as markToKeep } from './mark-to-keep';\nexport { default as stripJunkTags } from './strip-junk-tags';\nexport { default as cleanHOnes } from './clean-h-ones';\nexport { default as cleanAttributes } from './clean-attributes';\nexport { default as removeEmpty } from './remove-empty';\nexport { default as cleanTags } from './clean-tags';\nexport { default as cleanHeaders } from './clean-headers';\nexport { default as rewriteTopLevel } from './rewrite-top-level';\nexport { default as makeLinksAbsolute } from './make-links-absolute';\nexport { textLength, linkDensity } from './link-density';\nexport { default as extractFromMeta } from './extract-from-meta';\nexport { default as extractFromSelectors } from './extract-from-selectors';\nexport { default as stripTags } from './strip-tags';\nexport { default as withinComment } from './within-comment';\nexport { default as nodeIsSufficient } from './node-is-sufficient';\nexport { default as isWordpress } from './is-wordpress';\nexport { default as getAttrs } from './get-attrs';\nexport { default as setAttr } from './set-attr';\nexport { default as setAttrs } from './set-attrs';\n","export const IS_LINK = new RegExp('https?://', 'i');\nconst IMAGE_RE = '.(png|gif|jpe?g)';\nexport const IS_IMAGE = new RegExp(`${IMAGE_RE}`, 'i');\nexport const IS_SRCSET = new RegExp(\n `${IMAGE_RE}(\\\\?\\\\S+)?(\\\\s*[\\\\d.]+[wx])`,\n 'i'\n);\n\nexport const TAGS_TO_REMOVE = ['script', 'style', 'form'].join(',');\n","import { getAttrs } from 'utils/dom';\n\nimport { IS_LINK, IS_IMAGE, IS_SRCSET } from './constants';\n\n// Convert all instances of images with potentially\n// lazy loaded images into normal images.\n// Many sites will have img tags with no source, or an image tag with a src\n// attribute that a is a placeholer. We need to be able to properly fill in\n// the src attribute so the images are no longer lazy loaded.\nexport default function convertLazyLoadedImages($) {\n const extractSrcFromJSON = str => {\n try {\n const { src } = JSON.parse(str);\n if (typeof src === 'string') return src;\n } catch (_) {\n return false;\n }\n\n return false;\n };\n\n $('img').each((_, img) => {\n const attrs = getAttrs(img);\n\n Reflect.ownKeys(attrs).forEach(attr => {\n const value = attrs[attr];\n\n if (attr !== 'srcset' && IS_LINK.test(value) && IS_SRCSET.test(value)) {\n $(img).attr('srcset', value);\n } else if (\n attr !== 'src' &&\n attr !== 'srcset' &&\n IS_LINK.test(value) &&\n IS_IMAGE.test(value)\n ) {\n // Is the value a JSON object? If so, we should attempt to extract the image src from the data.\n const existingSrc = extractSrcFromJSON(value);\n if (existingSrc) {\n $(img).attr('src', existingSrc);\n } else {\n $(img).attr('src', value);\n }\n }\n });\n });\n\n return $;\n}\n","import { TAGS_TO_REMOVE } from './constants';\n\nfunction isComment(index, node) {\n return node.type === 'comment';\n}\n\nfunction cleanComments($) {\n $.root()\n .find('*')\n .contents()\n .filter(isComment)\n .remove();\n\n return $;\n}\n\nexport default function clean($) {\n $(TAGS_TO_REMOVE).remove();\n\n $ = cleanComments($);\n return $;\n}\n","import cheerio from 'cheerio';\nimport iconv from 'iconv-lite';\n\nimport { getEncoding } from 'utils/text';\nimport { fetchResource } from './utils';\nimport { normalizeMetaTags, convertLazyLoadedImages, clean } from './utils/dom';\n\nconst Resource = {\n // Create a Resource.\n //\n // :param url: The URL for the document we should retrieve.\n // :param response: If set, use as the response rather than\n // attempting to fetch it ourselves. Expects a\n // string.\n // :param headers: Custom headers to be included in the request\n async create(url, preparedResponse, parsedUrl, headers = {}) {\n let result;\n\n if (preparedResponse) {\n const validResponse = {\n statusMessage: 'OK',\n statusCode: 200,\n headers: {\n 'content-type': 'text/html',\n 'content-length': 500,\n },\n };\n\n result = {\n body: preparedResponse,\n response: validResponse,\n alreadyDecoded: true,\n };\n } else {\n result = await fetchResource(url, parsedUrl, headers);\n }\n\n if (result.error) {\n result.failed = true;\n return result;\n }\n\n return this.generateDoc(result);\n },\n\n generateDoc({ body: content, response, alreadyDecoded = false }) {\n const { 'content-type': contentType = '' } = response.headers;\n\n // TODO: Implement is_text function from\n // https://github.com/ReadabilityHoldings/readability/blob/8dc89613241d04741ebd42fa9fa7df1b1d746303/readability/utils/text.py#L57\n if (!contentType.includes('html') && !contentType.includes('text')) {\n throw new Error('Content does not appear to be text.');\n }\n\n let $ = this.encodeDoc({ content, contentType, alreadyDecoded });\n\n if ($.root().children().length === 0) {\n throw new Error('No children, likely a bad parse.');\n }\n\n $ = normalizeMetaTags($);\n $ = convertLazyLoadedImages($);\n $ = clean($);\n\n return $;\n },\n\n encodeDoc({ content, contentType, alreadyDecoded = false }) {\n if (alreadyDecoded) {\n return cheerio.load(content);\n }\n\n const encoding = getEncoding(contentType);\n let decodedContent = iconv.decode(content, encoding);\n let $ = cheerio.load(decodedContent);\n // after first cheerio.load, check to see if encoding matches\n const contentTypeSelector = cheerio.browser\n ? 'meta[http-equiv=content-type]'\n : 'meta[http-equiv=content-type i]';\n const metaContentType =\n $(contentTypeSelector).attr('content') ||\n $('meta[charset]').attr('charset');\n const properEncoding = getEncoding(metaContentType);\n\n // if encodings in the header/body dont match, use the one in the body\n if (metaContentType && properEncoding !== encoding) {\n decodedContent = iconv.decode(content, properEncoding);\n $ = cheerio.load(decodedContent);\n }\n\n return $;\n },\n};\n\nexport default Resource;\n","export default function* range(start = 1, end = 1) {\n while (start <= end) {\n yield (start += 1);\n }\n}\n","// extremely simple url validation as a first step\nexport default function validateUrl({ hostname }) {\n // If this isn't a valid url, return an error message\n return !!hostname;\n}\n","const merge = (extractor, domains) =>\n domains.reduce((acc, domain) => {\n acc[domain] = extractor;\n return acc;\n }, {});\n\nexport default function mergeSupportedDomains(extractor) {\n return extractor.supportedDomains\n ? merge(extractor, [extractor.domain, ...extractor.supportedDomains])\n : merge(extractor, [extractor.domain]);\n}\n","import mergeSupportedDomains from '../utils/merge-supported-domains';\n\nexport const apiExtractors = {};\n\nexport default function addExtractor(extractor) {\n if (!extractor || !extractor.domain) {\n return {\n error: true,\n message: 'Unable to add custom extractor. Invalid parameters.',\n };\n }\n\n Object.assign(apiExtractors, mergeSupportedDomains(extractor));\n\n return apiExtractors;\n}\n","export const BloggerExtractor = {\n domain: 'blogspot.com',\n content: {\n // Blogger is insane and does not load its content\n // initially in the page, but it's all there\n // in noscript\n selectors: ['.post-content noscript'],\n\n // Selectors to remove from the extracted content\n clean: [],\n\n // Convert the noscript tag to a div\n transforms: {\n noscript: 'div',\n },\n },\n\n author: {\n selectors: ['.post-author-name'],\n },\n\n title: {\n selectors: ['.post h2.title'],\n },\n\n date_published: {\n selectors: ['span.publishdate'],\n },\n};\n","export const NYMagExtractor = {\n domain: 'nymag.com',\n content: {\n // Order by most likely. Extractor will stop on first occurrence\n selectors: ['div.article-content', 'section.body', 'article.article'],\n\n // Selectors to remove from the extracted content\n clean: ['.ad', '.single-related-story'],\n\n // Object of tranformations to make on matched elements\n // Each key is the selector, each value is the tag to\n // transform to.\n // If a function is given, it should return a string\n // to convert to or nothing (in which case it will not perform\n // the transformation.\n transforms: {\n // Convert h1s to h2s\n h1: 'h2',\n\n // Convert lazy-loaded noscript images to figures\n noscript: ($node, $) => {\n const $children = $.browser ? $($node.text()) : $node.children();\n if (\n $children.length === 1 &&\n $children.get(0) !== undefined &&\n $children.get(0).tagName.toLowerCase() === 'img'\n ) {\n return 'figure';\n }\n\n return null;\n },\n },\n },\n\n title: {\n selectors: ['h1.lede-feature-title', 'h1.headline-primary', 'h1'],\n },\n\n author: {\n selectors: ['.by-authors', '.lede-feature-author'],\n },\n\n dek: {\n selectors: ['.lede-feature-teaser'],\n },\n\n date_published: {\n selectors: [\n ['time.article-timestamp[datetime]', 'datetime'],\n 'time.article-timestamp',\n ],\n },\n};\n","export const WikipediaExtractor = {\n domain: 'wikipedia.org',\n content: {\n selectors: ['#mw-content-text'],\n\n defaultCleaner: false,\n\n // transform top infobox to an image with caption\n transforms: {\n '.infobox img': $node => {\n const $parent = $node.parents('.infobox');\n // Only prepend the first image in .infobox\n if ($parent.children('img').length === 0) {\n $parent.prepend($node);\n }\n },\n '.infobox caption': 'figcaption',\n '.infobox': 'figure',\n },\n\n // Selectors to remove from the extracted content\n clean: [\n '.mw-editsection',\n 'figure tr, figure td, figure tbody',\n '#toc',\n '.navbox',\n ],\n },\n\n author: 'Wikipedia Contributors',\n\n title: {\n selectors: ['h2.title'],\n },\n\n date_published: {\n selectors: ['#footer-info-lastmod'],\n },\n};\n","export const TwitterExtractor = {\n domain: 'twitter.com',\n\n content: {\n transforms: {\n // We're transforming essentially the whole page here.\n // Twitter doesn't have nice selectors, so our initial\n // selector grabs the whole page, then we're re-writing\n // it to fit our needs before we clean it up.\n '.permalink[role=main]': ($node, $) => {\n const tweets = $node.find('.tweet');\n const $tweetContainer = $('
');\n $tweetContainer.append(tweets);\n $node.replaceWith($tweetContainer);\n },\n\n // Twitter wraps @ with s, which\n // renders as a strikethrough\n s: 'span',\n },\n\n selectors: ['.permalink[role=main]'],\n\n defaultCleaner: false,\n\n clean: ['.stream-item-footer', 'button', '.tweet-details-fixer'],\n },\n\n author: {\n selectors: ['.tweet.permalink-tweet .username'],\n },\n\n date_published: {\n selectors: [['.permalink-tweet ._timestamp[data-time-ms]', 'data-time-ms']],\n },\n};\n","export const NYTimesExtractor = {\n domain: 'www.nytimes.com',\n\n title: {\n selectors: [\n 'h1[data-testid=\"headline\"]',\n 'h1.g-headline',\n 'h1[itemprop=\"headline\"]',\n 'h1.headline',\n 'h1 .balancedHeadline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.g-byline',\n '.byline',\n ['meta[name=\"byl\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['div.g-blocks', 'section[name=\"articleBody\"]', 'article#story'],\n\n transforms: {\n 'img.g-lazy': $node => {\n let src = $node.attr('src');\n const width = 640;\n\n src = src.replace('{{size}}', width);\n $node.attr('src', src);\n },\n },\n\n clean: [\n '.ad',\n 'header#story-header',\n '.story-body-1 .lede.video',\n '.visually-hidden',\n '#newsletter-promo',\n '.promo',\n '.comments-button',\n '.hidden',\n '.comments',\n '.supplemental',\n '.nocontent',\n '.story-footer-links',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[name=\"article:published\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: null,\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\nexport const TheAtlanticExtractor = {\n domain: 'www.theatlantic.com',\n title: {\n selectors: ['h1', '.c-article-header__hed'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], '.c-byline__author'],\n },\n\n content: {\n selectors: ['article', '.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.partner-box',\n '.callout',\n '.c-article-writer__image',\n '.c-article-writer__content',\n '.c-letters-cta__text',\n '.c-footer__logo',\n '.c-recirculation-link',\n '.twitter-tweet',\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n date_published: {\n selectors: [['time[itemprop=\"datePublished\"]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const NewYorkerExtractor = {\n domain: 'www.newyorker.com',\n title: {\n selectors: [\n 'h1[class^=\"content-header\"]',\n 'h1[class^=\"ArticleHeader__hed\"]',\n 'h1[class*=\"ContentHeaderHed\"]',\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'article header div[class^=\"BylinesWrapper\"]',\n ['meta[name=\"article:author\"]', 'value'],\n 'div[class^=\"ArticleContributors\"] a[rel=\"author\"]',\n 'article header div[class*=\"Byline__multipleContributors\"]',\n ],\n },\n\n content: {\n selectors: [\n '.article__body',\n 'article.article.main-content',\n 'main[class^=\"Layout__content\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption__text': 'figcaption',\n '.caption__credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['footer[class^=\"ArticleFooter__footer\"]', 'aside'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'time.content-header__publish-date',\n ['meta[name=\"pubdate\"]', 'value'],\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n 'div[class^=\"ContentHeaderDek\"]',\n 'div.content-header__dek',\n 'h2[class^=\"ArticleHeader__dek\"]',\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WiredExtractor = {\n domain: 'www.wired.com',\n title: {\n selectors: [\n 'h1[data-testId=\"ContentHeaderHed\"]',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n 'a[rel=\"author\"]',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'article.article.main-content',\n 'article.content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.visually-hidden', 'figcaption img.photo', '.alert-message'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const MSNExtractor = {\n domain: 'www.msn.com',\n title: {\n selectors: [\n 'h1',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.authorname-txt',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'div.richtext',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['span.caption'],\n },\n\n date_published: {\n selectors: ['span.time'],\n },\n\n lead_image_url: {\n selectors: [],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const YahooExtractor = {\n domain: 'www.yahoo.com',\n title: {\n selectors: [\n 'header.canvas-header',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.provider-name',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.content-canvas',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.figure-caption'],\n },\n\n date_published: {\n selectors: [['time.date[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter dek selectors\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BuzzfeedExtractor = {\n domain: 'www.buzzfeed.com',\n\n supportedDomains: ['www.buzzfeednews.com'],\n\n title: {\n selectors: [\n 'h1.embed-headline-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'a[data-action=\"user/username\"]',\n 'byline__author',\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n ['div[class^=\"featureimage_featureImageWrapper\"]', '.js-subbuzz-wrapper'],\n ['.js-subbuzz-wrapper'],\n ],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: 'b',\n\n 'div.longform_custom_header_media': $node => {\n if ($node.has('img') && $node.has('.longform_header_image_source')) {\n return 'figure';\n }\n\n return null;\n },\n\n 'figure.longform_custom_header_media .longform_header_image_source':\n 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.instapaper_ignore',\n '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline',\n '.share-box',\n '.print',\n '.js-inline-share-bar',\n '.js-ad-placement',\n ],\n },\n\n date_published: {\n selectors: [['time[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: ['.embed-headline-description'],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WikiaExtractor = {\n domain: 'fandom.wikia.com',\n title: {\n selectors: [\n 'h1.entry-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n '.author vcard',\n '.fn',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n '.grid-content',\n '.entry-content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const LittleThingsExtractor = {\n domain: 'www.littlethings.com',\n title: {\n selectors: [\n 'h1[class*=\"PostHeader\"]',\n 'h1.post-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'div[class^=\"PostHeader__ScAuthorNameSection\"]',\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n 'section[class*=\"PostMainArticle\"]',\n '.mainContentIntro',\n '.content-wrapper',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","export const PoliticoExtractor = {\n domain: 'www.politico.com',\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n ['div[itemprop=\"author\"] meta[itemprop=\"name\"]', 'value'],\n '.story-meta__authors .vcard',\n '.story-main-content .byline .vcard',\n ],\n },\n\n content: {\n selectors: [['.story-text'], '.story-main-content', '.story-core'],\n\n transforms: [],\n\n clean: ['figcaption', '.story-meta', '.ad'],\n },\n\n date_published: {\n selectors: [\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ['.story-meta__details time[datetime]', 'datetime'],\n ['.story-main-content .timestamp time[datetime]', 'datetime'],\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n};\n","export const DeadspinExtractor = {\n domain: 'deadspin.com',\n\n supportedDomains: [\n 'jezebel.com',\n 'lifehacker.com',\n 'kotaku.com',\n 'gizmodo.com',\n 'jalopnik.com',\n 'kinja.com',\n 'avclub.com',\n 'clickhole.com',\n 'splinternews.com',\n 'theonion.com',\n 'theroot.com',\n 'thetakeout.com',\n 'theinventory.com',\n ],\n\n title: {\n selectors: ['header h1', 'h1.headline'],\n },\n\n author: {\n selectors: ['a[data-ga*=\"Author\"]', '.author'],\n },\n\n content: {\n selectors: ['.js_post-content', '.post-content', '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'iframe.lazyload[data-recommend-id^=\"youtube://\"]': $node => {\n const youtubeId = $node.attr('id').split('youtube-')[1];\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.magnifier', '.lightbox'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time.updated[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BroadwayWorldExtractor = {\n domain: 'www.broadwayworld.com',\n title: {\n selectors: ['h1[itemprop=headline]', 'h1.article-title'],\n },\n\n author: {\n selectors: ['span[itemprop=author]'],\n },\n\n content: {\n selectors: ['div[itemprop=articlebody]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['meta[itemprop=datePublished]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const ApartmentTherapyExtractor = {\n domain: 'www.apartmenttherapy.com',\n title: {\n selectors: ['h1.headline'],\n },\n\n author: {\n selectors: ['.PostByline__name'],\n },\n\n content: {\n selectors: ['div.post__content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[data-render-react-id=\"images/LazyPicture\"]': ($node, $) => {\n const data = JSON.parse($node.attr('data-props'));\n const { src } = data.sources[0];\n const $img = $('').attr('src', src);\n $node.replaceWith($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['.PostByline__timestamp[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const MediumExtractor = {\n domain: 'medium.com',\n\n title: {\n selectors: ['h1', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n content: {\n selectors: ['article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // Allow drop cap character.\n 'section span:first-of-type': $node => {\n const $text = $node.html();\n if ($text.length === 1 && /^[a-zA-Z()]+$/.test($text)) {\n $node.replaceWith($text);\n }\n },\n // Re-write lazy-loaded youtube videos\n iframe: $node => {\n const ytRe = /https:\\/\\/i.embed.ly\\/.+url=https:\\/\\/i\\.ytimg\\.com\\/vi\\/(\\w+)\\//;\n const thumb = decodeURIComponent($node.attr('data-thumbnail'));\n const $parent = $node.parents('figure');\n\n if (ytRe.test(thumb)) {\n const [_, youtubeId] = thumb.match(ytRe); // eslint-disable-line\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n const $caption = $parent.find('figcaption');\n $parent.empty().append([$node, $caption]);\n return;\n }\n\n // If we can't draw the YouTube preview, remove the figure.\n $parent.remove();\n },\n\n // rewrite figures to pull out image and caption, remove rest\n figure: $node => {\n // ignore if figure has an iframe\n if ($node.find('iframe').length > 0) return;\n\n const $img = $node.find('img').slice(-1)[0];\n const $caption = $node.find('figcaption');\n\n $node.empty().append([$img, $caption]);\n },\n\n // Remove any smaller images that did not get caught by the generic image\n // cleaner (author photo 48px, leading sentence images 79px, etc.).\n img: $node => {\n const width = parseInt($node.attr('width'), 10);\n if (width < 100) $node.remove();\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['span a', 'svg'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: null,\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const WwwTmzComExtractor = {\n domain: 'www.tmz.com',\n\n title: {\n selectors: ['.post-title-breadcrumb', 'h1', '.headline'],\n },\n\n author: 'TMZ STAFF',\n\n date_published: {\n selectors: ['.article__published-at', '.article-posted-date'],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article__blocks', '.article-content', '.all-post-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.lightbox-link'],\n },\n};\n","export const WwwWashingtonpostComExtractor = {\n domain: 'www.washingtonpost.com',\n\n title: {\n selectors: ['h1', '#topper-headline-wrapper'],\n },\n\n author: {\n selectors: ['.pb-author-name'],\n },\n\n date_published: {\n selectors: [['.author-timestamp[itemprop=\"datePublished\"]', 'content']],\n },\n\n dek: {\n selectors: [],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.inline-content': $node => {\n if ($node.has('img,iframe,video').length > 0) {\n return 'figure';\n }\n\n $node.remove();\n return null;\n },\n '.pb-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.interstitial-link', '.newsletter-inline-unit'],\n },\n};\n","export const WwwHuffingtonpostComExtractor = {\n domain: 'www.huffingtonpost.com',\n\n title: {\n selectors: ['h1.headline__title'],\n },\n\n author: {\n selectors: ['span.author-card__details__name'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:modified_time\"]', 'value'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: ['h2.headline__subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry__body'],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote',\n '.tag-cloud',\n '.embed-asset',\n '.below-entry',\n '.entry-corrections',\n '#suggested-story',\n ],\n },\n};\n","export const NewrepublicComExtractor = {\n domain: 'newrepublic.com',\n\n title: {\n selectors: ['h1.article-headline'],\n },\n\n author: {\n selectors: ['span.AuthorList'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['h2.article-subhead'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['div.article-body']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['aside'],\n },\n};\n","export const MoneyCnnComExtractor = {\n domain: 'money.cnn.com',\n\n title: {\n selectors: ['.article-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], '.byline a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: ['#storytext h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#storytext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.inStoryHeading'],\n },\n};\n","export const WwwThevergeComExtractor = {\n domain: 'www.theverge.com',\n\n supportedDomains: ['www.polygon.com'],\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n // feature template multi-match\n ['.c-entry-hero .e-image', '.c-entry-intro', '.c-entry-content'],\n // regular post multi-match\n ['.e-image--hero', '.c-entry-content'],\n // feature template fallback\n '.l-wrapper .l-feature',\n // regular post fallback\n 'div.c-entry-content',\n ],\n\n // Transform lazy-loaded images\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'span';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.aside',\n 'img.c-dynamic-image', // images come from noscript transform\n ],\n },\n};\n","export const WwwCnnComExtractor = {\n domain: 'www.cnn.com',\n\n title: {\n selectors: ['h1.pg-headline', 'h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n // a more specific selector to grab the lead image and the body\n ['.media__video--thumbnail', '.zn-body-text'],\n // a fallback for the above\n '.zn-body-text',\n 'div[itemprop=\"articleBody\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.zn-body__paragraph, .el__leafmedia--sourced-paragraph': $node => {\n const $text = $node.html();\n if ($text) {\n return 'p';\n }\n\n return null;\n },\n\n // this transform cleans the short, all-link sections linking\n // to related content but not marked as such in any way.\n '.zn-body__paragraph': $node => {\n if ($node.has('a')) {\n if (\n $node.text().trim() ===\n $node\n .find('a')\n .text()\n .trim()\n ) {\n $node.remove();\n }\n }\n },\n\n '.media__video--thumbnail': 'figure',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwAolComExtractor = {\n domain: 'www.aol.com',\n\n title: {\n selectors: ['h1.p-article__title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['.p-article__byline__date'],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwYoutubeComExtractor = {\n domain: 'www.youtube.com',\n\n title: {\n selectors: [\n ['meta[name=\"title\"]', 'value'],\n '.watch-title',\n 'h1.watch-title-container',\n ],\n },\n\n author: {\n selectors: [['link[itemprop=\"name\"]', 'content'], '.yt-user-info'],\n },\n\n date_published: {\n selectors: [['meta[itemProp=\"datePublished\"]', 'value']],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: [\n '#player-container-outer',\n 'ytd-expandable-video-description-body-renderer #description',\n ['#player-api', '#description'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#player-api': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n $node.html(`\n `);\n },\n '#player-container-outer': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n const description = $('meta[itemProp=\"description\"]').attr('value');\n $node.html(`\n \n
${description}
`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwTheguardianComExtractor = {\n domain: 'www.theguardian.com',\n\n title: {\n selectors: ['h1', '.content__headline'],\n },\n\n author: {\n selectors: ['address[data-link-name=\"byline\"]', 'p.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['div[data-gu-name=\"standfirst\"]', '.content__standfirst'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#maincontent', '.content__article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.hide-on-mobile', '.inline-icon'],\n },\n};\n","export const WwwSbnationComExtractor = {\n domain: 'www.sbnation.com',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['p.c-entry-summary.p-dek', 'h2.c-entry-summary.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.c-entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwBloombergComExtractor = {\n domain: 'www.bloomberg.com',\n\n title: {\n selectors: [\n // normal articles\n '.lede-headline',\n\n // /graphics/ template\n 'h1.article-title',\n\n // /news/ template\n 'h1[class^=\"headline\"]',\n 'h1.lede-text-only__hed',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"parsely-author\"]', 'value'],\n '.byline-details__link',\n\n // /graphics/ template\n '.bydek',\n\n // /news/ template\n '.author',\n 'p[class*=\"author\"]',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.published-at', 'datetime'],\n ['time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"og:image\"]', 'content'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body__content',\n '.body-content',\n\n // /graphics/ template\n ['section.copy-block'],\n\n // /news/ template\n '.body-copy',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.inline-newsletter', '.page-ad'],\n },\n};\n","export const WwwBustleComExtractor = {\n domain: 'www.bustle.com',\n\n title: {\n selectors: ['h1', 'h1.post-page__title'],\n },\n\n author: {\n selectors: ['a[href*=\"profile\"]', 'div.content-meta__author'],\n },\n\n date_published: {\n selectors: [['time', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.post-page__body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwNprOrgExtractor = {\n domain: 'www.npr.org',\n\n title: {\n selectors: ['h1', '.storytitle'],\n },\n\n author: {\n selectors: ['p.byline__name.byline__name--block'],\n },\n\n date_published: {\n selectors: [\n ['.dateblock time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"twitter:image:src\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['.storytext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.bucketwrap.image': 'figure',\n '.bucketwrap.image .credit-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['div.enlarge_measure'],\n },\n};\n","export const WwwRecodeNetExtractor = {\n domain: 'www.recode.net',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.c-entry-summary.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const QzComExtractor = {\n domain: 'qz.com',\n\n title: {\n selectors: ['article header h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[property=\"og:image\"]', 'content'],\n ['meta[name=\"twitter:image\"]', 'content'],\n ],\n },\n\n content: {\n selectors: ['#article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwDmagazineComExtractor = {\n domain: 'www.dmagazine.com',\n\n title: {\n selectors: ['h1.story__title'],\n },\n\n author: {\n selectors: ['.story__info .story__info__item:first-child'],\n },\n\n date_published: {\n selectors: [\n // enter selectors\n '.story__info',\n ],\n\n timezone: 'America/Chicago',\n format: 'MMMM D, YYYY h:mm a',\n },\n\n dek: {\n selectors: ['.story__subhead'],\n },\n\n lead_image_url: {\n selectors: [['article figure a:first-child', 'href']],\n },\n\n content: {\n selectors: ['.story__content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwReutersComExtractor = {\n domain: 'www.reuters.com',\n\n title: {\n selectors: ['h1[class*=\"ArticleHeader-headline-\"]', 'h1.article-headline'],\n },\n\n author: {\n selectors: [['meta[name=\"og:article:author\"]', 'value'], '.author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"og:article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.ArticleBodyWrapper', '#article-text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.article-subtitle': 'h4',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'div[class^=\"ArticleBody-byline-container-\"]',\n '#article-byline .author',\n ],\n },\n};\n","export const MashableComExtractor = {\n domain: 'mashable.com',\n\n title: {\n selectors: ['header h1', 'h1.title'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value'], 'span.author_name a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#article', 'section.article-content.blueprint'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.image-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwChicagotribuneComExtractor = {\n domain: 'www.chicagotribune.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['div.article_byline span:first-of-type'],\n },\n\n date_published: {\n selectors: ['time'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwVoxComExtractor = {\n domain: 'www.vox.com',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure .e-image__image noscript': $node => {\n const imgHtml = $node.html();\n $node\n .parents('.e-image__image')\n .find('.c-dynamic-image')\n .replaceWith(imgHtml);\n },\n\n 'figure .e-image__meta': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const NewsNationalgeographicComExtractor = {\n domain: 'news.nationalgeographic.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: ['.byline-component__contributors b span'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n format: 'ddd MMM DD HH:mm:ss zz YYYY',\n timezone: 'EST',\n },\n\n dek: {\n selectors: ['.article__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['.parsys.content', '.__image-lead__'], '.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imgSrc = $node\n .find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(``));\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote.pull-quote--large'],\n },\n};\n","export const WwwNationalgeographicComExtractor = {\n domain: 'www.nationalgeographic.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: ['.byline-component__contributors b span'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.Article__Headline__Desc', '.article__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'section.Article__Content',\n ['.parsys.content', '.__image-lead__'],\n '.content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imageParent = $node.children().first();\n if ($imageParent.hasClass('imageGroup')) {\n const $dataAttrContainer = $imageParent\n .find('.media--medium__container')\n .children()\n .first();\n const imgPath1 = $dataAttrContainer.data('platform-image1-path');\n const imgPath2 = $dataAttrContainer.data('platform-image2-path');\n if (imgPath2 && imgPath1) {\n $node.prepend(\n $(`
\n \n \n
`)\n );\n }\n } else {\n const $imgSrc = $node\n .find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(``));\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote.pull-quote--small'],\n },\n};\n","export const WwwLatimesComExtractor = {\n domain: 'www.latimes.com',\n\n title: {\n selectors: ['h1.headline', '.trb_ar_hl'],\n },\n\n author: {\n selectors: [\n 'a[data-click=\"standardBylineAuthorName\"]',\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.page-article-body', '.trb_ar_main'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.trb_ar_la': $node => {\n const $figure = $node.find('figure');\n $node.replaceWith($figure);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.trb_ar_by', '.trb_ar_cr'],\n },\n};\n","export const PagesixComExtractor = {\n domain: 'pagesix.com',\n\n supportedDomains: ['nypost.com'],\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['#featured-image-wrapper', '.entry-content'],\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#featured-image-wrapper': 'figure',\n '.wp-caption-text': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.modal-trigger'],\n },\n};\n","export const ThefederalistpapersOrgExtractor = {\n domain: 'thefederalistpapers.org',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['.author-meta-title', 'main span.entry-author-name'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'header',\n '.article-sharing',\n '.after-article',\n '.type-commenting',\n '.more-posts',\n ['p[style]'],\n ],\n },\n};\n","export const WwwCbssportsComExtractor = {\n domain: 'www.cbssports.com',\n\n title: {\n selectors: ['.Article-headline', '.article-headline'],\n },\n\n author: {\n selectors: ['.ArticleAuthor-nameText', '.author-name'],\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']],\n timezone: 'UTC',\n },\n\n dek: {\n selectors: ['.Article-subline', '.article-subline'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMsnbcComExtractor = {\n domain: 'www.msnbc.com',\n\n title: {\n selectors: ['h1', 'h1.is-title-pane'],\n },\n\n author: {\n selectors: ['.byline-name', '.author'],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body__content', '.pane-node-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.pane-node-body': ($node, $) => {\n const [\n selector,\n attr,\n ] = WwwMsnbcComExtractor.lead_image_url.selectors[0];\n const src = $(selector).attr(attr);\n if (src) {\n $node.prepend(``);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwThepoliticalinsiderComExtractor = {\n domain: 'www.thepoliticalinsider.com',\n\n title: {\n selectors: [['meta[name=\"sailthru.title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"sailthru.author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']],\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'], // enter selectors\n ],\n },\n\n content: {\n selectors: ['div#article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMentalflossComExtractor = {\n domain: 'www.mentalfloss.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n 'h1.title',\n '.title-group',\n '.inner',\n ],\n },\n\n author: {\n selectors: [\n 'a[data-vars-label*=\"authors\"]',\n '.field-name-field-enhanced-authors',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n '.date-display-single',\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article main', 'div.field.field-name-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['small'],\n },\n};\n","export const AbcnewsGoComExtractor = {\n domain: 'abcnews.go.com',\n\n title: {\n selectors: ['div[class*=\"Article_main__body\"] h1', '.article-header h1'],\n },\n\n author: {\n selectors: ['.ShareByline span:nth-child(2)', '.authors'],\n clean: ['.author-overlay', '.by-text'],\n },\n\n date_published: {\n selectors: ['.ShareByline', '.timestamp'],\n format: 'MMMM D, YYYY h:mm a',\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.article-copy'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwNydailynewsComExtractor = {\n domain: 'www.nydailynews.com',\n\n title: {\n selectors: ['h1.headline', 'h1#ra-headline'],\n },\n\n author: {\n selectors: [\n '.article_byline span',\n ['meta[name=\"parsely-author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: ['time', ['meta[name=\"sailthru.date\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', 'article#ra-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['dl#ra-tags', '.ra-related', 'a.ra-editor', 'dl#ra-share-bottom'],\n },\n};\n","export const WwwCnbcComExtractor = {\n domain: 'www.cnbc.com',\n\n title: {\n selectors: ['h1.title', 'h1.ArticleHeader-headline'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div#article_body.content',\n 'div.story',\n 'div.ArticleBody-articleBody',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwPopsugarComExtractor = {\n domain: 'www.popsugar.com',\n\n title: {\n selectors: ['h2.post-title', 'title-text'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.share-copy-title', '.post-tags', '.reactions'],\n },\n};\n","export const ObserverComExtractor = {\n domain: 'observer.com',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['.author', '.vcard'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const PeopleComExtractor = {\n domain: 'people.com',\n\n title: {\n selectors: ['.article-header h1', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"sailthru.author\"]', 'value'], 'a.author.url.fn'],\n },\n\n date_published: {\n selectors: [\n '.mntl-attribution__item-date',\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: ['.article-header h2'],\n },\n\n content: {\n selectors: ['div[class^=\"loc article-content\"]', 'div.article-body__inner'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwUsmagazineComExtractor = {\n domain: 'www.usmagazine.com',\n\n title: {\n selectors: ['header h1'],\n },\n\n author: {\n selectors: ['a.author', 'a.article-byline.tracked-offpage'],\n },\n\n date_published: {\n timezone: 'America/New_York',\n\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.module-related'],\n },\n};\n","export const WwwRollingstoneComExtractor = {\n domain: 'www.rollingstone.com',\n\n title: {\n selectors: ['h1.l-article-header__row--title', 'h1.content-title'],\n },\n\n author: {\n selectors: ['a.c-byline__link', 'a.content-author.tracked-offpage'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'time.content-published-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['h2.l-article-header__row--lead', '.content-description'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.l-article-content',\n ['.lead-container', '.article-content'],\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.c-related-links-wrapper', '.module-related'],\n },\n};\n","export const twofortysevensportsComExtractor = {\n domain: '247sports.com',\n\n title: {\n selectors: ['title', 'article header h1'],\n },\n\n author: {\n selectors: ['.article-cnt__author', '.author'],\n },\n\n date_published: {\n selectors: [['time[data-published]', 'data-published']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body', 'section.body.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const UproxxComExtractor = {\n domain: 'uproxx.com',\n\n title: {\n selectors: ['div.entry-header h1'],\n },\n\n author: {\n selectors: [['meta[name=\"qc:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image': 'figure',\n 'div.image .wp-media-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwEonlineComExtractor = {\n domain: 'www.eonline.com',\n\n title: {\n selectors: ['h1.article-detail__title', 'h1.article__title'],\n },\n\n author: {\n selectors: ['.article-detail__meta__author', '.entry-meta__author a'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.article-detail__main-content section'],\n ['.post-content section, .post-content div.post-content__image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.post-content__image': 'figure',\n 'div.post-content__image .image__credits': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMiamiheraldComExtractor = {\n domain: 'www.miamiherald.com',\n\n title: {\n selectors: ['h1.title'],\n },\n\n date_published: {\n selectors: ['p.published-date'],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.dateline-storybody'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwRefinery29ComExtractor = {\n domain: 'www.refinery29.com',\n\n title: {\n selectors: ['h1.title'],\n },\n\n author: {\n selectors: ['.contributor'],\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.full-width-opener', '.article-content'],\n '.article-content',\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.loading noscript': $node => {\n const imgHtml = $node.html();\n $node.parents('.loading').replaceWith(imgHtml);\n },\n\n '.section-image': 'figure',\n\n '.section-image .content-caption': 'figcaption',\n\n '.section-text': 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.story-share'],\n },\n};\n","export const WwwMacrumorsComExtractor = {\n domain: 'www.macrumors.com',\n\n title: {\n selectors: ['h1', 'h1.title'],\n },\n\n author: {\n selectors: ['article a[rel=\"author\"]', '.author-url'],\n },\n\n date_published: {\n selectors: [['time', 'datetime']],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwAndroidcentralComExtractor = {\n domain: 'www.androidcentral.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: [['meta[name=\"parsely-author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.intro', 'blockquote'],\n },\n};\n","export const WwwSiComExtractor = {\n domain: 'www.si.com',\n\n title: {\n selectors: ['h1', 'h1.headline'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"published\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['.m-detail-header--dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.m-detail--body',\n ['p', '.marquee_large_2x', '.component.image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n ['.inline-thumb', '.primary-message', '.description', '.instructions'],\n ],\n },\n};\n","export const WwwRawstoryComExtractor = {\n domain: 'www.rawstory.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], '.blog-title'],\n },\n\n author: {\n selectors: [\n 'div.main-post-head .social-author__name',\n '.blog-author a:first-of-type',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n '.blog-author a:last-of-type',\n ],\n\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.post-body', '.blog-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwCnetComExtractor = {\n domain: 'www.cnet.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['span.author', 'a.author'],\n },\n\n date_published: {\n selectors: ['time'],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: ['.c-head_dek', '.article-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['img.__image-lead__', '.article-main-body'],\n '.article-main-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure.image': $node => {\n const $img = $node.find('img');\n $img.attr('width', '100%');\n $img.attr('height', '100%');\n $img.addClass('__image-lead__');\n $node.remove('.imgContainer').prepend($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwTodayComExtractor = {\n domain: 'www.today.com',\n\n title: {\n selectors: ['h1.article-hero-headline__htag', 'h1.entry-headline'],\n },\n\n author: {\n selectors: ['span.byline-name', ['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['time[datetime]', ['meta[name=\"DC.date.issued\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body__content', '.entry-container'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.label-comment'],\n },\n};\n","export const WwwAlComExtractor = {\n domain: 'www.al.com',\n\n title: {\n selectors: [['meta[name=\"title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"article_author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article_date_original\"]', 'value']],\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwThepennyhoarderComExtractor = {\n domain: 'www.thepennyhoarder.com',\n\n title: {\n selectors: [['meta[name=\"dcterms.title\"]', 'value']],\n },\n\n author: {\n selectors: [['link[rel=\"author\"]', 'title']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.post-img', '.post-text'],\n '.post-text',\n '.single-post-content-inner',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwWesternjournalismComExtractor = {\n domain: 'www.westernjournalism.com',\n\n title: {\n selectors: ['title', 'h1.entry-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"DC.date.issued\"]', 'value']],\n },\n\n dek: {\n selectors: ['.subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-sharing.top + div'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.ad-notice-small'],\n },\n};\n","export const WwwAmericanowComExtractor = {\n domain: 'www.americanow.com',\n\n title: {\n selectors: ['.title', ['meta[name=\"title\"]', 'value']],\n },\n\n author: {\n selectors: ['.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"publish_date\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['.article-content', '.image', '.body'], '.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.article-video-wrapper', '.show-for-small-only'],\n },\n};\n","export const ScienceflyComExtractor = {\n domain: 'sciencefly.com',\n\n title: {\n selectors: ['.entry-title', '.cb-entry-title', '.cb-single-title'],\n },\n\n author: {\n selectors: ['div.cb-author', 'div.cb-author-title'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['div.theiaPostSlider_slides img', 'src']],\n },\n\n content: {\n selectors: ['div.theiaPostSlider_slides'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const HellogigglesComExtractor = {\n domain: 'hellogiggles.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], '.title'],\n },\n\n author: {\n selectors: ['.byline-wrapper span.author_name', '.author-link'],\n },\n\n date_published: {\n selectors: [\n ['meta[property=\"article:published_time\"]', 'content'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.main-content', '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ThoughtcatalogComExtractor = {\n domain: 'thoughtcatalog.com',\n\n title: {\n selectors: ['h1.title', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n 'cite a',\n 'div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name',\n 'h1.writer-name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry.post'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.tc_mark', 'figcaption'],\n },\n};\n","export const WwwInquisitrComExtractor = {\n domain: 'www.inquisitr.com',\n\n title: {\n selectors: ['h1.entry-title.story--header--title'],\n },\n\n author: {\n selectors: ['div.story--header--author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"datePublished\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article.story', '.entry-content.'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.post-category',\n '.story--header--socials',\n '.story--header--content',\n ],\n },\n};\n","export const WwwNbcnewsComExtractor = {\n domain: 'www.nbcnews.com',\n\n title: {\n selectors: ['div.article-hero-headline h1', 'div.article-hed h1'],\n },\n\n author: {\n selectors: [\n 'div.article-inline-byline span.byline-name',\n 'span.byline_author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published\"]', 'value'],\n ['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'],\n '.flag_article-wrapper time',\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body__content', 'div.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const FortuneComExtractor = {\n domain: 'fortune.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['.MblGHNMJ'],\n\n timezone: 'UTC',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['picture', 'article.row'], 'article.row'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwLinkedinComExtractor = {\n domain: 'www.linkedin.com',\n\n title: {\n selectors: ['.article-title', 'h1'],\n },\n\n author: {\n selectors: [\n '.main-author-card h3',\n ['meta[name=\"article:author\"]', 'value'],\n '.entity-name a[rel=author]',\n ],\n },\n\n date_published: {\n selectors: [\n '.base-main-card__metadata',\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.article-content__body',\n ['header figure', '.prose'],\n '.prose',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.entity-image'],\n },\n};\n","export const ObamawhitehouseArchivesGovExtractor = {\n domain: 'obamawhitehouse.archives.gov',\n\n supportedDomains: ['whitehouse.gov'],\n\n title: {\n selectors: ['h1', '.pane-node-title'],\n },\n\n author: {\n selectors: ['.blog-author-link', '.node-person-name-link'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.field-name-field-forall-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: ['div#content-start', '.pane-node-field-forall-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pane-node-title', '.pane-custom.pane-1'],\n },\n};\n","export const WwwOpposingviewsComExtractor = {\n domain: 'www.opposingviews.com',\n\n title: {\n selectors: ['h1.m-detail-header--title', 'h1.title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], 'div.date span span a'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"published\"]', 'value'],\n ['meta[name=\"publish_date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.m-detail--body', '.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.show-for-small-only'],\n },\n};\n","export const WwwProspectmagazineCoUkExtractor = {\n domain: 'www.prospectmagazine.co.uk',\n\n title: {\n selectors: ['.blog-header__title', '.page-title'],\n },\n\n author: {\n selectors: ['.blog-header__author-link', '.aside_author .title'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value'], '.post-info'],\n\n timezone: 'Europe/London',\n },\n\n dek: {\n selectors: ['.blog-header__description', '.page-subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.blog__container', 'article .post_content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ForwardComExtractor = {\n domain: 'forward.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n '.post-author a',\n '.author-name',\n ['meta[name=\"sailthru.author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.content-container article',\n ['.post-item-media-wrap', '.post-item p'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.post-author', '.donate-box', '.message', '.subtitle'],\n },\n};\n","export const WwwQdailyComExtractor = {\n domain: 'www.qdaily.com',\n\n title: {\n selectors: ['h2', 'h2.title'],\n },\n\n author: {\n selectors: ['.name'],\n },\n\n date_published: {\n selectors: [['.date.smart-date', 'data-origindate']],\n },\n\n dek: {\n selectors: ['.excerpt'],\n },\n\n lead_image_url: {\n selectors: [['.article-detail-hd img', 'src']],\n },\n\n content: {\n selectors: ['.detail'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.lazyload', '.lazylad', '.lazylood'],\n },\n};\n","export const GothamistComExtractor = {\n domain: 'gothamist.com',\n\n supportedDomains: [\n 'chicagoist.com',\n 'laist.com',\n 'sfist.com',\n 'shanghaiist.com',\n 'dcist.com',\n ],\n\n title: {\n selectors: ['h1', '.entry-header h1'],\n },\n\n author: {\n // There are multiple article-metadata and byline-author classes, but the main article's is the 3rd child of the l-container class\n selectors: ['.article-metadata:nth-child(3) .byline-author', '.author'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'abbr',\n 'abbr.published',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [null],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body', '.entry-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image-none': 'figure',\n '.image-none i': 'figcaption',\n 'div.image-left': 'figure',\n '.image-left i': 'figcaption',\n 'div.image-right': 'figure',\n '.image-right i': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.image-none br',\n '.image-left br',\n '.image-right br',\n '.galleryEase',\n ],\n },\n};\n","export const WwwFoolComExtractor = {\n domain: 'www.fool.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.author-inline .author-name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value'], 'header h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.tailwind-article-body', '.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption img': $node => {\n const src = $node.attr('src');\n $node.parent().replaceWith(`
`);\n },\n '.caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['#pitch'],\n },\n};\n","export const WwwSlateComExtractor = {\n domain: 'www.slate.com',\n\n title: {\n selectors: ['.hed', 'h1'],\n },\n\n author: {\n selectors: ['a[rel=author]'],\n },\n\n date_published: {\n selectors: ['.pub-date'],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['.dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.about-the-author',\n '.pullquote',\n '.newsletter-signup-component',\n '.top-comment',\n ],\n },\n};\n","export const IciRadioCanadaCaExtractor = {\n domain: 'ici.radio-canada.ca',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"dc.creator\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"dc.date.created\"]', 'value']],\n format: 'YYYY-MM-DD|HH[h]mm',\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['div.lead-container', '.bunker-component.lead'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'section.document-content-style',\n ['.main-multimedia-item', '.news-story-content'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwFortinetComExtractor = {\n domain: 'www.fortinet.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.b15-blog-meta__author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div.responsivegrid.aem-GridColumn.aem-GridColumn--default--12',\n ],\n\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n return null;\n },\n },\n },\n};\n","export const WwwFastcompanyComExtractor = {\n domain: 'www.fastcompany.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.post__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.post__article'],\n },\n};\n","export const BlisterreviewComExtractor = {\n domain: 'blisterreview.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h1.entry-title'],\n },\n\n author: {\n selectors: ['span.author-name'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time.entry-date', 'datetime'],\n ['meta[itemprop=\"datePublished\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[property=\"og:image\"]', 'content'],\n ['meta[itemprop=\"image\"]', 'content'],\n ['meta[name=\"twitter:image\"]', 'content'],\n ['img.attachment-large', 'src'],\n ],\n },\n\n content: {\n selectors: [\n [\n '.elementor-section-wrap',\n '.elementor-text-editor > p, .elementor-text-editor > ul > li, .attachment-large, .wp-caption-text',\n ],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n figcaption: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.comments-area'],\n },\n};\n","export const NewsMynaviJpExtractor = {\n domain: 'news.mynavi.jp',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n 'a.articleHeader_name',\n 'main div.article-author a.article-author__name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body', 'main article div'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n img: $node => {\n const src = $node.attr('data-original');\n if (src !== '') {\n $node.attr('src', src);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ClinicaltrialsGovExtractor = {\n domain: 'clinicaltrials.gov',\n\n title: {\n selectors: ['h1.tr-solo_record'],\n },\n\n author: {\n selectors: ['div#sponsor.tr-info-text'],\n },\n\n date_published: {\n // selectors: ['span.term[data-term=\"Last Update Posted\"]'],\n selectors: ['div:has(> span.term[data-term=\"Last Update Posted\"])'],\n },\n\n content: {\n selectors: ['div#tab-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.usa-alert> img'],\n },\n};\n","export const GithubComExtractor = {\n domain: 'github.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n // enter author selectors\n ],\n },\n\n date_published: {\n selectors: [\n ['relative-time[datetime]', 'datetime'],\n ['span[itemprop=\"dateModified\"] relative-time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n 'span[itemprop=\"about\"]',\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['#readme article']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwRedditComExtractor = {\n domain: 'www.reddit.com',\n\n title: {\n selectors: [\n 'div[data-test-id=\"post-content\"] h1',\n 'div[data-test-id=\"post-content\"] h2',\n ],\n },\n\n author: {\n selectors: ['div[data-test-id=\"post-content\"] a[href*=\"user/\"]'],\n },\n\n date_published: {\n selectors: [\n 'div[data-test-id=\"post-content\"] span[data-click-id=\"timestamp\"]',\n 'div[data-test-id=\"post-content\"] a[data-click-id=\"timestamp\"]',\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['div[data-test-id=\"post-content\"] p'], // text post\n [\n 'div[data-test-id=\"post-content\"] a[target=\"_blank\"]:not([data-click-id=\"timestamp\"])', // external link\n 'div[data-test-id=\"post-content\"] div[data-click-id=\"media\"]', // embedded media\n ], // external link with media preview (YouTube, imgur album, etc...)\n ['div[data-test-id=\"post-content\"] div[data-click-id=\"media\"]'], // Embedded media (Reddit video)\n ['div[data-test-id=\"post-content\"] a'], // external link\n 'div[data-test-id=\"post-content\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[role=\"img\"]': $node => {\n // External link image preview\n const $img = $node.find('img');\n const bgImg = $node.css('background-image');\n if ($img.length === 1 && bgImg) {\n $img.attr('src', bgImg.match(/\\((.*?)\\)/)[1].replace(/('|\")/g, ''));\n return $img;\n }\n return $node;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.icon',\n 'span[id^=\"PostAwardBadges\"]',\n 'div a[data-test-id=\"comments-page-link-num-comments\"]',\n ],\n },\n};\n","export const OtrsComExtractor = {\n domain: 'otrs.com',\n\n title: {\n selectors: ['#main article h1'],\n },\n\n author: {\n selectors: ['div.dateplusauthor a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main article'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [\n 'div.dateplusauthor',\n 'div.gr-12.push-6.footershare',\n '#atftbx',\n 'div.category-modul',\n ],\n },\n};\n","export const WwwOssnewsJpExtractor = {\n domain: 'www.ossnews.jp',\n\n title: {\n selectors: ['#alpha-block h1.hxnewstitle'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.fs12'],\n format: 'YYYY年MM月DD日 HH:mm',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#alpha-block .section:has(h1.hxnewstitle)'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const BuzzapJpExtractor = {\n domain: 'buzzap.jp',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['time.entry-date', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.ctiframe'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwAsahiComExtractor = {\n domain: 'www.asahi.com',\n\n title: {\n selectors: ['main h1', '.ArticleTitle h1'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"pubdate\"]', 'value']],\n },\n\n dek: null,\n\n excerpt: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['main'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['div.AdMod', 'div.LoginSelectArea', 'time', 'div.notPrint'],\n },\n};\n","export const WwwSanwaCoJpExtractor = {\n domain: 'www.sanwa.co.jp',\n\n title: {\n selectors: ['#newsContent h1'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['dl.date'],\n format: 'YYYY.MM.DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#newsContent'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#smartphone', 'div.sns_box', 'div.contentFoot'],\n },\n};\n","export const WwwElecomCoJpExtractor = {\n domain: 'www.elecom.co.jp',\n\n title: {\n selectors: ['title'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.section-last'],\n format: 'YYYY.MM.DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['td.TableMain2'],\n\n defaultCleaner: false,\n\n transforms: {\n table: $node => {\n $node.attr('width', 'auto');\n },\n },\n\n clean: [],\n },\n};\n","export const ScanNetsecurityNeJpExtractor = {\n domain: 'scan.netsecurity.ne.jp',\n\n title: {\n selectors: ['header.arti-header h1.head'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['meta[name=\"article:modified_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['header.arti-header p.arti-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.arti-content.arti-content--thumbnail'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['aside.arti-giga'],\n },\n};\n","export const JvndbJvnJpExtractor = {\n domain: 'jvndb.jvn.jp',\n\n title: {\n selectors: ['title'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['div.modifytxt:nth-child(2)'],\n format: 'YYYY/MM/DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['#news-list'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const GeniusComExtractor = {\n domain: 'genius.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['h2 a'],\n },\n\n date_published: {\n selectors: [\n [\n 'meta[itemprop=page_data]',\n 'value',\n res => {\n const json = JSON.parse(res);\n return json.song.release_date;\n },\n ],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n [\n 'meta[itemprop=page_data]',\n 'value',\n res => {\n const json = JSON.parse(res);\n return json.song.album.cover_art_url;\n },\n ],\n ],\n },\n\n content: {\n selectors: ['.lyrics'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwJnsaOrgExtractor = {\n domain: 'www.jnsa.org',\n\n title: {\n selectors: ['#wgtitle h2'],\n },\n\n author: null,\n\n date_published: null,\n\n dek: null,\n\n excerpt: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main_area'],\n\n transforms: {},\n\n clean: ['#pankuzu', '#side'],\n },\n};\n","export const PhpspotOrgExtractor = {\n domain: 'phpspot.org',\n\n title: {\n selectors: ['h3.hl'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['h4.hl'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['div.entrybody'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwInfoqComExtractor = {\n domain: 'www.infoq.com',\n\n title: {\n selectors: ['h1.heading'],\n },\n\n author: {\n selectors: ['div.widget.article__authors'],\n },\n\n date_published: {\n selectors: ['.article__readTime.date'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article__data'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwMoongiftJpExtractor = {\n domain: 'www.moongift.jp',\n\n title: {\n selectors: ['h1.title a'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['ul.meta li:not(.social):first-of-type'],\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main'],\n\n transforms: {},\n\n clean: ['ul.mg_service.cf'],\n },\n};\n","export const WwwItmediaCoJpExtractor = {\n domain: 'www.itmedia.co.jp',\n\n supportedDomains: [\n 'www.atmarkit.co.jp',\n 'techtarget.itmedia.co.jp',\n 'nlab.itmedia.co.jp',\n ],\n\n title: {\n selectors: ['#cmsTitle h1'],\n },\n\n author: {\n selectors: ['#byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:modified_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['#cmsAbstract h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#cmsBody'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#snsSharebox'],\n },\n};\n","export const WwwPublickey1JpExtractor = {\n domain: 'www.publickey1.jp',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.bloggerinchief p:first-of-type', '#subcol p:has(img)'],\n },\n\n date_published: {\n selectors: ['div.pubdate'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#maincol'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#breadcrumbs', 'div.sbm', 'div.ad_footer'],\n },\n};\n","export const TakagihiromitsuJpExtractor = {\n domain: 'takagi-hiromitsu.jp',\n\n title: {\n selectors: ['h3'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[http-equiv=\"Last-Modified\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['div.body'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const BookwalkerJpExtractor = {\n domain: 'bookwalker.jp',\n\n title: {\n selectors: ['h1.p-main__title', 'h1.main-heading'],\n },\n\n author: {\n selectors: ['div.p-author__list', 'div.authors'],\n },\n\n date_published: {\n selectors: [\n 'dl.p-information__data dd:nth-of-type(7)',\n '.work-info .work-detail:first-of-type .work-detail-contents:last-of-type',\n ],\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div.p-main__information',\n ['div.main-info', 'div.main-cover-inner'],\n ],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [\n 'span.label.label--trial',\n 'dt.info-head.info-head--coin',\n 'dd.info-contents.info-contents--coin',\n 'div.info-notice.fn-toggleClass',\n ],\n },\n};\n","export const WwwYomiuriCoJpExtractor = {\n domain: 'www.yomiuri.co.jp',\n\n title: {\n selectors: ['h1.title-article.c-article-title'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.p-main-contents'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const JapanCnetComExtractor = {\n domain: 'japan.cnet.com',\n\n title: {\n selectors: ['.leaf-headline-ttl'],\n },\n\n author: {\n selectors: ['.writer'],\n },\n\n date_published: {\n selectors: ['.date'],\n format: 'YYYY年MM月DD日 HH時mm分',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article_body'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const DeadlineComExtractor = {\n domain: 'deadline.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['section.author h2'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.a-article-grid__main.pmc-a-grid article.pmc-a-grid-item'],\n\n transforms: {\n '.embed-twitter': $node => {\n const innerHtml = $node.html();\n $node.replaceWith(innerHtml);\n },\n },\n\n clean: ['figcaption'],\n },\n};\n","export const WwwGizmodoJpExtractor = {\n domain: 'www.gizmodo.jp',\n\n title: {\n selectors: ['h1.p-post-title'],\n },\n\n author: {\n selectors: ['li.p-post-AssistAuthor'],\n },\n\n date_published: {\n selectors: [['li.p-post-AssistTime time', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article.p-post'],\n\n transforms: {\n 'img.p-post-thumbnailImage': $node => {\n const src = $node.attr('src');\n $node.attr('src', src.replace(/^.*=%27/, '').replace(/%27;$/, ''));\n },\n },\n\n clean: ['h1.p-post-title', 'ul.p-post-Assist'],\n },\n};\n","export const GetnewsJpExtractor = {\n domain: 'getnews.jp',\n\n title: {\n selectors: ['article h1'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value'], 'span.prof'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['ul.cattag-top time', 'datetime'],\n ],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.post-bodycopy'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwLifehackerJpExtractor = {\n domain: 'www.lifehacker.jp',\n\n title: {\n selectors: ['h1[class^=\"article_pArticle_Title\"]', 'h1.lh-summary-title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n 'p.lh-entryDetailInner--credit',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['div.lh-entryDetail-header time', 'datetime'],\n ],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div[class^=\"article_pArticle_Body__\"]',\n 'div.lh-entryDetail-body',\n ],\n\n transforms: {\n 'img.lazyload': $node => {\n const src = $node.attr('src');\n $node.attr('src', src.replace(/^.*=%27/, '').replace(/%27;$/, ''));\n },\n },\n\n clean: ['p.lh-entryDetailInner--credit'],\n },\n};\n","export const SectIijAdJpExtractor = {\n domain: 'sect.iij.ad.jp',\n\n title: {\n selectors: ['div.title-box-inner h1', 'h3'],\n },\n\n author: {\n selectors: ['p.post-author a', 'dl.entrydate dd'],\n },\n\n date_published: {\n selectors: ['time'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-inner', '#article'],\n\n transforms: {},\n\n clean: ['dl.entrydate'],\n },\n};\n","export const WwwOreillyCoJpExtractor = {\n domain: 'www.oreilly.co.jp',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h3'],\n },\n\n author: {\n selectors: ['span[itemprop=\"author\"]', 'li[itemprop=\"author\"]'],\n },\n\n date_published: {\n selectors: [\n ['dd[itemprop=\"datePublished\"]', 'content'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image:secure_url\"]', 'value'],\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['section.detail', '#content'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['.social-tools'],\n },\n};\n","export const WwwIpaGoJpExtractor = {\n domain: 'www.ipa.go.jp',\n\n title: {\n selectors: ['h1'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.ipar_text_right'],\n format: 'YYYY年M月D日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['#ipar_main'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['p.ipar_text_right'],\n },\n};\n","export const WeeklyAsciiJpExtractor = {\n domain: 'weekly.ascii.jp',\n\n title: {\n selectors: ['article h1', 'h1[itemprop=\"headline\"]'],\n },\n\n author: {\n selectors: ['p.author'],\n },\n\n date_published: {\n selectors: ['p.date', ['meta[name=\"odate\"]', 'value']],\n\n format: 'YYYY年MM月DD日 HH:mm',\n\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div#contents_detail', 'div.article'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const TechlogIijAdJpExtractor = {\n domain: 'techlog.iij.ad.jp',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['a[rel=\"author\"]'],\n },\n\n date_published: {\n selectors: [['time.entry-date', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry-content'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['.wp_social_bookmarking_light'],\n },\n};\n","import URL from 'url';\n\nexport const WiredJpExtractor = {\n domain: 'wired.jp',\n\n title: {\n selectors: ['h1[data-testid=\"ContentHeaderHed\"]', 'h1.post-title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n 'p[itemprop=\"author\"]',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: ['div[class^=\"ContentHeaderDek\"]', '.post-intro'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div[data-attribute-verso-pattern=\"article-body\"]',\n 'article.article-detail',\n ],\n\n transforms: {\n 'img[data-original]': $node => {\n const dataOriginal = $node.attr('data-original');\n const src = $node.attr('src');\n const url = URL.resolve(src, dataOriginal);\n $node.attr('src', url);\n },\n },\n\n clean: ['.post-category', 'time', 'h1.post-title', '.social-area-syncer'],\n },\n};\n","export const JapanZdnetComExtractor = {\n domain: 'japan.zdnet.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"cXenseParse:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article_body'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwRbbtodayComExtractor = {\n domain: 'www.rbbtoday.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.writer.writer-name'],\n },\n\n date_published: {\n selectors: [['header time', 'datetime']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value'], '.arti-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.arti-content'],\n\n transforms: {},\n\n clean: ['.arti-giga'],\n },\n};\n","export const WwwLemondeFrExtractor = {\n domain: 'www.lemonde.fr',\n\n title: {\n selectors: ['h1.article__title'],\n },\n\n author: {\n selectors: ['.author__name'],\n },\n\n date_published: {\n selectors: [['meta[name=\"og:article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.article__desc'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article__content'],\n\n transforms: {},\n\n clean: ['figcaption'],\n },\n};\n","export const WwwPhoronixComExtractor = {\n domain: 'www.phoronix.com',\n\n title: {\n selectors: ['article h1', 'article header'],\n },\n\n author: {\n selectors: ['.author a:first-child'],\n },\n\n date_published: {\n selectors: ['.author'],\n // 1 June 2019 at 08:34 PM EDT\n format: 'D MMMM YYYY at hh:mm',\n timezone: 'America/New_York',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const PitchforkComExtractor = {\n domain: 'pitchfork.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n '.authors-detail__display-name',\n ],\n },\n\n date_published: {\n selectors: ['div[class^=\"InfoSliceWrapper-\"]', ['.pub-date', 'datetime']],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"og:description\"]', 'value'],\n '.review-detail__abstract',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['.single-album-tombstone__art img', 'src'],\n ],\n },\n\n content: {\n selectors: ['div.body__inner-container', '.review-detail__text'],\n },\n\n extend: {\n score: {\n selectors: ['p[class*=\"Rating\"]', '.score'],\n },\n },\n};\n","export const BiorxivOrgExtractor = {\n domain: 'biorxiv.org',\n\n title: {\n selectors: ['h1#page-title'],\n },\n\n author: {\n selectors: [\n 'div.highwire-citation-biorxiv-article-top > div.highwire-cite-authors',\n ],\n },\n\n content: {\n selectors: ['div#abstract-1'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const EpaperZeitDeExtractor = {\n domain: 'epaper.zeit.de',\n\n title: {\n selectors: ['p.title'],\n },\n\n author: {\n selectors: ['.article__author'],\n },\n\n date_published: null,\n\n excerpt: {\n selectors: ['subtitle'],\n },\n\n lead_image_url: null,\n\n content: {\n selectors: ['.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'p.title': 'h1',\n '.article__author': 'p',\n byline: 'p',\n linkbox: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['image-credits', 'box[type=citation]'],\n },\n};\n","export const WwwLadbibleComExtractor = {\n domain: 'www.ladbible.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['[class*=Byline]'],\n },\n\n date_published: {\n selectors: ['time'],\n timezone: 'Europe/London',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['[class*=ArticleContainer]'],\n clean: [\n 'time',\n 'source',\n 'a[href^=\"https://www.ladbible.com/\"]',\n 'picture',\n '[class*=StyledCardBlock]',\n ],\n },\n};\n","export const TimesofindiaIndiatimesComExtractor = {\n domain: 'timesofindia.indiatimes.com',\n\n title: {\n selectors: ['h1'],\n },\n\n extend: {\n reporter: {\n selectors: ['div.byline'],\n transforms: {},\n },\n },\n\n date_published: {\n selectors: ['.byline'],\n format: 'MMM D, YYYY, HH:mm z',\n timezone: 'Asia/Kolkata',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.contentwrapper:has(section)'],\n defaultCleaner: false,\n\n clean: [\n 'section',\n 'h1',\n '.byline',\n '.img_cptn',\n '.icon_share_wrap',\n 'ul[itemtype=\"https://schema.org/BreadcrumbList\"]',\n ],\n },\n};\n","export const MaTtiasBeExtractor = {\n domain: 'ma.ttias.be',\n\n title: {\n selectors: [['meta[name=\"twitter:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n content: {\n selectors: [['.content']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: $node => {\n // The \"id\" attribute values would result in low scores and the element being\n // removed.\n $node.attr('id', null);\n\n // h1 elements will be demoted to h2, so demote h2 elements to h3.\n return 'h3';\n },\n h1: $node => {\n // The \"id\" attribute values would result in low scores and the element being\n // removed.\n $node.attr('id', null);\n\n // A subsequent h2 will be removed if there is not a paragraph before it, so\n // add a paragraph here. It will be removed anyway because it is empty.\n $node.after('

');\n },\n ul: $node => {\n // Articles contain lists of links which look like, but are not, navigation\n // elements. Adding this class attribute avoids them being incorrectly removed.\n $node.attr('class', 'entry-content-asset');\n },\n },\n },\n};\n","export const PastebinComExtractor = {\n domain: 'pastebin.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.username', '.paste_box_line2 .t_us + a'],\n },\n\n date_published: {\n selectors: ['.date', '.paste_box_line2 .t_da + span'],\n timezone: 'America/New_York',\n format: 'MMMM D, YYYY',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.source', '#selectable .text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n ol: 'div',\n li: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","/* eslint-disable no-nested-ternary */\n/* eslint-disable no-unused-expressions */\nexport const WwwAbendblattDeExtractor = {\n domain: 'www.abendblatt.de',\n\n title: {\n selectors: ['h2.article__header__headline'],\n },\n\n author: {\n selectors: ['span.author-info__name-text'],\n },\n\n date_published: {\n selectors: [\n ['time.teaser-stream-time', 'datetime'],\n ['time.article__header__date', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article__body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n p: $node => {\n if (!$node.hasClass('obfuscated')) return null;\n let o = '';\n let n = 0;\n for (let i = $node.text(); n < i.length; n += 1) {\n const r = i.charCodeAt(n);\n r === 177\n ? (o += '%')\n : r === 178\n ? (o += '!')\n : r === 180\n ? (o += ';')\n : r === 181\n ? (o += '=')\n : r === 32\n ? (o += ' ')\n : r === 10\n ? (o += '\\n')\n : r > 33 && (o += String.fromCharCode(r - 1));\n }\n\n $node.html(o);\n $node.removeClass('obfuscated');\n $node.addClass('deobfuscated');\n return null;\n },\n div: $node => {\n if (!$node.hasClass('obfuscated')) return null;\n let o = '';\n let n = 0;\n for (let i = $node.text(); n < i.length; n += 1) {\n const r = i.charCodeAt(n);\n r === 177\n ? (o += '%')\n : r === 178\n ? (o += '!')\n : r === 180\n ? (o += ';')\n : r === 181\n ? (o += '=')\n : r === 32\n ? (o += ' ')\n : r === 10\n ? (o += '\\n')\n : r > 33 && (o += String.fromCharCode(r - 1));\n }\n\n $node.html(o);\n $node.removeClass('obfuscated');\n $node.addClass('deobfuscated');\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwGrueneDeExtractor = {\n domain: 'www.gruene.de',\n\n title: {\n selectors: ['header h1'],\n },\n\n author: null,\n\n date_published: null,\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[property=\"og:image\"]', 'content']],\n },\n\n content: {\n // selectors: ['section'],\n selectors: [['section header', 'section h2', 'section p', 'section ol']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['figcaption', 'p[class]'],\n },\n};\n","export const WwwEngadgetComExtractor = {\n domain: 'www.engadget.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['a.th-meta[data-ylk*=\"subsec:author\"]'],\n },\n\n // Engadget stories have publish dates, but the only representation of them on the page\n // is in a format like \"2h ago\". There are also these tags with blank values:\n // \n date_published: {\n selectors: [\n // enter selectors\n ],\n },\n\n dek: {\n selectors: ['div[class*=\"o-title_mark\"] div'],\n },\n\n // Engadget stories do have lead images specified by an og:image meta tag, but selecting\n // the value attribute of that tag fails. I believe the \"ℑ\" sequence of characters\n // is triggering this inability to select the attribute value.\n lead_image_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n content: {\n selectors: [\n [\n // Some figures will be inside div.article-text, but some header figures/images\n // will not.\n '#page_body figure:not(div.article-text figure)',\n 'div.article-text',\n ],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ArstechnicaComExtractor = {\n domain: 'arstechnica.com',\n\n // Articles from this site are often paginated, but I was unable to write a CSS\n // selector to find the next page. On the last page, there will be a link with a CSS\n // selector indicating that the previous page is next. But the parser appears to find\n // the next page without this extractor finding it, as long as the fallback option is\n // left at its default value of true.\n\n title: {\n selectors: ['title'],\n },\n\n author: {\n selectors: ['*[rel=\"author\"] *[itemprop=\"name\"]'],\n },\n\n date_published: {\n selectors: [['.byline time', 'datetime']],\n },\n\n dek: {\n selectors: ['h2[itemprop=\"description\"]'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div[itemprop=\"articleBody\"]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: $node => {\n // Some pages have an element h2 that is significant, and that the parser will\n // remove if not following a paragraph. Adding this empty paragraph fixes it, and\n // the empty paragraph will be removed anyway.\n $node.before('

');\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result.\n clean: [\n // Remove enlarge links and separators inside image captions.\n 'figcaption .enlarge-link',\n 'figcaption .sep',\n\n // I could not transform the video into usable elements, so I\n // removed them.\n 'figure.video',\n\n // Image galleries that do not work.\n '.gallery',\n\n 'aside',\n '.sidebar',\n ],\n },\n};\n","export const WwwNdtvComExtractor = {\n domain: 'www.ndtv.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h1.entry-title'],\n },\n\n author: {\n selectors: ['span[itemprop=\"author\"] span[itemprop=\"name\"]'],\n },\n\n date_published: {\n selectors: [['span[itemprop=\"dateModified\"]', 'content']],\n },\n\n dek: {\n selectors: ['h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div[itemprop=\"articleBody\"]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // This site puts a dateline in a 'b' above the first paragraph, and then somehow\n // blends it into the first paragraph with CSS. This transform moves the dateline\n // to the first paragraph.\n '.place_cont': $node => {\n if (!$node.parents('p').length) {\n const nextSibling = $node.next('p');\n if (nextSibling) {\n $node.remove();\n nextSibling.prepend($node);\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.highlghts_Wdgt',\n '.ins_instory_dv_caption',\n 'input',\n '._world-wrapper .mt20',\n ],\n },\n};\n","export const SpektrumExtractor = {\n domain: 'www.spektrum.de',\n\n title: {\n selectors: ['.content__title'],\n },\n\n author: {\n selectors: ['.content__author__info__name'],\n },\n\n date_published: {\n selectors: ['.content__meta__date'],\n timezone: 'Europe/Berlin',\n },\n\n dek: {\n selectors: ['.content__intro'],\n },\n\n lead_image_url: {\n selectors: [\n // This is how the meta tag appears in the original source code.\n ['meta[name=\"og:image\"]', 'value'],\n // This is how the meta tag appears in the DOM in Chrome.\n // The selector is included here to make the code work within the browser as well.\n ['meta[property=\"og:image\"]', 'content'],\n // This is the image that is shown on the page.\n // It can be slightly cropped compared to the original in the meta tag.\n '.image__article__top img',\n ],\n },\n\n content: {\n selectors: ['article.content'],\n clean: [\n '.breadcrumbs',\n '.hide-for-print',\n 'aside',\n 'header h2',\n '.image__article__top',\n '.content__author',\n '.copyright',\n '.callout-box',\n ],\n },\n};\n","export const PostlightComExtractor = {\n domain: 'postlight.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"parsely-author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.single-hero__abstract'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['main.post'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'section.pl-post-link',\n 'aside',\n 'section.insights_featured_case_studies',\n ],\n },\n};\n","export const WwwInvestmentexecutiveComExtractor = {\n domain: 'www.investmentexecutive.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['div[itemprop=\"author\"]'],\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['section.article-body'],\n\n clean: ['.hidden'],\n },\n};\n","export const WwwCbcCaExtractor = {\n domain: 'www.cbc.ca',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.authorText', '.bylineDetails'],\n },\n\n date_published: {\n selectors: [['.timeStamp[datetime]', 'datetime']],\n },\n\n dek: {\n selectors: ['.deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.story'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","import mergeSupportedDomains from 'utils/merge-supported-domains';\nimport * as CustomExtractors from './custom/index';\n\nexport default Object.keys(CustomExtractors).reduce((acc, key) => {\n const extractor = CustomExtractors[key];\n return {\n ...acc,\n ...mergeSupportedDomains(extractor),\n };\n}, {});\n","// CLEAN AUTHOR CONSTANTS\nexport const CLEAN_AUTHOR_RE = /^\\s*(posted |written )?by\\s*:?\\s*(.*)/i;\n\n// CLEAN DEK CONSTANTS\nexport const TEXT_LINK_RE = new RegExp('http(s)?://', 'i');\n// An ordered list of meta tag names that denote likely article deks.\n// From most distinct to least distinct.\n//\n// NOTE: There are currently no meta tags that seem to provide the right\n// content consistenty enough. Two options were:\n// - og:description\n// - dc.description\n// However, these tags often have SEO-specific junk in them that's not\n// header-worthy like a dek is. Excerpt material at best.\nexport const DEK_META_TAGS = [];\n\n// An ordered list of Selectors to find likely article deks. From\n// most explicit to least explicit.\n//\n// Should be more restrictive than not, as a failed dek can be pretty\n// detrimental to the aesthetics of an article.\nexport const DEK_SELECTORS = ['.entry-summary'];\n\n// CLEAN DATE PUBLISHED CONSTANTS\nexport const MS_DATE_STRING = /^\\d{13}$/i;\nexport const SEC_DATE_STRING = /^\\d{10}$/i;\nexport const CLEAN_DATE_STRING_RE = /^\\s*published\\s*:?\\s*(.*)/i;\nexport const TIME_MERIDIAN_SPACE_RE = /(.*\\d)(am|pm)(.*)/i;\nexport const TIME_MERIDIAN_DOTS_RE = /\\.m\\./i;\nexport const TIME_NOW_STRING = /^\\s*(just|right)?\\s*now\\s*/i;\nconst timeUnits = [\n 'seconds?',\n 'minutes?',\n 'hours?',\n 'days?',\n 'weeks?',\n 'months?',\n 'years?',\n];\nconst allTimeUnits = timeUnits.join('|');\nexport const TIME_AGO_STRING = new RegExp(\n `(\\\\d+)\\\\s+(${allTimeUnits})\\\\s+ago`,\n 'i'\n);\nconst months = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec',\n];\nconst allMonths = months.join('|');\nconst timestamp1 = '[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?';\nconst timestamp2 = '[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}';\nconst timestamp3 = '-[0-9]{3,4}$';\nexport const SPLIT_DATE_STRING = new RegExp(\n `(${timestamp1})|(${timestamp2})|(${timestamp3})|([0-9]{1,4})|(${allMonths})`,\n 'ig'\n);\n\n// 2016-11-22T08:57-500\n// Check if datetime string has an offset at the end\nexport const TIME_WITH_OFFSET_RE = /-\\d{3,4}$/;\n\n// CLEAN TITLE CONSTANTS\n// A regular expression that will match separating characters on a\n// title, that usually denote breadcrumbs or something similar.\nexport const TITLE_SPLITTERS_RE = /(: | - | \\| )/g;\n\nexport const DOMAIN_ENDINGS_RE = new RegExp('.com$|.net$|.org$|.co.uk$', 'g');\n","import { normalizeSpaces } from 'utils/text';\nimport { CLEAN_AUTHOR_RE } from './constants';\n\n// Take an author string (like 'By David Smith ') and clean it to\n// just the name(s): 'David Smith'.\nexport default function cleanAuthor(author) {\n return normalizeSpaces(author.replace(CLEAN_AUTHOR_RE, '$2').trim());\n}\n","import validUrl from 'valid-url';\n\nexport default function clean(leadImageUrl) {\n leadImageUrl = leadImageUrl.trim();\n if (validUrl.isWebUri(leadImageUrl)) {\n return leadImageUrl;\n }\n\n return null;\n}\n","import { stripTags } from 'utils/dom';\nimport { excerptContent, normalizeSpaces } from 'utils/text';\n\nimport { TEXT_LINK_RE } from './constants';\n\n// Take a dek HTML fragment, and return the cleaned version of it.\n// Return None if the dek wasn't good enough.\nexport default function cleanDek(dek, { $, excerpt }) {\n // Sanity check that we didn't get too short or long of a dek.\n if (dek.length > 1000 || dek.length < 5) return null;\n\n // Check that dek isn't the same as excerpt\n if (excerpt && excerptContent(excerpt, 10) === excerptContent(dek, 10))\n return null;\n\n const dekText = stripTags(dek, $);\n\n // Plain text links shouldn't exist in the dek. If we have some, it's\n // not a good dek - bail.\n if (TEXT_LINK_RE.test(dekText)) return null;\n\n return normalizeSpaces(dekText.trim());\n}\n","import moment from 'moment-timezone';\nimport parseFormat from 'moment-parseformat';\n// Is there a compelling reason to use moment here?\n// Mostly only being used for the isValid() method,\n// but could just check for 'Invalid Date' string.\n\nimport {\n MS_DATE_STRING,\n SEC_DATE_STRING,\n CLEAN_DATE_STRING_RE,\n SPLIT_DATE_STRING,\n TIME_AGO_STRING,\n TIME_NOW_STRING,\n TIME_MERIDIAN_SPACE_RE,\n TIME_MERIDIAN_DOTS_RE,\n TIME_WITH_OFFSET_RE,\n} from './constants';\n\nexport function cleanDateString(dateString) {\n return (dateString.match(SPLIT_DATE_STRING) || [])\n .join(' ')\n .replace(TIME_MERIDIAN_DOTS_RE, 'm')\n .replace(TIME_MERIDIAN_SPACE_RE, '$1 $2 $3')\n .replace(CLEAN_DATE_STRING_RE, '$1')\n .trim();\n}\n\nexport function createDate(dateString, timezone, format) {\n if (TIME_WITH_OFFSET_RE.test(dateString)) {\n return moment(new Date(dateString));\n }\n\n if (TIME_AGO_STRING.test(dateString)) {\n const fragments = TIME_AGO_STRING.exec(dateString);\n return moment().subtract(fragments[1], fragments[2]);\n }\n\n if (TIME_NOW_STRING.test(dateString)) {\n return moment();\n }\n\n return timezone\n ? moment.tz(dateString, format || parseFormat(dateString), timezone)\n : moment(dateString, format || parseFormat(dateString));\n}\n\n// Take a date published string, and hopefully return a date out of\n// it. Return none if we fail.\nexport default function cleanDatePublished(\n dateString,\n { timezone, format } = {}\n) {\n // If string is in milliseconds or seconds, convert to int and return\n if (MS_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10)).toISOString();\n }\n if (SEC_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10) * 1000).toISOString();\n }\n\n let date = createDate(dateString, timezone, format);\n\n if (!date.isValid()) {\n dateString = cleanDateString(dateString);\n date = createDate(dateString, timezone, format);\n }\n\n return date.isValid() ? date.toISOString() : null;\n}\n","import {\n cleanAttributes,\n cleanHeaders,\n cleanHOnes,\n cleanImages,\n cleanTags,\n removeEmpty,\n rewriteTopLevel,\n markToKeep,\n stripJunkTags,\n makeLinksAbsolute,\n} from 'utils/dom';\n\n// Clean our article content, returning a new, cleaned node.\nexport default function extractCleanNode(\n article,\n { $, cleanConditionally = true, title = '', url = '', defaultCleaner = true }\n) {\n // Rewrite the tag name to div if it's a top level node like body or\n // html to avoid later complications with multiple body tags.\n rewriteTopLevel(article, $);\n\n // Drop small images and spacer images\n // Only do this is defaultCleaner is set to true;\n // this can sometimes be too aggressive.\n if (defaultCleaner) cleanImages(article, $);\n\n // Make links absolute\n makeLinksAbsolute(article, $, url);\n\n // Mark elements to keep that would normally be removed.\n // E.g., stripJunkTags will remove iframes, so we're going to mark\n // YouTube/Vimeo videos as elements we want to keep.\n markToKeep(article, $, url);\n\n // Drop certain tags like , etc\n // This is -mostly- for cleanliness, not security.\n stripJunkTags(article, $);\n\n // H1 tags are typically the article title, which should be extracted\n // by the title extractor instead. If there's less than 3 of them (<3),\n // strip them. Otherwise, turn 'em into H2s.\n cleanHOnes(article, $);\n\n // Clean headers\n cleanHeaders(article, $, title);\n\n // We used to clean UL's and OL's here, but it was leading to\n // too many in-article lists being removed. Consider a better\n // way to detect menus particularly and remove them.\n // Also optionally running, since it can be overly aggressive.\n if (defaultCleaner) cleanTags(article, $, cleanConditionally);\n\n // Remove empty paragraph nodes\n removeEmpty(article, $);\n\n // Remove unnecessary attributes\n cleanAttributes(article, $);\n\n return article;\n}\n","import { stripTags } from 'utils/dom';\nimport { normalizeSpaces } from 'utils/text';\n\nimport { TITLE_SPLITTERS_RE } from './constants';\nimport { resolveSplitTitle } from './index';\n\nexport default function cleanTitle(title, { url, $ }) {\n // If title has |, :, or - in it, see if\n // we can clean it up.\n if (TITLE_SPLITTERS_RE.test(title)) {\n title = resolveSplitTitle(title, url);\n }\n\n // Final sanity check that we didn't get a crazy title.\n // if (title.length > 150 || title.length < 15) {\n if (title.length > 150) {\n // If we did, return h1 from the document if it exists\n const h1 = $('h1');\n if (h1.length === 1) {\n title = h1.text();\n }\n }\n\n // strip any html tags in the title text\n return normalizeSpaces(stripTags(title, $).trim());\n}\n","import URL from 'url';\nimport wuzzy from 'wuzzy';\n\nimport { TITLE_SPLITTERS_RE, DOMAIN_ENDINGS_RE } from './constants';\n\nfunction extractBreadcrumbTitle(splitTitle, text) {\n // This must be a very breadcrumbed title, like:\n // The Best Gadgets on Earth : Bits : Blogs : NYTimes.com\n // NYTimes - Blogs - Bits - The Best Gadgets on Earth\n if (splitTitle.length >= 6) {\n // Look to see if we can find a breadcrumb splitter that happens\n // more than once. If we can, we'll be able to better pull out\n // the title.\n const termCounts = splitTitle.reduce((acc, titleText) => {\n acc[titleText] = acc[titleText] ? acc[titleText] + 1 : 1;\n return acc;\n }, {});\n\n const [maxTerm, termCount] = Reflect.ownKeys(termCounts).reduce(\n (acc, key) => {\n if (acc[1] < termCounts[key]) {\n return [key, termCounts[key]];\n }\n\n return acc;\n },\n [0, 0]\n );\n\n // We found a splitter that was used more than once, so it\n // is probably the breadcrumber. Split our title on that instead.\n // Note: max_term should be <= 4 characters, so that \" >> \"\n // will match, but nothing longer than that.\n if (termCount >= 2 && maxTerm.length <= 4) {\n splitTitle = text.split(maxTerm);\n }\n\n const splitEnds = [splitTitle[0], splitTitle.slice(-1)];\n const longestEnd = splitEnds.reduce(\n (acc, end) => (acc.length > end.length ? acc : end),\n ''\n );\n\n if (longestEnd.length > 10) {\n return longestEnd;\n }\n\n return text;\n }\n\n return null;\n}\n\nfunction cleanDomainFromTitle(splitTitle, url) {\n // Search the ends of the title, looking for bits that fuzzy match\n // the URL too closely. If one is found, discard it and return the\n // rest.\n //\n // Strip out the big TLDs - it just makes the matching a bit more\n // accurate. Not the end of the world if it doesn't strip right.\n const { host } = URL.parse(url);\n const nakedDomain = host.replace(DOMAIN_ENDINGS_RE, '');\n\n const startSlug = splitTitle[0].toLowerCase().replace(' ', '');\n const startSlugRatio = wuzzy.levenshtein(startSlug, nakedDomain);\n\n if (startSlugRatio > 0.4 && startSlug.length > 5) {\n return splitTitle.slice(2).join('');\n }\n\n const endSlug = splitTitle\n .slice(-1)[0]\n .toLowerCase()\n .replace(' ', '');\n const endSlugRatio = wuzzy.levenshtein(endSlug, nakedDomain);\n\n if (endSlugRatio > 0.4 && endSlug.length >= 5) {\n return splitTitle.slice(0, -2).join('');\n }\n\n return null;\n}\n\n// Given a title with separators in it (colons, dashes, etc),\n// resolve whether any of the segments should be removed.\nexport default function resolveSplitTitle(title, url = '') {\n // Splits while preserving splitters, like:\n // ['The New New York', ' - ', 'The Washington Post']\n const splitTitle = title.split(TITLE_SPLITTERS_RE);\n if (splitTitle.length === 1) {\n return title;\n }\n\n let newTitle = extractBreadcrumbTitle(splitTitle, title);\n if (newTitle) return newTitle;\n\n newTitle = cleanDomainFromTitle(splitTitle, url);\n if (newTitle) return newTitle;\n\n // Fuzzy ratio didn't find anything, so this title is probably legit.\n // Just return it all.\n return title;\n}\n","import cleanAuthor from './author';\nimport cleanImage from './lead-image-url';\nimport cleanDek from './dek';\nimport cleanDatePublished from './date-published';\nimport cleanContent from './content';\nimport cleanTitle from './title';\n\nconst Cleaners = {\n author: cleanAuthor,\n lead_image_url: cleanImage,\n dek: cleanDek,\n date_published: cleanDatePublished,\n content: cleanContent,\n title: cleanTitle,\n};\n\nexport default Cleaners;\n\nexport { cleanAuthor };\nexport { cleanImage };\nexport { cleanDek };\nexport { cleanDatePublished };\nexport { cleanContent };\nexport { cleanTitle };\nexport { default as resolveSplitTitle } from './resolve-split-title';\n","import { stripUnlikelyCandidates, convertToParagraphs } from 'utils/dom';\n\nimport { scoreContent, findTopCandidate } from './scoring';\n\n// Using a variety of scoring techniques, extract the content most\n// likely to be article text.\n//\n// If strip_unlikely_candidates is True, remove any elements that\n// match certain criteria first. (Like, does this element have a\n// classname of \"comment\")\n//\n// If weight_nodes is True, use classNames and IDs to determine the\n// worthiness of nodes.\n//\n// Returns a cheerio object $\nexport default function extractBestNode($, opts) {\n if (opts.stripUnlikelyCandidates) {\n $ = stripUnlikelyCandidates($);\n }\n\n $ = convertToParagraphs($);\n $ = scoreContent($, opts.weightNodes);\n const $topCandidate = findTopCandidate($);\n\n return $topCandidate;\n}\n","import cheerio from 'cheerio';\n\nimport { nodeIsSufficient } from 'utils/dom';\nimport { cleanContent } from 'cleaners';\nimport { normalizeSpaces } from 'utils/text';\n\nimport extractBestNode from './extract-best-node';\n\nconst GenericContentExtractor = {\n defaultOpts: {\n stripUnlikelyCandidates: true,\n weightNodes: true,\n cleanConditionally: true,\n },\n\n // Extract the content for this resource - initially, pass in our\n // most restrictive opts which will return the highest quality\n // content. On each failure, retry with slightly more lax opts.\n //\n // :param return_type: string. If \"node\", should return the content\n // as a cheerio node rather than as an HTML string.\n //\n // Opts:\n // stripUnlikelyCandidates: Remove any elements that match\n // non-article-like criteria first.(Like, does this element\n // have a classname of \"comment\")\n //\n // weightNodes: Modify an elements score based on whether it has\n // certain classNames or IDs. Examples: Subtract if a node has\n // a className of 'comment', Add if a node has an ID of\n // 'entry-content'.\n //\n // cleanConditionally: Clean the node to return of some\n // superfluous content. Things like forms, ads, etc.\n extract({ $, html, title, url }, opts) {\n opts = { ...this.defaultOpts, ...opts };\n\n $ = $ || cheerio.load(html);\n\n // Cascade through our extraction-specific opts in an ordered fashion,\n // turning them off as we try to extract content.\n let node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n return this.cleanAndReturnNode(node, $);\n }\n\n // We didn't succeed on first pass, one by one disable our\n // extraction opts and try again.\n // eslint-disable-next-line no-restricted-syntax\n for (const key of Reflect.ownKeys(opts).filter(k => opts[k] === true)) {\n opts[key] = false;\n $ = cheerio.load(html);\n\n node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n break;\n }\n }\n\n return this.cleanAndReturnNode(node, $);\n },\n\n // Get node given current options\n getContentNode($, title, url, opts) {\n return cleanContent(extractBestNode($, opts), {\n $,\n cleanConditionally: opts.cleanConditionally,\n title,\n url,\n });\n },\n\n // Once we got here, either we're at our last-resort node, or\n // we broke early. Make sure we at least have -something- before we\n // move forward.\n cleanAndReturnNode(node, $) {\n if (!node) {\n return null;\n }\n\n return normalizeSpaces($.html(node));\n },\n};\n\nexport default GenericContentExtractor;\n","// TODO: It would be great if we could merge the meta and selector lists into\n// a list of objects, because we could then rank them better. For example,\n// .hentry .entry-title is far better suited than <meta title>.\n\n// An ordered list of meta tag names that denote likely article titles. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\nexport const STRONG_TITLE_META_TAGS = [\n 'tweetmeme-title',\n 'dc.title',\n 'rbtitle',\n 'headline',\n 'title',\n];\n\n// og:title is weak because it typically contains context that we don't like,\n// for example the source site's name. Gotta get that brand into facebook!\nexport const WEAK_TITLE_META_TAGS = ['og:title'];\n\n// An ordered list of XPath Selectors to find likely article titles. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const STRONG_TITLE_SELECTORS = [\n '.hentry .entry-title',\n 'h1#articleHeader',\n 'h1.articleHeader',\n 'h1.article',\n '.instapaper_title',\n '#meebo-title',\n];\n\nexport const WEAK_TITLE_SELECTORS = [\n 'article h1',\n '#entry-title',\n '.entry-title',\n '#entryTitle',\n '#entrytitle',\n '.entryTitle',\n '.entrytitle',\n '#articleTitle',\n '.articleTitle',\n 'post post-title',\n 'h1.title',\n 'h2.article',\n 'h1',\n 'html head title',\n 'title',\n];\n","import { cleanTitle } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\n\nimport {\n STRONG_TITLE_META_TAGS,\n WEAK_TITLE_META_TAGS,\n STRONG_TITLE_SELECTORS,\n WEAK_TITLE_SELECTORS,\n} from './constants';\n\nconst GenericTitleExtractor = {\n extract({ $, url, metaCache }) {\n // First, check to see if we have a matching meta tag that we can make\n // use of that is strongly associated with the headline.\n let title;\n\n title = extractFromMeta($, STRONG_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Second, look through our content selectors for the most likely\n // article title that is strongly associated with the headline.\n title = extractFromSelectors($, STRONG_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // Third, check for weaker meta tags that may match.\n title = extractFromMeta($, WEAK_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Last, look for weaker selector tags that may match.\n title = extractFromSelectors($, WEAK_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // If no matches, return an empty string\n return '';\n },\n};\n\nexport default GenericTitleExtractor;\n","// An ordered list of meta tag names that denote likely article authors. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\n//\n// Note: \"author\" is too often the -developer- of the page, so it is not\n// added here.\nexport const AUTHOR_META_TAGS = [\n 'byl',\n 'clmst',\n 'dc.author',\n 'dcsext.author',\n 'dc.creator',\n 'rbauthors',\n 'authors',\n];\n\nexport const AUTHOR_MAX_LENGTH = 300;\n\n// An ordered list of XPath Selectors to find likely article authors. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const AUTHOR_SELECTORS = [\n '.entry .entry-author',\n '.author.vcard .fn',\n '.author .vcard .fn',\n '.byline.vcard .fn',\n '.byline .vcard .fn',\n '.byline .by .author',\n '.byline .by',\n '.byline .author',\n '.post-author.vcard',\n '.post-author .vcard',\n 'a[rel=author]',\n '#by_author',\n '.by_author',\n '#entryAuthor',\n '.entryAuthor',\n '.byline a[href*=author]',\n '#author .authorname',\n '.author .authorname',\n '#author',\n '.author',\n '.articleauthor',\n '.ArticleAuthor',\n '.byline',\n];\n\n// An ordered list of Selectors to find likely article authors, with\n// regular expression for content.\nconst bylineRe = /^[\\n\\s]*By/i;\nexport const BYLINE_SELECTORS_RE = [\n ['#byline', bylineRe],\n ['.byline', bylineRe],\n];\n","import { cleanAuthor } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\n\nimport {\n AUTHOR_META_TAGS,\n AUTHOR_MAX_LENGTH,\n AUTHOR_SELECTORS,\n BYLINE_SELECTORS_RE,\n} from './constants';\n\nconst GenericAuthorExtractor = {\n extract({ $, metaCache }) {\n let author;\n\n // First, check to see if we have a matching\n // meta tag that we can make use of.\n author = extractFromMeta($, AUTHOR_META_TAGS, metaCache);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Second, look through our selectors looking for potential authors.\n author = extractFromSelectors($, AUTHOR_SELECTORS, 2);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Last, use our looser regular-expression based selectors for\n // potential authors.\n // eslint-disable-next-line no-restricted-syntax\n for (const [selector, regex] of BYLINE_SELECTORS_RE) {\n const node = $(selector);\n if (node.length === 1) {\n const text = node.text();\n if (regex.test(text)) {\n return cleanAuthor(text);\n }\n }\n }\n\n return null;\n },\n};\n\nexport default GenericAuthorExtractor;\n","// An ordered list of meta tag names that denote\n// likely date published dates. All attributes\n// should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const DATE_PUBLISHED_META_TAGS = [\n 'article:published_time',\n 'displaydate',\n 'dc.date',\n 'dc.date.issued',\n 'rbpubdate',\n 'publish_date',\n 'pub_date',\n 'pagedate',\n 'pubdate',\n 'revision_date',\n 'doc_date',\n 'date_created',\n 'content_create_date',\n 'lastmodified',\n 'created',\n 'date',\n];\n\n// An ordered list of XPath Selectors to find\n// likely date published dates. From most explicit\n// to least explicit.\nexport const DATE_PUBLISHED_SELECTORS = [\n '.hentry .dtstamp.published',\n '.hentry .published',\n '.hentry .dtstamp.updated',\n '.hentry .updated',\n '.single .published',\n '.meta .published',\n '.meta .postDate',\n '.entry-date',\n '.byline .date',\n '.postmetadata .date',\n '.article_datetime',\n '.date-header',\n '.story-date',\n '.dateStamp',\n '#story .datetime',\n '.dateline',\n '.pubdate',\n];\n\n// An ordered list of compiled regular expressions to find likely date\n// published dates from the URL. These should always have the first\n// reference be a date string that is parseable by dateutil.parser.parse\nconst abbrevMonthsStr = '(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)';\nexport const DATE_PUBLISHED_URL_RES = [\n new RegExp('/(20\\\\d{2}/\\\\d{2}/\\\\d{2})/', 'i'),\n new RegExp('(20\\\\d{2}-[01]\\\\d-[0-3]\\\\d)', 'i'),\n new RegExp(`/(20\\\\d{2}/${abbrevMonthsStr}/[0-3]\\\\d)/`, 'i'),\n];\n","import { cleanDatePublished } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\nimport { extractFromUrl } from 'utils/text';\n\nimport {\n DATE_PUBLISHED_META_TAGS,\n DATE_PUBLISHED_SELECTORS,\n DATE_PUBLISHED_URL_RES,\n} from './constants';\n\nconst GenericDatePublishedExtractor = {\n extract({ $, url, metaCache }) {\n let datePublished;\n // First, check to see if we have a matching meta tag\n // that we can make use of.\n // Don't try cleaning tags from this string\n datePublished = extractFromMeta(\n $,\n DATE_PUBLISHED_META_TAGS,\n metaCache,\n false\n );\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Second, look through our selectors looking for potential\n // date_published's.\n datePublished = extractFromSelectors($, DATE_PUBLISHED_SELECTORS);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Lastly, look to see if a dately string exists in the URL\n datePublished = extractFromUrl(url, DATE_PUBLISHED_URL_RES);\n if (datePublished) return cleanDatePublished(datePublished);\n\n return null;\n },\n};\n\nexport default GenericDatePublishedExtractor;\n","// Currently there is only one selector for\n// deks. We should simply return null here\n// until we have a more robust generic option.\n// Below is the original source for this, for reference.\nconst GenericDekExtractor = {\n extract() {\n return null;\n },\n};\n\nexport default GenericDekExtractor;\n","// An ordered list of meta tag names that denote likely article leading images.\n// All attributes should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const LEAD_IMAGE_URL_META_TAGS = [\n 'og:image',\n 'twitter:image',\n 'image_src',\n];\n\nexport const LEAD_IMAGE_URL_SELECTORS = ['link[rel=image_src]'];\n\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS = [\n 'upload',\n 'wp-content',\n 'large',\n 'photo',\n 'wp-image',\n];\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(\n POSITIVE_LEAD_IMAGE_URL_HINTS.join('|'),\n 'i'\n);\n\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS = [\n 'spacer',\n 'sprite',\n 'blank',\n 'throbber',\n 'gradient',\n 'tile',\n 'bg',\n 'background',\n 'icon',\n 'social',\n 'header',\n 'hdr',\n 'advert',\n 'spinner',\n 'loader',\n 'loading',\n 'default',\n 'rating',\n 'share',\n 'facebook',\n 'twitter',\n 'theme',\n 'promo',\n 'ads',\n 'wp-includes',\n];\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(\n NEGATIVE_LEAD_IMAGE_URL_HINTS.join('|'),\n 'i'\n);\n\nexport const GIF_RE = /\\.gif(\\?.*)?$/i;\nexport const JPG_RE = /\\.jpe?g(\\?.*)?$/i;\n","import {\n POSITIVE_LEAD_IMAGE_URL_HINTS_RE,\n NEGATIVE_LEAD_IMAGE_URL_HINTS_RE,\n GIF_RE,\n JPG_RE,\n} from './constants';\n\nimport { PHOTO_HINTS_RE } from '../content/scoring/constants';\n\nfunction getSig($node) {\n return `${$node.attr('class') || ''} ${$node.attr('id') || ''}`;\n}\n\n// Scores image urls based on a variety of heuristics.\nexport function scoreImageUrl(url) {\n url = url.trim();\n let score = 0;\n\n if (POSITIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score += 20;\n }\n\n if (NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score -= 20;\n }\n\n // TODO: We might want to consider removing this as\n // gifs are much more common/popular than they once were\n if (GIF_RE.test(url)) {\n score -= 10;\n }\n\n if (JPG_RE.test(url)) {\n score += 10;\n }\n\n // PNGs are neutral.\n\n return score;\n}\n\n// Alt attribute usually means non-presentational image.\nexport function scoreAttr($img) {\n if ($img.attr('alt')) {\n return 5;\n }\n\n return 0;\n}\n\n// Look through our parent and grandparent for figure-like\n// container elements, give a bonus if we find them\nexport function scoreByParents($img) {\n let score = 0;\n const $figParent = $img.parents('figure').first();\n\n if ($figParent.length === 1) {\n score += 25;\n }\n\n const $parent = $img.parent();\n let $gParent;\n if ($parent.length === 1) {\n $gParent = $parent.parent();\n }\n\n [$parent, $gParent].forEach($node => {\n if (PHOTO_HINTS_RE.test(getSig($node))) {\n score += 15;\n }\n });\n\n return score;\n}\n\n// Look at our immediate sibling and see if it looks like it's a\n// caption. Bonus if so.\nexport function scoreBySibling($img) {\n let score = 0;\n const $sibling = $img.next();\n const sibling = $sibling.get(0);\n\n if (sibling && sibling.tagName.toLowerCase() === 'figcaption') {\n score += 25;\n }\n\n if (PHOTO_HINTS_RE.test(getSig($sibling))) {\n score += 15;\n }\n\n return score;\n}\n\nexport function scoreByDimensions($img) {\n let score = 0;\n\n const width = parseFloat($img.attr('width'));\n const height = parseFloat($img.attr('height'));\n const src = $img.attr('src');\n\n // Penalty for skinny images\n if (width && width <= 50) {\n score -= 50;\n }\n\n // Penalty for short images\n if (height && height <= 50) {\n score -= 50;\n }\n\n if (width && height && !src.includes('sprite')) {\n const area = width * height;\n if (area < 5000) {\n // Smaller than 50 x 100\n score -= 100;\n } else {\n score += Math.round(area / 1000);\n }\n }\n\n return score;\n}\n\nexport function scoreByPosition($imgs, index) {\n return $imgs.length / 2 - index;\n}\n","import { extractFromMeta } from 'utils/dom';\nimport { cleanImage } from 'cleaners';\n\nimport {\n LEAD_IMAGE_URL_META_TAGS,\n LEAD_IMAGE_URL_SELECTORS,\n} from './constants';\n\nimport {\n scoreImageUrl,\n scoreAttr,\n scoreByParents,\n scoreBySibling,\n scoreByDimensions,\n scoreByPosition,\n} from './score-image';\n\n// Given a resource, try to find the lead image URL from within\n// it. Like content and next page extraction, uses a scoring system\n// to determine what the most likely image may be. Short circuits\n// on really probable things like og:image meta tags.\n//\n// Potential signals to still take advantage of:\n// * domain\n// * weird aspect ratio\nconst GenericLeadImageUrlExtractor = {\n extract({ $, content, metaCache, html }) {\n let cleanUrl;\n if (!$.browser && $('head').length === 0) {\n $('*')\n .first()\n .prepend(html);\n }\n\n // Check to see if we have a matching meta tag that we can make use of.\n // Moving this higher because common practice is now to use large\n // images on things like Open Graph or Twitter cards.\n // images usually have for things like Open Graph.\n const imageUrl = extractFromMeta(\n $,\n LEAD_IMAGE_URL_META_TAGS,\n metaCache,\n false\n );\n\n if (imageUrl) {\n cleanUrl = cleanImage(imageUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // Next, try to find the \"best\" image via the content.\n // We'd rather not have to fetch each image and check dimensions,\n // so try to do some analysis and determine them instead.\n const $content = $(content);\n const imgs = $('img', $content).toArray();\n const imgScores = {};\n\n imgs.forEach((img, index) => {\n const $img = $(img);\n const src = $img.attr('src');\n\n if (!src) return;\n\n let score = scoreImageUrl(src);\n score += scoreAttr($img);\n score += scoreByParents($img);\n score += scoreBySibling($img);\n score += scoreByDimensions($img);\n score += scoreByPosition(imgs, index);\n\n imgScores[src] = score;\n });\n\n const [topUrl, topScore] = Reflect.ownKeys(imgScores).reduce(\n (acc, key) => (imgScores[key] > acc[1] ? [key, imgScores[key]] : acc),\n [null, 0]\n );\n\n if (topScore > 0) {\n cleanUrl = cleanImage(topUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // If nothing else worked, check to see if there are any really\n // probable nodes in the doc, like <link rel=\"image_src\" />.\n // eslint-disable-next-line no-restricted-syntax\n for (const selector of LEAD_IMAGE_URL_SELECTORS) {\n const $node = $(selector).first();\n const src = $node.attr('src');\n if (src) {\n cleanUrl = cleanImage(src);\n if (cleanUrl) return cleanUrl;\n }\n\n const href = $node.attr('href');\n if (href) {\n cleanUrl = cleanImage(href);\n if (cleanUrl) return cleanUrl;\n }\n\n const value = $node.attr('value');\n if (value) {\n cleanUrl = cleanImage(value);\n if (cleanUrl) return cleanUrl;\n }\n }\n\n return null;\n },\n};\n\nexport default GenericLeadImageUrlExtractor;\n","import difflib from 'difflib';\n\nexport default function scoreSimilarity(score, articleUrl, href) {\n // Do this last and only if we have a real candidate, because it's\n // potentially expensive computationally. Compare the link to this\n // URL using difflib to get the % similarity of these URLs. On a\n // sliding scale, subtract points from this link based on\n // similarity.\n if (score > 0) {\n const similarity = new difflib.SequenceMatcher(\n null,\n articleUrl,\n href\n ).ratio();\n // Subtract .1 from diff_percent when calculating modifier,\n // which means that if it's less than 10% different, we give a\n // bonus instead. Ex:\n // 3% different = +17.5 points\n // 10% different = 0 points\n // 20% different = -25 points\n const diffPercent = 1.0 - similarity;\n const diffModifier = -(250 * (diffPercent - 0.2));\n return score + diffModifier;\n }\n\n return 0;\n}\n","import { IS_DIGIT_RE } from 'utils/text/constants';\n\nexport default function scoreLinkText(linkText, pageNum) {\n // If the link text can be parsed as a number, give it a minor\n // bonus, with a slight bias towards lower numbered pages. This is\n // so that pages that might not have 'next' in their text can still\n // get scored, and sorted properly by score.\n let score = 0;\n\n if (IS_DIGIT_RE.test(linkText.trim())) {\n const linkTextAsNum = parseInt(linkText, 10);\n // If it's the first page, we already got it on the first call.\n // Give it a negative score. Otherwise, up to page 10, give a\n // small bonus.\n if (linkTextAsNum < 2) {\n score = -30;\n } else {\n score = Math.max(0, 10 - linkTextAsNum);\n }\n\n // If it appears that the current page number is greater than\n // this links page number, it's a very bad sign. Give it a big\n // penalty.\n if (pageNum && pageNum >= linkTextAsNum) {\n score -= 50;\n }\n }\n\n return score;\n}\n","export default function scorePageInLink(pageNum, isWp) {\n // page in the link = bonus. Intentionally ignore wordpress because\n // their ?p=123 link style gets caught by this even though it means\n // separate documents entirely.\n if (pageNum && !isWp) {\n return 50;\n }\n\n return 0;\n}\n","export const DIGIT_RE = /\\d/;\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\nexport const NEXT_LINK_TEXT_RE = new RegExp(\n '(next|weiter|continue|>([^|]|$)|»([^|]|$))',\n 'i'\n);\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n","import { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function scoreExtraneousLinks(href) {\n // If the URL itself contains extraneous values, give a penalty.\n if (EXTRANEOUS_LINK_HINTS_RE.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { range } from 'utils';\nimport {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PAGE_RE,\n} from 'utils/dom/constants';\nimport { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nfunction makeSig($link) {\n return `${$link.attr('class') || ''} ${$link.attr('id') || ''}`;\n}\n\nexport default function scoreByParents($link) {\n // If a parent node contains paging-like classname or id, give a\n // bonus. Additionally, if a parent_node contains bad content\n // (like 'sponsor'), give a penalty.\n let $parent = $link.parent();\n let positiveMatch = false;\n let negativeMatch = false;\n let score = 0;\n\n Array.from(range(0, 4)).forEach(() => {\n if ($parent.length === 0) {\n return;\n }\n\n const parentData = makeSig($parent, ' ');\n\n // If we have 'page' or 'paging' in our data, that's a good\n // sign. Add a bonus.\n if (!positiveMatch && PAGE_RE.test(parentData)) {\n positiveMatch = true;\n score += 25;\n }\n\n // If we have 'comment' or something in our data, and\n // we don't have something like 'content' as well, that's\n // a bad sign. Give a penalty.\n if (\n !negativeMatch &&\n NEGATIVE_SCORE_RE.test(parentData) &&\n EXTRANEOUS_LINK_HINTS_RE.test(parentData)\n ) {\n if (!POSITIVE_SCORE_RE.test(parentData)) {\n negativeMatch = true;\n score -= 25;\n }\n }\n\n $parent = $parent.parent();\n });\n\n return score;\n}\n","import { PREV_LINK_TEXT_RE } from '../constants';\n\nexport default function scorePrevLink(linkData) {\n // If the link has something like \"previous\", its definitely\n // an old link, skip it.\n if (PREV_LINK_TEXT_RE.test(linkData)) {\n return -200;\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport { DIGIT_RE, EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function shouldScore(\n href,\n articleUrl,\n baseUrl,\n parsedUrl,\n linkText,\n previousUrls\n) {\n // skip if we've already fetched this url\n if (previousUrls.find(url => href === url) !== undefined) {\n return false;\n }\n\n // If we've already parsed this URL, or the URL matches the base\n // URL, or is empty, skip it.\n if (!href || href === articleUrl || href === baseUrl) {\n return false;\n }\n\n const { hostname } = parsedUrl;\n const { hostname: linkHost } = URL.parse(href);\n\n // Domain mismatch.\n if (linkHost !== hostname) {\n return false;\n }\n\n // If href doesn't contain a digit after removing the base URL,\n // it's certainly not the next page.\n const fragment = href.replace(baseUrl, '');\n if (!DIGIT_RE.test(fragment)) {\n return false;\n }\n\n // This link has extraneous content (like \"comment\") in its link\n // text, so we skip it.\n if (EXTRANEOUS_LINK_HINTS_RE.test(linkText)) {\n return false;\n }\n\n // Next page link text is never long, skip if it is too long.\n if (linkText.length > 25) {\n return false;\n }\n\n return true;\n}\n","export default function scoreBaseUrl(href, baseRegex) {\n // If the baseUrl isn't part of this URL, penalize this\n // link. It could still be the link, but the odds are lower.\n // Example:\n // http://www.actionscript.org/resources/articles/745/1/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page1.html\n if (!baseRegex.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreNextLinkText(linkData) {\n // Things like \"next\", \">>\", etc.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return 50;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE, CAP_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreCapLinks(linkData) {\n // Cap links are links like \"last\", etc.\n if (CAP_LINK_TEXT_RE.test(linkData)) {\n // If we found a link like \"last\", but we've already seen that\n // this link is also \"next\", it's fine. If it's not been\n // previously marked as \"next\", then it's probably bad.\n // Penalize.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return -65;\n }\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport { getAttrs, isWordpress } from 'utils/dom';\nimport { removeAnchor, pageNumFromUrl } from 'utils/text';\n\nimport {\n scoreSimilarity,\n scoreLinkText,\n scorePageInLink,\n scoreExtraneousLinks,\n scoreByParents,\n scorePrevLink,\n shouldScore,\n scoreBaseUrl,\n scoreCapLinks,\n scoreNextLinkText,\n} from './utils';\n\nexport function makeBaseRegex(baseUrl) {\n return new RegExp(`^${baseUrl}`, 'i');\n}\n\nfunction makeSig($link, linkText) {\n return `${linkText || $link.text()} ${$link.attr('class') || ''} ${$link.attr(\n 'id'\n ) || ''}`;\n}\n\nexport default function scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls = [],\n}) {\n parsedUrl = parsedUrl || URL.parse(articleUrl);\n const baseRegex = makeBaseRegex(baseUrl);\n const isWp = isWordpress($);\n\n // Loop through all links, looking for hints that they may be next-page\n // links. Things like having \"page\" in their textContent, className or\n // id, or being a child of a node with a page-y className or id.\n //\n // After we do that, assign each page a score, and pick the one that\n // looks most like the next page link, as long as its score is strong\n // enough to have decent confidence.\n const scoredPages = links.reduce((possiblePages, link) => {\n // Remove any anchor data since we don't do a good job\n // standardizing URLs (it's hard), we're going to do\n // some checking with and without a trailing slash\n const attrs = getAttrs(link);\n\n // if href is undefined, return\n if (!attrs.href) return possiblePages;\n\n const href = removeAnchor(attrs.href);\n const $link = $(link);\n const linkText = $link.text();\n\n if (\n !shouldScore(href, articleUrl, baseUrl, parsedUrl, linkText, previousUrls)\n ) {\n return possiblePages;\n }\n\n // ## PASSED THE FIRST-PASS TESTS. Start scoring. ##\n if (!possiblePages[href]) {\n possiblePages[href] = {\n score: 0,\n linkText,\n href,\n };\n } else {\n possiblePages[href].linkText = `${\n possiblePages[href].linkText\n }|${linkText}`;\n }\n\n const possiblePage = possiblePages[href];\n const linkData = makeSig($link, linkText);\n const pageNum = pageNumFromUrl(href);\n\n let score = scoreBaseUrl(href, baseRegex);\n score += scoreNextLinkText(linkData);\n score += scoreCapLinks(linkData);\n score += scorePrevLink(linkData);\n score += scoreByParents($link);\n score += scoreExtraneousLinks(href);\n score += scorePageInLink(pageNum, isWp);\n score += scoreLinkText(linkText, pageNum);\n score += scoreSimilarity(score, articleUrl, href);\n\n possiblePage.score = score;\n\n return possiblePages;\n }, {});\n\n return Reflect.ownKeys(scoredPages).length === 0 ? null : scoredPages;\n}\n","import URL from 'url';\n\nimport { articleBaseUrl, removeAnchor } from 'utils/text';\nimport scoreLinks from './scoring/score-links';\n\n// Looks for and returns next page url\n// for multi-page articles\nconst GenericNextPageUrlExtractor = {\n extract({ $, url, parsedUrl, previousUrls = [] }) {\n parsedUrl = parsedUrl || URL.parse(url);\n\n const articleUrl = removeAnchor(url);\n const baseUrl = articleBaseUrl(url, parsedUrl);\n\n const links = $('a[href]').toArray();\n\n const scoredLinks = scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls,\n });\n\n // If no links were scored, return null\n if (!scoredLinks) return null;\n\n // now that we've scored all possible pages,\n // find the biggest one.\n const topPage = Reflect.ownKeys(scoredLinks).reduce(\n (acc, link) => {\n const scoredLink = scoredLinks[link];\n return scoredLink.score > acc.score ? scoredLink : acc;\n },\n { score: -100 }\n );\n\n // If the score is less than 50, we're not confident enough to use it,\n // so we fail.\n if (topPage.score >= 50) {\n return topPage.href;\n }\n\n return null;\n },\n};\n\nexport default GenericNextPageUrlExtractor;\n","export const CANONICAL_META_SELECTORS = ['og:url'];\n","import URL from 'url';\nimport { extractFromMeta } from 'utils/dom';\n\nimport { CANONICAL_META_SELECTORS } from './constants';\n\nfunction parseDomain(url) {\n const parsedUrl = URL.parse(url);\n const { hostname } = parsedUrl;\n return hostname;\n}\n\nfunction result(url) {\n return {\n url,\n domain: parseDomain(url),\n };\n}\n\nconst GenericUrlExtractor = {\n extract({ $, url, metaCache }) {\n const $canonical = $('link[rel=canonical]');\n if ($canonical.length !== 0) {\n const href = $canonical.attr('href');\n if (href) {\n return result(href);\n }\n }\n\n const metaUrl = extractFromMeta($, CANONICAL_META_SELECTORS, metaCache);\n if (metaUrl) {\n return result(metaUrl);\n }\n\n return result(url);\n },\n};\n\nexport default GenericUrlExtractor;\n","export const EXCERPT_META_SELECTORS = ['og:description', 'twitter:description'];\n","import ellipsize from 'ellipsize';\n\nimport { extractFromMeta, stripTags } from 'utils/dom';\n\nimport { EXCERPT_META_SELECTORS } from './constants';\n\nexport function clean(content, $, maxLength = 200) {\n content = content.replace(/[\\s\\n]+/g, ' ').trim();\n return ellipsize(content, maxLength, { ellipse: '…' });\n}\n\nconst GenericExcerptExtractor = {\n extract({ $, content, metaCache }) {\n const excerpt = extractFromMeta($, EXCERPT_META_SELECTORS, metaCache);\n if (excerpt) {\n return clean(stripTags(excerpt, $));\n }\n // Fall back to excerpting from the extracted content\n const maxLength = 200;\n const shortContent = content.slice(0, maxLength * 5);\n return clean($(shortContent).text(), $, maxLength);\n },\n};\n\nexport default GenericExcerptExtractor;\n","import cheerio from 'cheerio';\n\nimport { normalizeSpaces } from 'utils/text';\n\nconst getWordCount = content => {\n const $ = cheerio.load(content);\n const $content = $('div').first();\n const text = normalizeSpaces($content.text());\n return text.split(/\\s/).length;\n};\n\nconst getWordCountAlt = content => {\n content = content.replace(/<[^>]*>/g, ' ');\n content = content.replace(/\\s+/g, ' ');\n content = content.trim();\n return content.split(' ').length;\n};\n\nconst GenericWordCountExtractor = {\n extract({ content }) {\n let count = getWordCount(content);\n if (count === 1) count = getWordCountAlt(content);\n return count;\n },\n};\n\nexport default GenericWordCountExtractor;\n","import cheerio from 'cheerio';\nimport stringDirection from 'string-direction';\n\nimport GenericContentExtractor from './content/extractor';\nimport GenericTitleExtractor from './title/extractor';\nimport GenericAuthorExtractor from './author/extractor';\nimport GenericDatePublishedExtractor from './date-published/extractor';\nimport GenericDekExtractor from './dek/extractor';\nimport GenericLeadImageUrlExtractor from './lead-image-url/extractor';\nimport GenericNextPageUrlExtractor from './next-page-url/extractor';\nimport GenericUrlExtractor from './url/extractor';\nimport GenericExcerptExtractor from './excerpt/extractor';\nimport GenericWordCountExtractor from './word-count/extractor';\n\nconst GenericExtractor = {\n // This extractor is the default for all domains\n domain: '*',\n title: GenericTitleExtractor.extract,\n date_published: GenericDatePublishedExtractor.extract,\n author: GenericAuthorExtractor.extract,\n content: GenericContentExtractor.extract.bind(GenericContentExtractor),\n lead_image_url: GenericLeadImageUrlExtractor.extract,\n dek: GenericDekExtractor.extract,\n next_page_url: GenericNextPageUrlExtractor.extract,\n url_and_domain: GenericUrlExtractor.extract,\n excerpt: GenericExcerptExtractor.extract,\n word_count: GenericWordCountExtractor.extract,\n direction: ({ title }) => stringDirection.getDirection(title),\n\n extract(options) {\n const { html, $ } = options;\n\n if (html && !$) {\n const loaded = cheerio.load(html);\n options.$ = loaded;\n }\n\n const title = this.title(options);\n const date_published = this.date_published(options);\n const author = this.author(options);\n const content = this.content({ ...options, title });\n const lead_image_url = this.lead_image_url({ ...options, content });\n const dek = this.dek({ ...options, content });\n const next_page_url = this.next_page_url(options);\n const excerpt = this.excerpt({ ...options, content });\n const word_count = this.word_count({ ...options, content });\n const direction = this.direction({ title });\n const { url, domain } = this.url_and_domain(options);\n\n return {\n title,\n author,\n date_published: date_published || null,\n dek,\n lead_image_url,\n content,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n };\n },\n};\n\nexport default GenericExtractor;\n","import { MediumExtractor, BloggerExtractor } from './custom';\n\nconst Detectors = {\n 'meta[name=\"al:ios:app_name\"][value=\"Medium\"]': MediumExtractor,\n 'meta[name=\"generator\"][value=\"blogger\"]': BloggerExtractor,\n};\n\nexport default function detectByHtml($) {\n const selector = Reflect.ownKeys(Detectors).find(s => $(s).length > 0);\n\n return Detectors[selector];\n}\n","import URL from 'url';\n\nimport Extractors from './all';\nimport GenericExtractor from './generic';\nimport detectByHtml from './detect-by-html';\nimport { apiExtractors } from './add-extractor';\n\nexport default function getExtractor(url, parsedUrl, $) {\n parsedUrl = parsedUrl || URL.parse(url);\n const { hostname } = parsedUrl;\n const baseDomain = hostname\n .split('.')\n .slice(-2)\n .join('.');\n\n return (\n apiExtractors[hostname] ||\n apiExtractors[baseDomain] ||\n Extractors[hostname] ||\n Extractors[baseDomain] ||\n detectByHtml($) ||\n GenericExtractor\n );\n}\n","import Cleaners from 'cleaners';\nimport { convertNodeTo, makeLinksAbsolute } from 'utils/dom';\nimport GenericExtractor from './generic';\n\n// Remove elements by an array of selectors\nexport function cleanBySelectors($content, $, { clean }) {\n if (!clean) return $content;\n\n $(clean.join(','), $content).remove();\n\n return $content;\n}\n\n// Transform matching elements\nexport function transformElements($content, $, { transforms }) {\n if (!transforms) return $content;\n\n Reflect.ownKeys(transforms).forEach(key => {\n const $matches = $(key, $content);\n const value = transforms[key];\n\n // If value is a string, convert directly\n if (typeof value === 'string') {\n $matches.each((index, node) => {\n convertNodeTo($(node), $, transforms[key]);\n });\n } else if (typeof value === 'function') {\n // If value is function, apply function to node\n $matches.each((index, node) => {\n const result = value($(node), $);\n // If function returns a string, convert node to that value\n if (typeof result === 'string') {\n convertNodeTo($(node), $, result);\n }\n });\n }\n });\n\n return $content;\n}\n\nfunction findMatchingSelector($, selectors, extractHtml, allowMultiple) {\n return selectors.find(selector => {\n if (Array.isArray(selector)) {\n if (extractHtml) {\n return selector.reduce((acc, s) => acc && $(s).length > 0, true);\n }\n\n const [s, attr] = selector;\n return (\n (allowMultiple || (!allowMultiple && $(s).length === 1)) &&\n $(s).attr(attr) &&\n $(s)\n .attr(attr)\n .trim() !== ''\n );\n }\n\n return (\n (allowMultiple || (!allowMultiple && $(selector).length === 1)) &&\n $(selector)\n .text()\n .trim() !== ''\n );\n });\n}\n\nexport function select(opts) {\n const { $, type, extractionOpts, extractHtml = false } = opts;\n // Skip if there's not extraction for this type\n if (!extractionOpts) return null;\n\n // If a string is hardcoded for a type (e.g., Wikipedia\n // contributors), return the string\n if (typeof extractionOpts === 'string') return extractionOpts;\n\n const { selectors, defaultCleaner = true, allowMultiple } = extractionOpts;\n\n const overrideAllowMultiple = type === 'lead_image_url' || allowMultiple;\n\n const matchingSelector = findMatchingSelector(\n $,\n selectors,\n extractHtml,\n overrideAllowMultiple\n );\n\n if (!matchingSelector) return null;\n\n function transformAndClean($node) {\n makeLinksAbsolute($node, $, opts.url || '');\n cleanBySelectors($node, $, extractionOpts);\n transformElements($node, $, extractionOpts);\n return $node;\n }\n\n function selectHtml() {\n // If the selector type requests html as its return type\n // transform and clean the element with provided selectors\n let $content;\n\n // If matching selector is an array, we're considering this a\n // multi-match selection, which allows the parser to choose several\n // selectors to include in the result. Note that all selectors in the\n // array must match in order for this selector to trigger\n if (Array.isArray(matchingSelector)) {\n $content = $(matchingSelector.join(','));\n const $wrapper = $('<div></div>');\n $content.each((_, element) => {\n $wrapper.append(element);\n });\n\n $content = $wrapper;\n } else {\n $content = $(matchingSelector);\n }\n\n // Wrap in div so transformation can take place on root element\n $content.wrap($('<div></div>'));\n $content = $content.parent();\n $content = transformAndClean($content);\n if (Cleaners[type]) {\n Cleaners[type]($content, { ...opts, defaultCleaner });\n }\n\n if (allowMultiple) {\n return $content\n .children()\n .toArray()\n .map(el => $.html($(el)));\n }\n\n return $.html($content);\n }\n\n if (extractHtml) {\n return selectHtml(matchingSelector);\n }\n\n let $match;\n let result;\n // if selector is an array (e.g., ['img', 'src']),\n // extract the attr\n if (Array.isArray(matchingSelector)) {\n const [selector, attr, transform] = matchingSelector;\n $match = $(selector);\n $match = transformAndClean($match);\n result = $match.map((_, el) => {\n const item = $(el)\n .attr(attr)\n .trim();\n return transform ? transform(item) : item;\n });\n } else {\n $match = $(matchingSelector);\n $match = transformAndClean($match);\n result = $match.map((_, el) =>\n $(el)\n .text()\n .trim()\n );\n }\n\n result =\n Array.isArray(result.toArray()) && allowMultiple\n ? result.toArray()\n : result[0];\n // Allow custom extractor to skip default cleaner\n // for this type; defaults to true\n if (defaultCleaner && Cleaners[type]) {\n return Cleaners[type](result, { ...opts, ...extractionOpts });\n }\n\n return result;\n}\n\nexport function selectExtendedTypes(extend, opts) {\n const results = {};\n Reflect.ownKeys(extend).forEach(t => {\n if (!results[t]) {\n results[t] = select({ ...opts, type: t, extractionOpts: extend[t] });\n }\n });\n return results;\n}\n\nfunction extractResult(opts) {\n const { type, extractor, fallback = true } = opts;\n\n const result = select({ ...opts, extractionOpts: extractor[type] });\n\n // If custom parser succeeds, return the result\n if (result) {\n return result;\n }\n\n // If nothing matches the selector, and fallback is enabled,\n // run the Generic extraction\n if (fallback) return GenericExtractor[type](opts);\n\n return null;\n}\n\nconst RootExtractor = {\n extract(extractor = GenericExtractor, opts) {\n const { contentOnly, extractedTitle } = opts;\n // This is the generic extractor. Run its extract method\n if (extractor.domain === '*') return extractor.extract(opts);\n\n opts = {\n ...opts,\n extractor,\n };\n\n if (contentOnly) {\n const content = extractResult({\n ...opts,\n type: 'content',\n extractHtml: true,\n title: extractedTitle,\n });\n return {\n content,\n };\n }\n const title = extractResult({ ...opts, type: 'title' });\n const date_published = extractResult({ ...opts, type: 'date_published' });\n const author = extractResult({ ...opts, type: 'author' });\n const next_page_url = extractResult({ ...opts, type: 'next_page_url' });\n const content = extractResult({\n ...opts,\n type: 'content',\n extractHtml: true,\n title,\n });\n const lead_image_url = extractResult({\n ...opts,\n type: 'lead_image_url',\n content,\n });\n const excerpt = extractResult({ ...opts, type: 'excerpt', content });\n const dek = extractResult({ ...opts, type: 'dek', content, excerpt });\n const word_count = extractResult({ ...opts, type: 'word_count', content });\n const direction = extractResult({ ...opts, type: 'direction', title });\n const { url, domain } = extractResult({\n ...opts,\n type: 'url_and_domain',\n }) || { url: null, domain: null };\n\n let extendedResults = {};\n if (extractor.extend) {\n extendedResults = selectExtendedTypes(extractor.extend, opts);\n }\n\n return {\n title,\n content,\n author,\n date_published,\n lead_image_url,\n dek,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n ...extendedResults,\n };\n },\n};\n\nexport default RootExtractor;\n","import { removeAnchor } from 'utils/text';\nimport RootExtractor from 'extractors/root-extractor';\nimport GenericExtractor from 'extractors/generic';\nimport Resource from 'resource';\n\nexport default async function collectAllPages({\n next_page_url,\n html,\n $,\n metaCache,\n result,\n Extractor,\n title,\n url,\n}) {\n // At this point, we've fetched just the first page\n let pages = 1;\n const previousUrls = [removeAnchor(url)];\n // If we've gone over 26 pages, something has\n // likely gone wrong.\n while (next_page_url && pages < 26) {\n pages += 1;\n // eslint-disable-next-line no-await-in-loop\n $ = await Resource.create(next_page_url);\n html = $.html();\n\n const extractorOpts = {\n url: next_page_url,\n html,\n $,\n metaCache,\n extractedTitle: title,\n previousUrls,\n };\n\n const nextPageResult = RootExtractor.extract(Extractor, extractorOpts);\n\n previousUrls.push(next_page_url);\n result = {\n ...result,\n content: `${result.content}<hr><h4>Page ${pages}</h4>${\n nextPageResult.content\n }`,\n };\n\n // eslint-disable-next-line prefer-destructuring\n next_page_url = nextPageResult.next_page_url;\n }\n\n const word_count = GenericExtractor.word_count({\n content: `<div>${result.content}</div>`,\n });\n return {\n ...result,\n total_pages: pages,\n rendered_pages: pages,\n word_count,\n };\n}\n","import URL from 'url';\nimport cheerio from 'cheerio';\nimport TurndownService from 'turndown';\n\nimport Resource from 'resource';\nimport { validateUrl } from 'utils';\nimport addCustomExtractor from 'extractors/add-extractor';\nimport getExtractor from 'extractors/get-extractor';\nimport RootExtractor, { selectExtendedTypes } from 'extractors/root-extractor';\nimport collectAllPages from 'extractors/collect-all-pages';\n\nconst Parser = {\n async parse(url, { html, ...opts } = {}) {\n const {\n fetchAllPages = true,\n fallback = true,\n contentType = 'html',\n headers = {},\n extend,\n customExtractor,\n } = opts;\n\n // if no url was passed and this is the browser version,\n // set url to window.location.href and load the html\n // from the current page\n if (!url && cheerio.browser) {\n url = window.location.href; // eslint-disable-line no-undef\n html = html || cheerio.html();\n }\n\n const parsedUrl = URL.parse(url);\n\n if (!validateUrl(parsedUrl)) {\n return {\n error: true,\n message:\n 'The url parameter passed does not look like a valid URL. Please check your URL and try again.',\n };\n }\n\n const $ = await Resource.create(url, html, parsedUrl, headers);\n\n // If we found an error creating the resource, return that error\n if ($.failed) {\n return $;\n }\n\n // Add custom extractor via cli.\n if (customExtractor) {\n addCustomExtractor(customExtractor);\n }\n\n const Extractor = getExtractor(url, parsedUrl, $);\n // console.log(`Using extractor for ${Extractor.domain}`);\n\n // if html still has not been set (i.e., url passed to Parser.parse),\n // set html from the response of Resource.create\n if (!html) {\n html = $.html();\n }\n\n // Cached value of every meta name in our document.\n // Used when extracting title/author/date_published/dek\n const metaCache = $('meta')\n .map((_, node) => $(node).attr('name'))\n .toArray();\n\n let extendedTypes = {};\n if (extend) {\n extendedTypes = selectExtendedTypes(extend, { $, url, html });\n }\n\n let result = RootExtractor.extract(Extractor, {\n url,\n html,\n $,\n metaCache,\n parsedUrl,\n fallback,\n contentType,\n });\n\n const { title, next_page_url } = result;\n\n // Fetch more pages if next_page_url found\n if (fetchAllPages && next_page_url) {\n result = await collectAllPages({\n Extractor,\n next_page_url,\n html,\n $,\n metaCache,\n result,\n title,\n url,\n });\n } else {\n result = {\n ...result,\n total_pages: 1,\n rendered_pages: 1,\n };\n }\n\n if (contentType === 'markdown') {\n const turndownService = new TurndownService();\n result.content = turndownService.turndown(result.content);\n } else if (contentType === 'text') {\n result.content = $.text($(result.content));\n }\n\n return { ...result, ...extendedTypes };\n },\n\n browser: !!cheerio.browser,\n\n // A convenience method for getting a resource\n // to work with, e.g., for custom extractor generator\n fetchResource(url) {\n return Resource.create(url);\n },\n\n addExtractor(extractor) {\n return addCustomExtractor(extractor);\n },\n};\n\nexport default Parser;\n"],"names":["NORMALIZE_RE","normalizeSpaces","text","replace","trim","extractFromUrl","url","regexList","matchRe","find","re","test","exec","PAGE_IN_HREF_RE","RegExp","HAS_ALPHA_RE","IS_ALPHA_RE","IS_DIGIT_RE","ENCODING_RE","DEFAULT_ENCODING","pageNumFromUrl","matches","match","pageNum","removeAnchor","split","isGoodSegment","segment","index","firstSegmentHasLetters","goodSegment","length","toLowerCase","articleBaseUrl","parsed","parsedUrl","URL","parse","protocol","host","path","cleanedSegments","reverse","reduce","acc","rawSegment","includes","possibleSegment","fileExt","push","join","SENTENCE_END_RE","hasSentenceEnd","excerptContent","content","words","slice","getEncoding","str","encoding","iconv","encodingExists","REQUEST_HEADERS","cheerio","browser","FETCH_TIMEOUT","BAD_CONTENT_TYPES","BAD_CONTENT_TYPES_RE","MAX_CONTENT_LENGTH","get","options","resolve","reject","request","err","response","body","validateResponse","parseNon200","statusMessage","statusCode","Error","error","headers","contentType","contentLength","fetchResource","encodeURI","href","timeout","jar","gzip","followAllRedirects","window","followRedirect","message","convertMetaProp","$","from","to","each","_","node","$node","value","attr","removeAttr","normalizeMetaTags","SPACER_RE","KEEP_CLASS","KEEP_SELECTORS","STRIP_OUTPUT_TAGS","WHITELIST_ATTRS","WHITELIST_ATTRS_RE","CLEAN_CONDITIONALLY_TAGS","HEADER_TAGS","HEADER_TAG_LIST","UNLIKELY_CANDIDATES_BLACKLIST","UNLIKELY_CANDIDATES_WHITELIST","DIV_TO_P_BLOCK_TAGS","POSITIVE_SCORE_HINTS","POSITIVE_SCORE_RE","NEGATIVE_SCORE_HINTS","NEGATIVE_SCORE_RE","IS_WP_SELECTOR","PAGE_RE","BLOCK_LEVEL_TAGS","BLOCK_LEVEL_TAGS_RE","candidatesBlacklist","CANDIDATES_BLACKLIST","candidatesWhitelist","CANDIDATES_WHITELIST","stripUnlikelyCandidates","not","classes","id","classAndId","remove","brsToPs","collapsing","element","$element","nextElement","next","tagName","paragraphize","br","sibling","nextSibling","p","appendTo","replaceWith","convertDivs","div","$div","convertible","children","convertNodeTo","convertSpans","span","$span","parents","convertToParagraphs","tag","attrs","getAttrs","attribString","map","key","html","contents","cleanForHeight","$img","height","width","removeSpacers","cleanImages","$article","img","markToKeep","article","tags","hostname","addClass","stripJunkTags","cleanHOnes","$hOnes","removeAllButWhitelist","setAttrs","removeClass","cleanAttributes","parent","removeEmpty","$p","NON_TOP_CANDIDATE_TAGS","NON_TOP_CANDIDATE_TAGS_RE","HNEWS_CONTENT_SELECTORS","PHOTO_HINTS","PHOTO_HINTS_RE","READABILITY_ASSET","PARAGRAPH_SCORE_TAGS","CHILD_CONTENT_TAGS","BAD_TAGS","getWeight","score","getScore","scoreCommas","idkRe","scoreLength","textLength","chunks","lengthBonus","Math","min","max","scoreParagraph","setScore","addScore","amount","getOrInitScore","e","addToParent","weightNodes","scoreNode","addScoreTo","scorePs","$parent","rawScore","scoreContent","forEach","parentSelector","childSelector","mergeSiblings","$candidate","topScore","siblingScoreThreshold","wrappingDiv","$sibling","siblingScore","append","contentBonus","density","linkDensity","newScore","siblingContent","siblingContentLength","first","findTopCandidate","removeUnlessContent","weight","hasClass","pCount","inputCount","imgCount","nodeIsList","previousNode","prev","scriptCount","cleanTags","cleanHeaders","title","header","$header","prevAll","rewriteTopLevel","absolutize","rootUrl","baseUrl","absoluteUrl","setAttr","absolutizeSet","$content","urlSet","srcset","candidates","absoluteCandidates","candidate","parts","absoluteUrlSet","makeLinksAbsolute","totalTextLength","linkText","linkLength","extractFromMeta","metaNames","cachedNames","foundNames","filter","name","indexOf","type","nodes","values","toArray","metaValue","stripTags","isGoodNode","maxChildren","withinComment","extractFromSelectors","selectors","textOnly","selector","cleanText","commentParent","nodeClass","class","undefined","nodeIsSufficient","isWordpress","attribs","attributes","val","setAttribute","removeAttribute","IS_LINK","IMAGE_RE","IS_IMAGE","IS_SRCSET","TAGS_TO_REMOVE","convertLazyLoadedImages","extractSrcFromJSON","JSON","src","existingSrc","isComment","cleanComments","root","clean","Resource","create","preparedResponse","validResponse","result","alreadyDecoded","failed","generateDoc","encodeDoc","load","decodedContent","decode","contentTypeSelector","metaContentType","properEncoding","range","start","end","validateUrl","merge","extractor","domains","domain","mergeSupportedDomains","supportedDomains","apiExtractors","addExtractor","BloggerExtractor","transforms","noscript","author","date_published","NYMagExtractor","h1","$children","dek","WikipediaExtractor","defaultCleaner","prepend","TwitterExtractor","tweets","$tweetContainer","s","NYTimesExtractor","lead_image_url","next_page_url","excerpt","TheAtlanticExtractor","NewYorkerExtractor","timezone","WiredExtractor","MSNExtractor","YahooExtractor","BuzzfeedExtractor","h2","has","WikiaExtractor","LittleThingsExtractor","PoliticoExtractor","DeadspinExtractor","youtubeId","BroadwayWorldExtractor","ApartmentTherapyExtractor","data","sources","MediumExtractor","$text","iframe","ytRe","thumb","decodeURIComponent","$caption","empty","figure","WwwTmzComExtractor","WwwWashingtonpostComExtractor","WwwHuffingtonpostComExtractor","NewrepublicComExtractor","MoneyCnnComExtractor","WwwThevergeComExtractor","WwwCnnComExtractor","WwwAolComExtractor","WwwYoutubeComExtractor","videoId","description","WwwTheguardianComExtractor","WwwSbnationComExtractor","WwwBloombergComExtractor","WwwBustleComExtractor","WwwNprOrgExtractor","WwwRecodeNetExtractor","QzComExtractor","WwwDmagazineComExtractor","format","WwwReutersComExtractor","MashableComExtractor","WwwChicagotribuneComExtractor","WwwVoxComExtractor","imgHtml","NewsNationalgeographicComExtractor","$imgSrc","WwwNationalgeographicComExtractor","$imageParent","$dataAttrContainer","imgPath1","imgPath2","WwwLatimesComExtractor","$figure","PagesixComExtractor","ThefederalistpapersOrgExtractor","WwwCbssportsComExtractor","WwwMsnbcComExtractor","WwwThepoliticalinsiderComExtractor","WwwMentalflossComExtractor","AbcnewsGoComExtractor","WwwNydailynewsComExtractor","WwwCnbcComExtractor","WwwPopsugarComExtractor","ObserverComExtractor","PeopleComExtractor","WwwUsmagazineComExtractor","WwwRollingstoneComExtractor","twofortysevensportsComExtractor","UproxxComExtractor","WwwEonlineComExtractor","WwwMiamiheraldComExtractor","WwwRefinery29ComExtractor","WwwMacrumorsComExtractor","WwwAndroidcentralComExtractor","WwwSiComExtractor","WwwRawstoryComExtractor","WwwCnetComExtractor","WwwTodayComExtractor","WwwAlComExtractor","WwwThepennyhoarderComExtractor","WwwWesternjournalismComExtractor","WwwAmericanowComExtractor","ScienceflyComExtractor","HellogigglesComExtractor","ThoughtcatalogComExtractor","WwwInquisitrComExtractor","WwwNbcnewsComExtractor","FortuneComExtractor","WwwLinkedinComExtractor","ObamawhitehouseArchivesGovExtractor","WwwOpposingviewsComExtractor","WwwProspectmagazineCoUkExtractor","ForwardComExtractor","WwwQdailyComExtractor","GothamistComExtractor","WwwFoolComExtractor","WwwSlateComExtractor","IciRadioCanadaCaExtractor","WwwFortinetComExtractor","WwwFastcompanyComExtractor","BlisterreviewComExtractor","figcaption","NewsMynaviJpExtractor","ClinicaltrialsGovExtractor","GithubComExtractor","WwwRedditComExtractor","bgImg","css","OtrsComExtractor","WwwOssnewsJpExtractor","BuzzapJpExtractor","WwwAsahiComExtractor","WwwSanwaCoJpExtractor","WwwElecomCoJpExtractor","table","ScanNetsecurityNeJpExtractor","JvndbJvnJpExtractor","GeniusComExtractor","res","json","song","release_date","album","cover_art_url","WwwJnsaOrgExtractor","PhpspotOrgExtractor","WwwInfoqComExtractor","WwwMoongiftJpExtractor","WwwItmediaCoJpExtractor","WwwPublickey1JpExtractor","TakagihiromitsuJpExtractor","BookwalkerJpExtractor","WwwYomiuriCoJpExtractor","JapanCnetComExtractor","DeadlineComExtractor","innerHtml","WwwGizmodoJpExtractor","GetnewsJpExtractor","WwwLifehackerJpExtractor","SectIijAdJpExtractor","WwwOreillyCoJpExtractor","WwwIpaGoJpExtractor","WeeklyAsciiJpExtractor","TechlogIijAdJpExtractor","WiredJpExtractor","dataOriginal","JapanZdnetComExtractor","WwwRbbtodayComExtractor","WwwLemondeFrExtractor","WwwPhoronixComExtractor","PitchforkComExtractor","extend","BiorxivOrgExtractor","EpaperZeitDeExtractor","byline","linkbox","WwwLadbibleComExtractor","TimesofindiaIndiatimesComExtractor","reporter","MaTtiasBeExtractor","after","ul","PastebinComExtractor","ol","li","WwwAbendblattDeExtractor","o","n","i","r","charCodeAt","String","fromCharCode","WwwGrueneDeExtractor","WwwEngadgetComExtractor","ArstechnicaComExtractor","before","WwwNdtvComExtractor","SpektrumExtractor","PostlightComExtractor","WwwInvestmentexecutiveComExtractor","WwwCbcCaExtractor","CustomExtractors","CLEAN_AUTHOR_RE","TEXT_LINK_RE","MS_DATE_STRING","SEC_DATE_STRING","CLEAN_DATE_STRING_RE","TIME_MERIDIAN_SPACE_RE","TIME_MERIDIAN_DOTS_RE","TIME_NOW_STRING","timeUnits","allTimeUnits","TIME_AGO_STRING","months","allMonths","timestamp1","timestamp2","timestamp3","SPLIT_DATE_STRING","TIME_WITH_OFFSET_RE","TITLE_SPLITTERS_RE","DOMAIN_ENDINGS_RE","cleanAuthor","leadImageUrl","validUrl","isWebUri","cleanDek","dekText","cleanDateString","dateString","createDate","moment","Date","fragments","subtract","tz","parseFormat","cleanDatePublished","toISOString","date","isValid","extractCleanNode","cleanConditionally","cleanTitle","resolveSplitTitle","extractBreadcrumbTitle","splitTitle","termCounts","titleText","maxTerm","termCount","splitEnds","longestEnd","cleanDomainFromTitle","nakedDomain","startSlug","startSlugRatio","wuzzy","levenshtein","endSlug","endSlugRatio","newTitle","Cleaners","cleanImage","cleanContent","extractBestNode","opts","$topCandidate","GenericContentExtractor","defaultOpts","extract","getContentNode","cleanAndReturnNode","k","STRONG_TITLE_META_TAGS","WEAK_TITLE_META_TAGS","STRONG_TITLE_SELECTORS","WEAK_TITLE_SELECTORS","GenericTitleExtractor","metaCache","AUTHOR_META_TAGS","AUTHOR_MAX_LENGTH","AUTHOR_SELECTORS","bylineRe","BYLINE_SELECTORS_RE","GenericAuthorExtractor","regex","DATE_PUBLISHED_META_TAGS","DATE_PUBLISHED_SELECTORS","abbrevMonthsStr","DATE_PUBLISHED_URL_RES","GenericDatePublishedExtractor","datePublished","GenericDekExtractor","LEAD_IMAGE_URL_META_TAGS","LEAD_IMAGE_URL_SELECTORS","POSITIVE_LEAD_IMAGE_URL_HINTS","POSITIVE_LEAD_IMAGE_URL_HINTS_RE","NEGATIVE_LEAD_IMAGE_URL_HINTS","NEGATIVE_LEAD_IMAGE_URL_HINTS_RE","GIF_RE","JPG_RE","getSig","scoreImageUrl","scoreAttr","scoreByParents","$figParent","$gParent","scoreBySibling","scoreByDimensions","area","round","scoreByPosition","$imgs","GenericLeadImageUrlExtractor","cleanUrl","imageUrl","imgs","imgScores","topUrl","scoreSimilarity","articleUrl","similarity","difflib","SequenceMatcher","ratio","diffPercent","diffModifier","scoreLinkText","linkTextAsNum","scorePageInLink","isWp","DIGIT_RE","EXTRANEOUS_LINK_HINTS","EXTRANEOUS_LINK_HINTS_RE","NEXT_LINK_TEXT_RE","CAP_LINK_TEXT_RE","PREV_LINK_TEXT_RE","scoreExtraneousLinks","makeSig","$link","positiveMatch","negativeMatch","parentData","scorePrevLink","linkData","shouldScore","previousUrls","linkHost","fragment","scoreBaseUrl","baseRegex","scoreNextLinkText","scoreCapLinks","makeBaseRegex","scoreLinks","links","scoredPages","possiblePages","link","possiblePage","GenericNextPageUrlExtractor","scoredLinks","topPage","scoredLink","CANONICAL_META_SELECTORS","parseDomain","GenericUrlExtractor","$canonical","metaUrl","EXCERPT_META_SELECTORS","maxLength","ellipsize","ellipse","GenericExcerptExtractor","shortContent","getWordCount","getWordCountAlt","GenericWordCountExtractor","count","GenericExtractor","bind","url_and_domain","word_count","direction","stringDirection","getDirection","loaded","Detectors","detectByHtml","getExtractor","baseDomain","Extractors","cleanBySelectors","transformElements","$matches","findMatchingSelector","extractHtml","allowMultiple","select","extractionOpts","overrideAllowMultiple","matchingSelector","transformAndClean","selectHtml","$wrapper","wrap","el","$match","transform","item","selectExtendedTypes","results","t","extractResult","fallback","RootExtractor","contentOnly","extractedTitle","extendedResults","collectAllPages","Extractor","pages","extractorOpts","nextPageResult","total_pages","rendered_pages","Parser","fetchAllPages","customExtractor","location","addCustomExtractor","extendedTypes","turndownService","TurndownService","turndown"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAMA,YAAY,GAAG,0CAArB;AAEA,AAAe,SAASC,eAAT,CAAyBC,IAAzB,EAA+B;SACrCA,IAAI,CAACC,OAAL,CAAaH,YAAb,EAA2B,GAA3B,EAAgCI,IAAhC,EAAP;;;ACHF;;;;;AAKA,AAAe,SAASC,cAAT,CAAwBC,GAAxB,EAA6BC,SAA7B,EAAwC;MAC/CC,OAAO,GAAGD,SAAS,CAACE,IAAV,CAAe,UAAAC,EAAE;WAAIA,EAAE,CAACC,IAAH,CAAQL,GAAR,CAAJ;GAAjB,CAAhB;;MACIE,OAAJ,EAAa;WACJA,OAAO,CAACI,IAAR,CAAaN,GAAb,EAAkB,CAAlB,CAAP;;;SAGK,IAAP;;;ACXF;;;;;;;;;;;;;;;;AAgBA,AAAO,IAAMO,eAAe,GAAG,IAAIC,MAAJ,CAC7B,0EAD6B,EAE7B,GAF6B,CAAxB;AAKP,AAAO,IAAMC,YAAY,GAAG,QAArB;AAEP,AAAO,IAAMC,WAAW,GAAG,WAApB;AACP,AAAO,IAAMC,WAAW,GAAG,WAApB;AAEP,AAAO,IAAMC,WAAW,GAAG,oBAApB;AACP,AAAO,IAAMC,gBAAgB,GAAG,OAAzB;;ACzBQ,SAASC,cAAT,CAAwBd,GAAxB,EAA6B;MACpCe,OAAO,GAAGf,GAAG,CAACgB,KAAJ,CAAUT,eAAV,CAAhB;MACI,CAACQ,OAAL,EAAc,OAAO,IAAP;;MAERE,OAAO,GAAG,UAASF,OAAO,CAAC,CAAD,CAAhB,EAAqB,EAArB,CAAhB,CAJ0C;;;;SAQnCE,OAAO,GAAG,GAAV,GAAgBA,OAAhB,GAA0B,IAAjC;;;ACVa,SAASC,YAAT,CAAsBlB,GAAtB,EAA2B;SACjCA,GAAG,CAACmB,KAAJ,CAAU,GAAV,EAAe,CAAf,EAAkBtB,OAAlB,CAA0B,KAA1B,EAAiC,EAAjC,CAAP;;;ACQF,SAASuB,aAAT,CAAuBC,OAAvB,EAAgCC,KAAhC,EAAuCC,sBAAvC,EAA+D;MACzDC,WAAW,GAAG,IAAlB,CAD6D;;;MAKzDF,KAAK,GAAG,CAAR,IAAaX,WAAW,CAACN,IAAZ,CAAiBgB,OAAjB,CAAb,IAA0CA,OAAO,CAACI,MAAR,GAAiB,CAA/D,EAAkE;IAChED,WAAW,GAAG,IAAd;GAN2D;;;;MAWzDF,KAAK,KAAK,CAAV,IAAeD,OAAO,CAACK,WAAR,OAA0B,OAA7C,EAAsD;IACpDF,WAAW,GAAG,KAAd;GAZ2D;;;;MAiBzDF,KAAK,GAAG,CAAR,IAAaD,OAAO,CAACI,MAAR,GAAiB,CAA9B,IAAmC,CAACF,sBAAxC,EAAgE;IAC9DC,WAAW,GAAG,KAAd;;;SAGKA,WAAP;;;;;;AAMF,AAAe,SAASG,cAAT,CAAwB3B,GAAxB,EAA6B4B,MAA7B,EAAqC;MAC5CC,SAAS,GAAGD,MAAM,IAAIE,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CAA5B;MACQgC,QAF0C,GAEjBH,SAFiB,CAE1CG,QAF0C;MAEhCC,IAFgC,GAEjBJ,SAFiB,CAEhCI,IAFgC;MAE1BC,IAF0B,GAEjBL,SAFiB,CAE1BK,IAF0B;MAI9CX,sBAAsB,GAAG,KAA7B;MACMY,eAAe,GAAGD,IAAI,CACzBf,KADqB,CACf,GADe,EAErBiB,OAFqB,GAGrBC,MAHqB,CAGd,UAACC,GAAD,EAAMC,UAAN,EAAkBjB,KAAlB,EAA4B;QAC9BD,OAAO,GAAGkB,UAAd,CADkC;;QAI9BlB,OAAO,CAACmB,QAAR,CAAiB,GAAjB,CAAJ,EAA2B;2BACUnB,OAAO,CAACF,KAAR,CAAc,GAAd,CADV;;UAClBsB,eADkB;UACDC,OADC;;UAErBhC,WAAW,CAACL,IAAZ,CAAiBqC,OAAjB,CAAJ,EAA+B;QAC7BrB,OAAO,GAAGoB,eAAV;;KAP8B;;;;QAa9BlC,eAAe,CAACF,IAAhB,CAAqBgB,OAArB,KAAiCC,KAAK,GAAG,CAA7C,EAAgD;MAC9CD,OAAO,GAAGA,OAAO,CAACxB,OAAR,CAAgBU,eAAhB,EAAiC,EAAjC,CAAV;KAdgC;;;;;;QAqB9Be,KAAK,KAAK,CAAd,EAAiB;MACfC,sBAAsB,GAAGd,YAAY,CAACJ,IAAb,CAAkBgB,OAAlB,CAAzB;KAtBgC;;;QA0B9BD,aAAa,CAACC,OAAD,EAAUC,KAAV,EAAiBC,sBAAjB,CAAjB,EAA2D;MACzDe,GAAG,CAACK,IAAJ,CAAStB,OAAT;;;WAGKiB,GAAP;GAjCoB,EAkCnB,EAlCmB,CAAxB;mBAoCUN,QAAV,eAAuBC,IAAvB,SAA8BE,eAAe,CAACC,OAAhB,GAA0BQ,IAA1B,CAA+B,GAA/B,CAA9B;;;AC7EF;;AAEA,IAAMC,eAAe,GAAG,IAAIrC,MAAJ,CAAW,QAAX,CAAxB;AACA,AAAe,SAASsC,cAAT,CAAwBlD,IAAxB,EAA8B;SACpCiD,eAAe,CAACxC,IAAhB,CAAqBT,IAArB,CAAP;;;ACJa,SAASmD,cAAT,CAAwBC,OAAxB,EAA6C;MAAZC,KAAY,uEAAJ,EAAI;SACnDD,OAAO,CACXlD,IADI,GAEJqB,KAFI,CAEE,KAFF,EAGJ+B,KAHI,CAGE,CAHF,EAGKD,KAHL,EAIJL,IAJI,CAIC,GAJD,CAAP;;;ACGF;;;AAEA,AAAe,SAASO,WAAT,CAAqBC,GAArB,EAA0B;MACnCC,QAAQ,GAAGxC,gBAAf;MACME,OAAO,GAAGH,WAAW,CAACN,IAAZ,CAAiB8C,GAAjB,CAAhB;;MACIrC,OAAO,KAAK,IAAhB,EAAsB;kCACVA,OADU;;IACjBqC,GADiB;;;MAGlBE,KAAK,CAACC,cAAN,CAAqBH,GAArB,CAAJ,EAA+B;IAC7BC,QAAQ,GAAGD,GAAX;;;SAEKC,QAAP;;;ACZK,IAAMG,eAAe,GAAGC,OAAO,CAACC,OAAR,GAC3B,EAD2B,GAE3B;gBAEI;CAJD;;AAQP,AAAO,IAAMC,aAAa,GAAG,KAAtB;;AAGP,IAAMC,iBAAiB,GAAG,CACxB,YADwB,EAExB,WAFwB,EAGxB,YAHwB,EAIxB,WAJwB,CAA1B;AAOA,AAAO,IAAMC,oBAAoB,GAAG,IAAIrD,MAAJ,aAC7BoD,iBAAiB,CAAChB,IAAlB,CAAuB,GAAvB,CAD6B,SAElC,GAFkC,CAA7B;;;AAOP,AAAO,IAAMkB,kBAAkB,GAAG,OAA3B;;AClBP,SAASC,GAAT,CAAaC,OAAb,EAAsB;SACb,aAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;IACtCC,OAAO,CAACH,OAAD,EAAU,UAACI,GAAD,EAAMC,QAAN,EAAgBC,IAAhB,EAAyB;UACpCF,GAAJ,EAAS;QACPF,MAAM,CAACE,GAAD,CAAN;OADF,MAEO;QACLH,OAAO,CAAC;UAAEK,IAAI,EAAJA,IAAF;UAAQD,QAAQ,EAARA;SAAT,CAAP;;KAJG,CAAP;GADK,CAAP;;;;;;;AAgBF,AAAO,SAASE,gBAAT,CAA0BF,QAA1B,EAAyD;MAArBG,WAAqB,uEAAP,KAAO;;;;;;;;MAQ3DH,QAAQ,CAACI,aAAT,IAA0BJ,QAAQ,CAACI,aAAT,KAA2B,IAAtD,IACAJ,QAAQ,CAACK,UAAT,KAAwB,GAF1B,EAGE;QACI,CAACL,QAAQ,CAACK,UAAd,EAA0B;YAClB,IAAIC,KAAJ,2DAC+CN,QAAQ,CAACO,KADxD,EAAN;KADF,MAIO,IAAI,CAACJ,WAAL,EAAkB;YACjB,IAAIG,KAAJ,uDAEFN,QAAQ,CAACK,UAFP,kEAAN;;;;0BAWAL,QAAQ,CAACQ,OA3BiD;MAyB5CC,WAzB4C,qBAyB5D,cAzB4D;MA0B1CC,aA1B0C,qBA0B5D,gBA1B4D;;MA8B1DlB,oBAAoB,CAACxD,IAArB,CAA0ByE,WAA1B,CAAJ,EAA4C;UACpC,IAAIH,KAAJ,8CACkCG,WADlC,0BAAN;GA/B4D;;;MAqC1DC,aAAa,GAAGjB,kBAApB,EAAwC;UAChC,IAAIa,KAAJ,8EACkEb,kBADlE,OAAN;;;SAKK,IAAP;;AAIF,AASA;;;;;AAKA,SAA8BkB,aAA9B;;;;;;;2BAAe,iBAA6BhF,GAA7B,EAAkC6B,SAAlC;;;;;;;;;;;;YAA6CgD,OAA7C,2DAAuD,EAAvD;YACbhD,SAAS,GAAGA,SAAS,IAAIC,GAAG,CAACC,KAAJ,CAAUkD,SAAS,CAACjF,GAAD,CAAnB,CAAzB;YACMgE,OAFO;cAGXhE,GAAG,EAAE6B,SAAS,CAACqD,IAHJ;cAIXL,OAAO,oBAAOrB,eAAP,EAA2BqB,OAA3B,CAJI;cAKXM,OAAO,EAAExB,aALE;;cAOXyB,GAAG,EAAE,IAPM;;;cAUX/B,QAAQ,EAAE,IAVC;;cAYXgC,IAAI,EAAE,IAZK;;cAcXC,kBAAkB,EAAE;eAChB,OAAOC,MAAP,KAAkB,WAAlB,GACA,EADA,GAEA;;cAEEC,cAAc,EAAE;aAnBX;;mBAuBoBzB,GAAG,CAACC,OAAD,CAvBvB;;;;YAuBLK,QAvBK,SAuBLA,QAvBK;YAuBKC,IAvBL,SAuBKA,IAvBL;;YA0BXC,gBAAgB,CAACF,QAAD,CAAhB;6CACO;cACLC,IAAI,EAAJA,IADK;cAELD,QAAQ,EAARA;aA7BS;;;;;6CAgCJ;cACLO,KAAK,EAAE,IADF;cAELa,OAAO,EAAE,YAAEA;aAlCF;;;;;;;;;;;;ACxFf,SAASC,eAAT,CAAyBC,CAAzB,EAA4BC,IAA5B,EAAkCC,EAAlC,EAAsC;EACpCF,CAAC,gBAASC,IAAT,OAAD,CAAmBE,IAAnB,CAAwB,UAACC,CAAD,EAAIC,IAAJ,EAAa;QAC7BC,KAAK,GAAGN,CAAC,CAACK,IAAD,CAAf;QAEME,KAAK,GAAGD,KAAK,CAACE,IAAN,CAAWP,IAAX,CAAd;IACAK,KAAK,CAACE,IAAN,CAAWN,EAAX,EAAeK,KAAf;IACAD,KAAK,CAACG,UAAN,CAAiBR,IAAjB;GALF;SAQOD,CAAP;;;;;;;;;AAUF,AAAe,SAASU,iBAAT,CAA2BV,CAA3B,EAA8B;EAC3CA,CAAC,GAAGD,eAAe,CAACC,CAAD,EAAI,SAAJ,EAAe,OAAf,CAAnB;EACAA,CAAC,GAAGD,eAAe,CAACC,CAAD,EAAI,UAAJ,EAAgB,MAAhB,CAAnB;SACOA,CAAP;;;ACtBF;AACA,AAAO,IAAMW,SAAS,GAAG,IAAI9F,MAAJ,CAAW,0BAAX,EAAuC,GAAvC,CAAlB;;;AAIP,AAAO,IAAM+F,UAAU,GAAG,qBAAnB;AAEP,AAAO,IAAMC,cAAc,GAAG,CAC5B,wCAD4B,EAE5B,iDAF4B,EAG5B,uCAH4B,EAI5B,qCAJ4B,EAK5B,oCAL4B,EAM5B,4CAN4B,CAAvB;;AAUP,AAAO,IAAMC,iBAAiB,GAAG,CAC/B,OAD+B,EAE/B,QAF+B,EAG/B,UAH+B,EAI/B,MAJ+B,EAK/B,OAL+B,EAM/B,IAN+B,EAO/B,OAP+B,EAQ/B,QAR+B,EAS/B,QAT+B,CAA1B;AAkBA,IAAMC,eAAe,GAAG,CAC7B,KAD6B,EAE7B,QAF6B,EAG7B,OAH6B,EAI7B,MAJ6B,EAK7B,MAL6B,EAM7B,OAN6B,EAO7B,IAP6B,EAQ7B,KAR6B,EAS7B,YAT6B,EAU7B,OAV6B,EAW7B,QAX6B,CAAxB;AAcP,AAAO,IAAMC,kBAAkB,GAAG,IAAInG,MAAJ,aAC3BkG,eAAe,CAAC9D,IAAhB,CAAqB,GAArB,CAD2B,SAEhC,GAFgC,CAA3B;;AAYP,AAAO,IAAMgE,wBAAwB,GAAG,CACtC,IADsC,EAEtC,IAFsC,EAGtC,OAHsC,EAItC,KAJsC,EAKtC,QALsC,EAMtC,MANsC,EAOtChE,IAPsC,CAOjC,GAPiC,CAAjC;;AAUP,IAAMiE,WAAW,GAAG,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,CAApB;AACA,AAAO,IAAMC,eAAe,GAAGD,WAAW,CAACjE,IAAZ,CAAiB,GAAjB,CAAxB;;;;;;AAQP,AAAO,IAAMmE,6BAA6B,GAAG,CAC3C,UAD2C,EAE3C,OAF2C,EAG3C,QAH2C,EAI3C,SAJ2C,EAK3C,SAL2C,EAM3C,KAN2C,EAO3C,gBAP2C,EAQ3C,OAR2C,EAS3C,SAT2C,EAU3C,cAV2C,EAW3C,QAX2C,EAY3C,iBAZ2C,EAa3C,OAb2C,EAc3C,MAd2C;AAgB3C,QAhB2C,EAiB3C,QAjB2C,EAkB3C,QAlB2C,EAmB3C,OAnB2C;AAoB3C,MApB2C,EAqB3C,MArB2C,EAsB3C,KAtB2C,EAuB3C,UAvB2C,EAwB3C,OAxB2C,EAyB3C,YAzB2C,EA0B3C,UA1B2C;AA2B3C,2BA3B2C;AA4B3C,OA5B2C,EA6B3C,eA7B2C,EA8B3C,SA9B2C,EA+B3C,QA/B2C,EAgC3C,QAhC2C,EAiC3C,KAjC2C,EAkC3C,OAlC2C,EAmC3C,UAnC2C,EAoC3C,SApC2C,EAqC3C,UArC2C,EAsC3C,SAtC2C,EAuC3C,SAvC2C,EAwC3C,OAxC2C,CAAtC;;;;;;;;;;;;AAsDP,AAAO,IAAMC,6BAA6B,GAAG,CAC3C,KAD2C,EAE3C,SAF2C,EAG3C,MAH2C,EAI3C,WAJ2C,EAK3C,QAL2C,EAM3C,SAN2C,EAO3C,qBAP2C,EAQ3C,QAR2C;AAS3C,OAT2C,EAU3C,QAV2C,EAW3C,OAX2C,EAY3C,MAZ2C,EAa3C,MAb2C,EAc3C,OAd2C,EAe3C,QAf2C,CAAtC;;;;AAqBP,AAAO,IAAMC,mBAAmB,GAAG,CACjC,GADiC,EAEjC,YAFiC,EAGjC,IAHiC,EAIjC,KAJiC,EAKjC,KALiC,EAMjC,GANiC,EAOjC,KAPiC,EAQjC,OARiC,EASjCrE,IATiC,CAS5B,GAT4B,CAA5B;AAYP,AAqCA;;;;AAGA,AAAO,IAAMsE,oBAAoB,GAAG,CAClC,SADkC,EAElC,gBAFkC,EAGlC,iBAHkC,EAIlC,MAJkC,EAKlC,MALkC,EAMlC,SANkC,EAOlC,qBAPkC,EAQlC,OARkC,EASlC,QATkC,EAUlC,MAVkC,EAWlC,QAXkC,EAYlC,MAZkC,EAalC,YAbkC,EAclC,WAdkC,EAelC,MAfkC,EAgBlC,OAhBkC,EAiBlC,MAjBkC,EAkBlC,UAlBkC;AAmBlC,SAnBkC,CAA7B;;AAuBP,AAAO,IAAMC,iBAAiB,GAAG,IAAI3G,MAAJ,CAC/B0G,oBAAoB,CAACtE,IAArB,CAA0B,GAA1B,CAD+B,EAE/B,GAF+B,CAA1B;AASP;;;;AAGA,AAAO,IAAMwE,oBAAoB,GAAG,CAClC,OADkC,EAElC,QAFkC,EAGlC,QAHkC,EAIlC,KAJkC,EAKlC,UALkC,EAMlC,QANkC,EAOlC,QAPkC,EAQlC,OARkC,EASlC,MATkC,EAUlC,OAVkC,EAWlC,SAXkC,EAYlC,YAZkC,EAalC,SAbkC,EAclC,MAdkC,EAelC,QAfkC,EAgBlC,OAhBkC,EAiBlC,MAjBkC,EAkBlC,MAlBkC,EAmBlC,SAnBkC,EAoBlC,UApBkC;AAqBlC,MArBkC,EAsBlC,QAtBkC,EAuBlC,UAvBkC,EAwBlC,MAxBkC,EAyBlC,MAzBkC,EA0BlC,MA1BkC,EA2BlC,UA3BkC;AA4BlC,mBA5BkC,EA6BlC,MA7BkC,EA8BlC,WA9BkC,EA+BlC,MA/BkC,EAgClC,UAhCkC,EAiClC,OAjCkC,EAkClC,MAlCkC,EAmClC,OAnCkC,EAoClC,UApCkC;AAqClC,OArCkC,EAsClC,KAtCkC;AAuClC,SAvCkC,EAwClC,SAxCkC,EAyClC,cAzCkC;AA0ClC,QA1CkC,EA2ClC,WA3CkC,EA4ClC,OA5CkC,EA6ClC,UA7CkC,EA8ClC,UA9CkC,EA+ClC,MA/CkC,EAgDlC,SAhDkC,EAiDlC,SAjDkC,EAkDlC,OAlDkC,EAmDlC,KAnDkC,EAoDlC,SApDkC,EAqDlC,MArDkC,EAsDlC,OAtDkC,EAuDlC,QAvDkC,CAA7B;;AA0DP,AAAO,IAAMC,iBAAiB,GAAG,IAAI7G,MAAJ,CAC/B4G,oBAAoB,CAACxE,IAArB,CAA0B,GAA1B,CAD+B,EAE/B,GAF+B,CAA1B;;AAMP,AAAO,IAAM0E,cAAc,GAAG,wCAAvB;;AA6BP,AAAO,IAAMC,OAAO,GAAG,IAAI/G,MAAJ,CAAW,iBAAX,EAA8B,GAA9B,CAAhB;AAGP,AAoBA;;AACA,AAAO,IAAMgH,gBAAgB,GAAG,CAC9B,SAD8B,EAE9B,OAF8B,EAG9B,YAH8B,EAI9B,MAJ8B,EAK9B,IAL8B,EAM9B,QAN8B,EAO9B,QAP8B,EAQ9B,SAR8B,EAS9B,KAT8B,EAU9B,UAV8B,EAW9B,IAX8B,EAY9B,KAZ8B,EAa9B,IAb8B,EAc9B,IAd8B,EAe9B,OAf8B,EAgB9B,UAhB8B,EAiB9B,YAjB8B,EAkB9B,QAlB8B,EAmB9B,QAnB8B,EAoB9B,MApB8B,EAqB9B,IArB8B,EAsB9B,IAtB8B,EAuB9B,IAvB8B,EAwB9B,IAxB8B,EAyB9B,IAzB8B,EA0B9B,IA1B8B,EA2B9B,QA3B8B,EA4B9B,QA5B8B,EA6B9B,IA7B8B,EA8B9B,IA9B8B,EA+B9B,KA/B8B,EAgC9B,QAhC8B,EAiC9B,IAjC8B,EAkC9B,QAlC8B,EAmC9B,GAnC8B,EAoC9B,KApC8B,EAqC9B,UArC8B,EAsC9B,SAtC8B,EAuC9B,OAvC8B,EAwC9B,OAxC8B,EAyC9B,UAzC8B,EA0C9B,OA1C8B,EA2C9B,IA3C8B,EA4C9B,OA5C8B,EA6C9B,IA7C8B,EA8C9B,IA9C8B,EA+C9B,OA/C8B,CAAzB;AAiDP,AAAO,IAAMC,mBAAmB,GAAG,IAAIjH,MAAJ,aAC5BgH,gBAAgB,CAAC5E,IAAjB,CAAsB,GAAtB,CAD4B,SAEjC,GAFiC,CAA5B;;;;;AASP,IAAM8E,mBAAmB,GAAGX,6BAA6B,CAACnE,IAA9B,CAAmC,GAAnC,CAA5B;AACA,AAAO,IAAM+E,oBAAoB,GAAG,IAAInH,MAAJ,CAAWkH,mBAAX,EAAgC,GAAhC,CAA7B;AAEP,IAAME,mBAAmB,GAAGZ,6BAA6B,CAACpE,IAA9B,CAAmC,GAAnC,CAA5B;AACA,AAAO,IAAMiF,oBAAoB,GAAG,IAAIrH,MAAJ,CAAWoH,mBAAX,EAAgC,GAAhC,CAA7B;;ACnaQ,SAASE,uBAAT,CAAiCnC,CAAjC,EAAoC;;;;;;;;;;EAUjDA,CAAC,CAAC,GAAD,CAAD,CACGoC,GADH,CACO,GADP,EAEGjC,IAFH,CAEQ,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;QACfC,KAAK,GAAGN,CAAC,CAACK,IAAD,CAAf;QACMgC,OAAO,GAAG/B,KAAK,CAACE,IAAN,CAAW,OAAX,CAAhB;QACM8B,EAAE,GAAGhC,KAAK,CAACE,IAAN,CAAW,IAAX,CAAX;QACI,CAAC8B,EAAD,IAAO,CAACD,OAAZ,EAAqB;QAEfE,UAAU,aAAMF,OAAO,IAAI,EAAjB,cAAuBC,EAAE,IAAI,EAA7B,CAAhB;;QACIJ,oBAAoB,CAACxH,IAArB,CAA0B6H,UAA1B,CAAJ,EAA2C;;;;QAGvCP,oBAAoB,CAACtH,IAArB,CAA0B6H,UAA1B,CAAJ,EAA2C;MACzCjC,KAAK,CAACkC,MAAN;;GAbN;SAiBOxC,CAAP;;;AC1BF;;;;;;;AAQA,AAAe,SAASyC,UAAT,CAAiBzC,CAAjB,EAAoB;MAC7B0C,UAAU,GAAG,KAAjB;EACA1C,CAAC,CAAC,IAAD,CAAD,CAAQG,IAAR,CAAa,UAACxE,KAAD,EAAQgH,OAAR,EAAoB;QACzBC,QAAQ,GAAG5C,CAAC,CAAC2C,OAAD,CAAlB;QACME,WAAW,GAAGD,QAAQ,CAACE,IAAT,GAAgB1E,GAAhB,CAAoB,CAApB,CAApB;;QAEIyE,WAAW,IAAIA,WAAW,CAACE,OAAZ,CAAoBhH,WAApB,OAAsC,IAAzD,EAA+D;MAC7D2G,UAAU,GAAG,IAAb;MACAE,QAAQ,CAACJ,MAAT;KAFF,MAGO,IAAIE,UAAJ,EAAgB;MACrBA,UAAU,GAAG,KAAb;MACAM,YAAY,CAACL,OAAD,EAAU3C,CAAV,EAAa,IAAb,CAAZ;;GATJ;SAaOA,CAAP;;;ACvBF;;;;;;;;;;AAUA,AAAe,SAASgD,YAAT,CAAsB3C,IAAtB,EAA4BL,CAA5B,EAA2C;MAAZiD,EAAY,uEAAP,KAAO;MAClD3C,KAAK,GAAGN,CAAC,CAACK,IAAD,CAAf;;MAEI4C,EAAJ,EAAQ;QACFC,OAAO,GAAG7C,IAAI,CAAC8C,WAAnB;QACMC,CAAC,GAAGpD,CAAC,CAAC,SAAD,CAAX,CAFM;;;WAOJkD,OAAO,IACP,EAAEA,OAAO,CAACH,OAAR,IAAmBjB,mBAAmB,CAACpH,IAApB,CAAyBwI,OAAO,CAACH,OAAjC,CAArB,CAFF,EAGE;qBACwBG,OADxB;UACQC,WADR,YACQA,WADR;MAEAnD,CAAC,CAACkD,OAAD,CAAD,CAAWG,QAAX,CAAoBD,CAApB;MACAF,OAAO,GAAGC,WAAV;;;IAGF7C,KAAK,CAACgD,WAAN,CAAkBF,CAAlB;IACA9C,KAAK,CAACkC,MAAN;WACOxC,CAAP;;;SAGKA,CAAP;;;AChCF,SAASuD,WAAT,CAAqBvD,CAArB,EAAwB;EACtBA,CAAC,CAAC,KAAD,CAAD,CAASG,IAAT,CAAc,UAACxE,KAAD,EAAQ6H,GAAR,EAAgB;QACtBC,IAAI,GAAGzD,CAAC,CAACwD,GAAD,CAAd;QACME,WAAW,GAAGD,IAAI,CAACE,QAAL,CAAcrC,mBAAd,EAAmCxF,MAAnC,KAA8C,CAAlE;;QAEI4H,WAAJ,EAAiB;MACfE,gBAAa,CAACH,IAAD,EAAOzD,CAAP,EAAU,GAAV,CAAb;;GALJ;SASOA,CAAP;;;AAGF,SAAS6D,YAAT,CAAsB7D,CAAtB,EAAyB;EACvBA,CAAC,CAAC,MAAD,CAAD,CAAUG,IAAV,CAAe,UAACxE,KAAD,EAAQmI,IAAR,EAAiB;QACxBC,KAAK,GAAG/D,CAAC,CAAC8D,IAAD,CAAf;QACMJ,WAAW,GAAGK,KAAK,CAACC,OAAN,CAAc,wBAAd,EAAwClI,MAAxC,KAAmD,CAAvE;;QACI4H,WAAJ,EAAiB;MACfE,gBAAa,CAACG,KAAD,EAAQ/D,CAAR,EAAW,GAAX,CAAb;;GAJJ;SAQOA,CAAP;;;;;;;;;;;;;;AAeF,AAAe,SAASiE,sBAAT,CAA6BjE,CAA7B,EAAgC;EAC7CA,CAAC,GAAGyC,UAAO,CAACzC,CAAD,CAAX;EACAA,CAAC,GAAGuD,WAAW,CAACvD,CAAD,CAAf;EACAA,CAAC,GAAG6D,YAAY,CAAC7D,CAAD,CAAhB;SAEOA,CAAP;;;AC5Ca,SAAS4D,gBAAT,CAAuBtD,KAAvB,EAA8BN,CAA9B,EAA4C;MAAXkE,GAAW,uEAAL,GAAK;MACnD7D,IAAI,GAAGC,KAAK,CAAClC,GAAN,CAAU,CAAV,CAAb;;MACI,CAACiC,IAAL,EAAW;WACFL,CAAP;;;MAEImE,KAAK,GAAGC,QAAQ,CAAC/D,IAAD,CAAR,IAAkB,EAAhC;;MAEMgE,YAAY,GAAG,iBAAgBF,KAAhB,EAClBG,GADkB,CACd,UAAAC,GAAG;qBAAOA,GAAP,cAAcJ,KAAK,CAACI,GAAD,CAAnB;GADW,EAElBtH,IAFkB,CAEb,GAFa,CAArB;;MAGIuH,IAAJ;;MAEIxE,CAAC,CAACjC,OAAN,EAAe;;;;IAIbyG,IAAI,GACFnE,IAAI,CAAC0C,OAAL,CAAahH,WAAb,OAA+B,UAA/B,GAA4CuE,KAAK,CAACrG,IAAN,EAA5C,GAA2DqG,KAAK,CAACkE,IAAN,EAD7D;GAJF,MAMO;IACLA,IAAI,GAAGlE,KAAK,CAACmE,QAAN,EAAP;;;EAEFnE,KAAK,CAACgD,WAAN,YAAsBY,GAAtB,cAA6BG,YAA7B,cAA6CG,IAA7C,eAAsDN,GAAtD;SACOlE,CAAP;;;ACtBF,SAAS0E,cAAT,CAAwBC,IAAxB,EAA8B3E,CAA9B,EAAiC;MACzB4E,MAAM,GAAG,UAASD,IAAI,CAACnE,IAAL,CAAU,QAAV,CAAT,EAA8B,EAA9B,CAAf;;MACMqE,KAAK,GAAG,UAASF,IAAI,CAACnE,IAAL,CAAU,OAAV,CAAT,EAA6B,EAA7B,KAAoC,EAAlD,CAF+B;;;;MAO3B,CAACoE,MAAM,IAAI,EAAX,IAAiB,EAAjB,IAAuBC,KAAK,GAAG,EAAnC,EAAuC;IACrCF,IAAI,CAACnC,MAAL;GADF,MAEO,IAAIoC,MAAJ,EAAY;;;;IAIjBD,IAAI,CAAClE,UAAL,CAAgB,QAAhB;;;SAGKT,CAAP;;;;;AAKF,SAAS8E,aAAT,CAAuBH,IAAvB,EAA6B3E,CAA7B,EAAgC;MAC1BW,SAAS,CAACjG,IAAV,CAAeiK,IAAI,CAACnE,IAAL,CAAU,KAAV,CAAf,CAAJ,EAAsC;IACpCmE,IAAI,CAACnC,MAAL;;;SAGKxC,CAAP;;;AAGF,AAAe,SAAS+E,WAAT,CAAqBC,QAArB,EAA+BhF,CAA/B,EAAkC;EAC/CgF,QAAQ,CAACxK,IAAT,CAAc,KAAd,EAAqB2F,IAArB,CAA0B,UAACxE,KAAD,EAAQsJ,GAAR,EAAgB;QAClCN,IAAI,GAAG3E,CAAC,CAACiF,GAAD,CAAd;IAEAP,cAAc,CAACC,IAAD,EAAO3E,CAAP,CAAd;IACA8E,aAAa,CAACH,IAAD,EAAO3E,CAAP,CAAb;GAJF;SAOOA,CAAP;;;ACnCa,SAASkF,UAAT,CAAoBC,OAApB,EAA6BnF,CAA7B,EAAgC3F,GAAhC,EAAgD;MAAX+K,IAAW,uEAAJ,EAAI;;MACzDA,IAAI,CAACtJ,MAAL,KAAgB,CAApB,EAAuB;IACrBsJ,IAAI,GAAGvE,cAAP;;;MAGExG,GAAJ,EAAS;qBACwB8B,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CADxB;QACCgC,QADD,cACCA,QADD;QACWgJ,QADX,cACWA,QADX;;IAEPD,IAAI,gCAAOA,IAAP,4BAA6B/I,QAA7B,eAA0CgJ,QAA1C,UAAJ;;;EAGFrF,CAAC,CAACoF,IAAI,CAACnI,IAAL,CAAU,GAAV,CAAD,EAAiBkI,OAAjB,CAAD,CAA2BG,QAA3B,CAAoC1E,UAApC;SAEOZ,CAAP;;;ACda,SAASuF,aAAT,CAAuBJ,OAAvB,EAAgCnF,CAAhC,EAA8C;MAAXoF,IAAW,uEAAJ,EAAI;;MACvDA,IAAI,CAACtJ,MAAL,KAAgB,CAApB,EAAuB;IACrBsJ,IAAI,GAAGtE,iBAAP;GAFyD;;;;EAO3Dd,CAAC,CAACoF,IAAI,CAACnI,IAAL,CAAU,GAAV,CAAD,EAAiBkI,OAAjB,CAAD,CACG/C,GADH,YACWxB,UADX,GAEG4B,MAFH;SAIOxC,CAAP;;;ACVF;;;AAEA,AAAe,SAASwF,aAAT,CAAoBL,OAApB,EAA6BnF,CAA7B,EAAgC;MACvCyF,MAAM,GAAGzF,CAAC,CAAC,IAAD,EAAOmF,OAAP,CAAhB;;MAEIM,MAAM,CAAC3J,MAAP,GAAgB,CAApB,EAAuB;IACrB2J,MAAM,CAACtF,IAAP,CAAY,UAACxE,KAAD,EAAQ0E,IAAR;aAAiBL,CAAC,CAACK,IAAD,CAAD,CAAQmC,MAAR,EAAjB;KAAZ;GADF,MAEO;IACLiD,MAAM,CAACtF,IAAP,CAAY,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;MAC3BuD,gBAAa,CAAC5D,CAAC,CAACK,IAAD,CAAF,EAAUL,CAAV,EAAa,IAAb,CAAb;KADF;;;SAKKA,CAAP;;;ACZF,SAAS0F,qBAAT,CAA+BV,QAA/B,EAAyChF,CAAzC,EAA4C;EAC1CgF,QAAQ,CAACxK,IAAT,CAAc,GAAd,EAAmB2F,IAAnB,CAAwB,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;QACjC8D,KAAK,GAAGC,QAAQ,CAAC/D,IAAD,CAAtB;IAEAsF,QAAQ,CACNtF,IADM,EAEN,iBAAgB8D,KAAhB,EAAuBzH,MAAvB,CAA8B,UAACC,GAAD,EAAM6D,IAAN,EAAe;UACvCQ,kBAAkB,CAACtG,IAAnB,CAAwB8F,IAAxB,CAAJ,EAAmC;iCACrB7D,GAAZ,sBAAkB6D,IAAlB,EAAyB2D,KAAK,CAAC3D,IAAD,CAA9B;;;aAGK7D,GAAP;KALF,EAMG,EANH,CAFM,CAAR;GAHF,EAD0C;;EAiB1CqD,CAAC,YAAKY,UAAL,GAAmBoE,QAAnB,CAAD,CAA8BY,WAA9B,CAA0ChF,UAA1C;SAEOoE,QAAP;;;;AAIF,AAAe,SAASa,kBAAT,CAAyBb,QAAzB,EAAmChF,CAAnC,EAAsC;;;;SAI5C0F,qBAAqB,CAC1BV,QAAQ,CAACc,MAAT,GAAkBhK,MAAlB,GAA2BkJ,QAAQ,CAACc,MAAT,EAA3B,GAA+Cd,QADrB,EAE1BhF,CAF0B,CAA5B;;;AC/Ba,SAAS+F,WAAT,CAAqBf,QAArB,EAA+BhF,CAA/B,EAAkC;EAC/CgF,QAAQ,CAACxK,IAAT,CAAc,GAAd,EAAmB2F,IAAnB,CAAwB,UAACxE,KAAD,EAAQyH,CAAR,EAAc;QAC9B4C,EAAE,GAAGhG,CAAC,CAACoD,CAAD,CAAZ;QACI4C,EAAE,CAACxL,IAAH,CAAQ,aAAR,EAAuBsB,MAAvB,KAAkC,CAAlC,IAAuCkK,EAAE,CAAC/L,IAAH,GAAUE,IAAV,OAAqB,EAAhE,EACE6L,EAAE,CAACxD,MAAH;GAHJ;SAMOxC,CAAP;;;ACPF;AAEA,AAyFA;;AACA,AAAO,IAAMiG,wBAAsB,GAAG,CACpC,IADoC,EAEpC,GAFoC,EAGpC,GAHoC,EAIpC,OAJoC,EAKpC,IALoC,EAMpC,MANoC,EAOpC,MAPoC,EAQpC,UARoC,EASpC,OAToC,EAUpC,KAVoC,EAWpC,MAXoC,EAYpC,MAZoC,CAA/B;AAeP,AAAO,IAAMC,2BAAyB,GAAG,IAAIrL,MAAJ,aAClCoL,wBAAsB,CAAChJ,IAAvB,CAA4B,GAA5B,CADkC,SAEvC,GAFuC,CAAlC;;;;AAQP,AAAO,IAAMkJ,yBAAuB,GAAG,CACrC,CAAC,SAAD,EAAY,gBAAZ,CADqC,EAErC,CAAC,OAAD,EAAU,gBAAV,CAFqC,EAGrC,CAAC,QAAD,EAAW,gBAAX,CAHqC,EAIrC,CAAC,OAAD,EAAU,WAAV,CAJqC,EAKrC,CAAC,OAAD,EAAU,YAAV,CALqC,EAMrC,CAAC,OAAD,EAAU,YAAV,CANqC,CAAhC;AASP,AAAO,IAAMC,aAAW,GAAG,CAAC,QAAD,EAAW,OAAX,EAAoB,OAApB,EAA6B,SAA7B,CAApB;AACP,AAAO,IAAMC,gBAAc,GAAG,IAAIxL,MAAJ,CAAWuL,aAAW,CAACnJ,IAAZ,CAAiB,GAAjB,CAAX,EAAkC,GAAlC,CAAvB;;;;;AAMP,AAAO,IAAMsE,sBAAoB,GAAG,CAClC,SADkC,EAElC,gBAFkC,EAGlC,iBAHkC,EAIlC,MAJkC,EAKlC,MALkC,EAMlC,SANkC,EAOlC,qBAPkC,EAQlC,OARkC,EASlC,QATkC,EAUlC,MAVkC,EAWlC,QAXkC,EAYlC,MAZkC,EAalC,YAbkC,EAclC,WAdkC,EAelC,MAfkC,EAgBlC,OAhBkC,EAiBlC,MAjBkC,EAkBlC,UAlBkC;AAmBlC,SAnBkC,CAA7B;;AAuBP,AAAO,IAAMC,mBAAiB,GAAG,IAAI3G,MAAJ,CAC/B0G,sBAAoB,CAACtE,IAArB,CAA0B,GAA1B,CAD+B,EAE/B,GAF+B,CAA1B;;AAMP,AAAO,IAAMqJ,mBAAiB,GAAG,IAAIzL,MAAJ,CAAW,qBAAX,EAAkC,GAAlC,CAA1B;;;;;AAMP,AAAO,IAAM4G,sBAAoB,GAAG,CAClC,OADkC,EAElC,QAFkC,EAGlC,QAHkC,EAIlC,KAJkC,EAKlC,UALkC,EAMlC,QANkC,EAOlC,QAPkC,EAQlC,OARkC,EASlC,MATkC,EAUlC,OAVkC,EAWlC,SAXkC,EAYlC,YAZkC,EAalC,SAbkC,EAclC,MAdkC,EAelC,QAfkC,EAgBlC,OAhBkC,EAiBlC,MAjBkC,EAkBlC,MAlBkC,EAmBlC,SAnBkC,EAoBlC,UApBkC;AAqBlC,MArBkC,EAsBlC,QAtBkC,EAuBlC,UAvBkC,EAwBlC,MAxBkC,EAyBlC,MAzBkC,EA0BlC,MA1BkC,EA2BlC,UA3BkC;AA4BlC,mBA5BkC,EA6BlC,MA7BkC,EA8BlC,WA9BkC,EA+BlC,MA/BkC,EAgClC,UAhCkC,EAiClC,OAjCkC,EAkClC,MAlCkC,EAmClC,OAnCkC,EAoClC,UApCkC;AAqClC,OArCkC,EAsClC,KAtCkC;AAuClC,SAvCkC,EAwClC,SAxCkC,EAyClC,cAzCkC;AA0ClC,QA1CkC,EA2ClC,WA3CkC,EA4ClC,OA5CkC,EA6ClC,UA7CkC,EA8ClC,UA9CkC,EA+ClC,MA/CkC,EAgDlC,SAhDkC,EAiDlC,SAjDkC,EAkDlC,OAlDkC,EAmDlC,KAnDkC,EAoDlC,SApDkC,EAqDlC,MArDkC,EAsDlC,OAtDkC,EAuDlC,QAvDkC,CAA7B;;AA0DP,AAAO,IAAMC,mBAAiB,GAAG,IAAI7G,MAAJ,CAC/B4G,sBAAoB,CAACxE,IAArB,CAA0B,GAA1B,CAD+B,EAE/B,GAF+B,CAA1B;AAqFA,IAAMsJ,sBAAoB,GAAG,IAAI1L,MAAJ,CAAW,mBAAX,EAAgC,GAAhC,CAA7B;AACP,AAAO,IAAM2L,oBAAkB,GAAG,IAAI3L,MAAJ,CAAW,4BAAX,EAAyC,GAAzC,CAA3B;AACP,AAAO,IAAM4L,UAAQ,GAAG,IAAI5L,MAAJ,CAAW,kBAAX,EAA+B,GAA/B,CAAjB;;AC/SQ,SAAS6L,SAAT,CAAmBrG,IAAnB,EAAyB;MAChCgC,OAAO,GAAGhC,IAAI,CAACG,IAAL,CAAU,OAAV,CAAhB;MACM8B,EAAE,GAAGjC,IAAI,CAACG,IAAL,CAAU,IAAV,CAAX;MACImG,KAAK,GAAG,CAAZ;;MAEIrE,EAAJ,EAAQ;;QAEFd,mBAAiB,CAAC9G,IAAlB,CAAuB4H,EAAvB,CAAJ,EAAgC;MAC9BqE,KAAK,IAAI,EAAT;;;QAEEjF,mBAAiB,CAAChH,IAAlB,CAAuB4H,EAAvB,CAAJ,EAAgC;MAC9BqE,KAAK,IAAI,EAAT;;;;MAIAtE,OAAJ,EAAa;QACPsE,KAAK,KAAK,CAAd,EAAiB;;;UAGXnF,mBAAiB,CAAC9G,IAAlB,CAAuB2H,OAAvB,CAAJ,EAAqC;QACnCsE,KAAK,IAAI,EAAT;;;UAEEjF,mBAAiB,CAAChH,IAAlB,CAAuB2H,OAAvB,CAAJ,EAAqC;QACnCsE,KAAK,IAAI,EAAT;;KARO;;;;;QAePN,gBAAc,CAAC3L,IAAf,CAAoB2H,OAApB,CAAJ,EAAkC;MAChCsE,KAAK,IAAI,EAAT;KAhBS;;;;;;QAuBPL,mBAAiB,CAAC5L,IAAlB,CAAuB2H,OAAvB,CAAJ,EAAqC;MACnCsE,KAAK,IAAI,EAAT;;;;SAIGA,KAAP;;;ACnDF;;;AAGA,AAAe,SAASC,QAAT,CAAkBtG,KAAlB,EAAyB;SAC/B,YAAWA,KAAK,CAACE,IAAN,CAAW,OAAX,CAAX,KAAmC,IAA1C;;;ACJF;AACA,AAAe,SAASqG,WAAT,CAAqB5M,IAArB,EAA2B;SACjC,CAACA,IAAI,CAACoB,KAAL,CAAW,IAAX,KAAoB,EAArB,EAAyBS,MAAhC;;;ACFF,IAAMgL,KAAK,GAAG,IAAIjM,MAAJ,CAAW,WAAX,EAAwB,GAAxB,CAAd;AAEA,AAAe,SAASkM,WAAT,CAAqBC,UAArB,EAAgD;MAAfjE,OAAe,uEAAL,GAAK;MACvDkE,MAAM,GAAGD,UAAU,GAAG,EAA5B;;MAEIC,MAAM,GAAG,CAAb,EAAgB;QACVC,WAAJ,CADc;;;;;;QAQVJ,KAAK,CAACpM,IAAN,CAAWqI,OAAX,CAAJ,EAAyB;MACvBmE,WAAW,GAAGD,MAAM,GAAG,CAAvB;KADF,MAEO;MACLC,WAAW,GAAGD,MAAM,GAAG,IAAvB;;;WAGKE,IAAI,CAACC,GAAL,CAASD,IAAI,CAACE,GAAL,CAASH,WAAT,EAAsB,CAAtB,CAAT,EAAmC,CAAnC,CAAP;;;SAGK,CAAP;;;ACnBF;;AACA,AAAe,SAASI,iBAAT,CAAwBjH,IAAxB,EAA8B;MACvCsG,KAAK,GAAG,CAAZ;MACM1M,IAAI,GAAGoG,IAAI,CAACpG,IAAL,GAAYE,IAAZ,EAAb;MACM6M,UAAU,GAAG/M,IAAI,CAAC6B,MAAxB,CAH2C;;MAMvCkL,UAAU,GAAG,EAAjB,EAAqB;WACZ,CAAP;GAPyC;;;EAW3CL,KAAK,IAAIE,WAAW,CAAC5M,IAAD,CAApB,CAX2C;;;EAe3C0M,KAAK,IAAII,WAAW,CAACC,UAAD,CAApB,CAf2C;;;;;MAqBvC/M,IAAI,CAACsD,KAAL,CAAW,CAAC,CAAZ,MAAmB,GAAvB,EAA4B;IAC1BoJ,KAAK,IAAI,CAAT;;;SAGKA,KAAP;;;AC7Ba,SAASY,QAAT,CAAkBjH,KAAlB,EAAyBN,CAAzB,EAA4B2G,KAA5B,EAAmC;EAChDrG,KAAK,CAACE,IAAN,CAAW,OAAX,EAAoBmG,KAApB;SACOrG,KAAP;;;ACAa,SAASkH,WAAT,CAAkBlH,KAAlB,EAAyBN,CAAzB,EAA4ByH,MAA5B,EAAoC;MAC7C;QACId,KAAK,GAAGe,iBAAc,CAACpH,KAAD,EAAQN,CAAR,CAAd,GAA2ByH,MAAzC;IACAF,QAAQ,CAACjH,KAAD,EAAQN,CAAR,EAAW2G,KAAX,CAAR;GAFF,CAGE,OAAOgB,CAAP,EAAU;;;SAILrH,KAAP;;;ACPa,SAASsH,cAAT,CAAqBvH,IAArB,EAA2BL,CAA3B,EAA8B2G,KAA9B,EAAqC;MAC5Cb,MAAM,GAAGzF,IAAI,CAACyF,MAAL,EAAf;;MACIA,MAAJ,EAAY;IACV0B,WAAQ,CAAC1B,MAAD,EAAS9F,CAAT,EAAY2G,KAAK,GAAG,IAApB,CAAR;;;SAGKtG,IAAP;;;ACNF;;;AAEA,AAAe,SAASqH,iBAAT,CAAwBpH,KAAxB,EAA+BN,CAA/B,EAAsD;MAApB6H,WAAoB,uEAAN,IAAM;MAC/DlB,KAAK,GAAGC,QAAQ,CAACtG,KAAD,CAApB;;MAEIqG,KAAJ,EAAW;WACFA,KAAP;;;EAGFA,KAAK,GAAGmB,YAAS,CAACxH,KAAD,CAAjB;;MAEIuH,WAAJ,EAAiB;IACflB,KAAK,IAAID,SAAS,CAACpG,KAAD,CAAlB;;;EAGFsH,cAAW,CAACtH,KAAD,EAAQN,CAAR,EAAW2G,KAAX,CAAX;SAEOA,KAAP;;;ACZF;;AACA,AAAe,SAASmB,YAAT,CAAmBxH,KAAnB,EAA0B;mBACnBA,KAAK,CAAClC,GAAN,CAAU,CAAV,CADmB;MAC/B2E,OAD+B,cAC/BA,OAD+B;;;;;MAMnCwD,sBAAoB,CAAC7L,IAArB,CAA0BqI,OAA1B,CAAJ,EAAwC;WAC/BuE,iBAAc,CAAChH,KAAD,CAArB;;;MAEEyC,OAAO,CAAChH,WAAR,OAA0B,KAA9B,EAAqC;WAC5B,CAAP;;;MAEEyK,oBAAkB,CAAC9L,IAAnB,CAAwBqI,OAAxB,CAAJ,EAAsC;WAC7B,CAAP;;;MAEE0D,UAAQ,CAAC/L,IAAT,CAAcqI,OAAd,CAAJ,EAA4B;WACnB,CAAC,CAAR;;;MAEEA,OAAO,CAAChH,WAAR,OAA0B,IAA9B,EAAoC;WAC3B,CAAC,CAAR;;;SAGK,CAAP;;;AC1BF,SAAS8H,cAAT,CAAsBvD,KAAtB,EAA6BN,CAA7B,EAAgC;MAC1BM,KAAK,CAAClC,GAAN,CAAU,CAAV,CAAJ,EAAkB;qBACIkC,KAAK,CAAClC,GAAN,CAAU,CAAV,CADJ;QACR2E,OADQ,cACRA,OADQ;;QAGZA,OAAO,KAAK,MAAhB,EAAwB;;MAEtBa,gBAAa,CAACtD,KAAD,EAAQN,CAAR,EAAW,KAAX,CAAb;;;;;AAKN,SAAS+H,UAAT,CAAoBzH,KAApB,EAA2BN,CAA3B,EAA8B2G,KAA9B,EAAqC;MAC/BrG,KAAJ,EAAW;IACTuD,cAAY,CAACvD,KAAD,EAAQN,CAAR,CAAZ;IACAwH,WAAQ,CAAClH,KAAD,EAAQN,CAAR,EAAW2G,KAAX,CAAR;;;;AAIJ,SAASqB,OAAT,CAAiBhI,CAAjB,EAAoB6H,WAApB,EAAiC;EAC/B7H,CAAC,CAAC,QAAD,CAAD,CACGoC,GADH,CACO,SADP,EAEGjC,IAFH,CAEQ,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;;;QAGjBC,KAAK,GAAGN,CAAC,CAACK,IAAD,CAAb;IACAC,KAAK,GAAGiH,QAAQ,CAACjH,KAAD,EAAQN,CAAR,EAAW0H,iBAAc,CAACpH,KAAD,EAAQN,CAAR,EAAW6H,WAAX,CAAzB,CAAhB;QAEMI,OAAO,GAAG3H,KAAK,CAACwF,MAAN,EAAhB;QACMoC,QAAQ,GAAGJ,YAAS,CAACxH,KAAD,CAA1B;IAEAyH,UAAU,CAACE,OAAD,EAAUjI,CAAV,EAAakI,QAAb,EAAuBL,WAAvB,CAAV;;QACII,OAAJ,EAAa;;;MAGXF,UAAU,CAACE,OAAO,CAACnC,MAAR,EAAD,EAAmB9F,CAAnB,EAAsBkI,QAAQ,GAAG,CAAjC,EAAoCL,WAApC,CAAV;;GAfN;SAmBO7H,CAAP;;;;;AAKF,AAAe,SAASmI,eAAT,CAAsBnI,CAAtB,EAA6C;MAApB6H,WAAoB,uEAAN,IAAM;;;EAG1D1B,yBAAuB,CAACiC,OAAxB,CAAgC,gBAAqC;;QAAnCC,cAAmC;QAAnBC,aAAmB;;IACnEtI,CAAC,WAAIqI,cAAJ,cAAsBC,aAAtB,EAAD,CAAwCnI,IAAxC,CAA6C,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;MAC5DmH,WAAQ,CAACxH,CAAC,CAACK,IAAD,CAAD,CAAQyF,MAAR,CAAeuC,cAAf,CAAD,EAAiCrI,CAAjC,EAAoC,EAApC,CAAR;KADF;GADF,EAH0D;;;;;;EAc1DgI,OAAO,CAAChI,CAAD,EAAI6H,WAAJ,CAAP;EACAG,OAAO,CAAChI,CAAD,EAAI6H,WAAJ,CAAP;SAEO7H,CAAP;;;AC1DF;;;;;AAIA,AAAe,SAASuI,aAAT,CAAuBC,UAAvB,EAAmCC,QAAnC,EAA6CzI,CAA7C,EAAgD;MACzD,CAACwI,UAAU,CAAC1C,MAAX,GAAoBhK,MAAzB,EAAiC;WACxB0M,UAAP;;;MAGIE,qBAAqB,GAAGvB,IAAI,CAACE,GAAL,CAAS,EAAT,EAAaoB,QAAQ,GAAG,IAAxB,CAA9B;MACME,WAAW,GAAG3I,CAAC,CAAC,aAAD,CAArB;EAEAwI,UAAU,CACP1C,MADH,GAEGnC,QAFH,GAGGxD,IAHH,CAGQ,UAACxE,KAAD,EAAQuH,OAAR,EAAoB;QAClB0F,QAAQ,GAAG5I,CAAC,CAACkD,OAAD,CAAlB,CADwB;;QAGpBgD,2BAAyB,CAACxL,IAA1B,CAA+BwI,OAAO,CAACH,OAAvC,CAAJ,EAAqD;aAC5C,IAAP;;;QAGI8F,YAAY,GAAGjC,QAAQ,CAACgC,QAAD,CAA7B;;QACIC,YAAJ,EAAkB;UACZD,QAAQ,CAACxK,GAAT,CAAa,CAAb,MAAoBoK,UAAU,CAACpK,GAAX,CAAe,CAAf,CAAxB,EAA2C;QACzCuK,WAAW,CAACG,MAAZ,CAAmBF,QAAnB;OADF,MAEO;YACDG,YAAY,GAAG,CAAnB;YACMC,OAAO,GAAGC,WAAW,CAACL,QAAD,CAA3B,CAFK;;;YAMDI,OAAO,GAAG,IAAd,EAAoB;UAClBD,YAAY,IAAI,EAAhB;SAPG;;;;YAYDC,OAAO,IAAI,GAAf,EAAoB;UAClBD,YAAY,IAAI,EAAhB;SAbG;;;;YAkBDH,QAAQ,CAACpI,IAAT,CAAc,OAAd,MAA2BgI,UAAU,CAAChI,IAAX,CAAgB,OAAhB,CAA/B,EAAyD;UACvDuI,YAAY,IAAIN,QAAQ,GAAG,GAA3B;;;YAGIS,QAAQ,GAAGL,YAAY,GAAGE,YAAhC;;YAEIG,QAAQ,IAAIR,qBAAhB,EAAuC;iBAC9BC,WAAW,CAACG,MAAZ,CAAmBF,QAAnB,CAAP;;;YAEE1F,OAAO,CAACH,OAAR,KAAoB,GAAxB,EAA6B;cACrBoG,cAAc,GAAGP,QAAQ,CAAC3O,IAAT,EAAvB;cACMmP,oBAAoB,GAAGpC,UAAU,CAACmC,cAAD,CAAvC;;cAEIC,oBAAoB,GAAG,EAAvB,IAA6BJ,OAAO,GAAG,IAA3C,EAAiD;mBACxCL,WAAW,CAACG,MAAZ,CAAmBF,QAAnB,CAAP;;;cAGAQ,oBAAoB,IAAI,EAAxB,IACAJ,OAAO,KAAK,CADZ,IAEA7L,cAAc,CAACgM,cAAD,CAHhB,EAIE;mBACOR,WAAW,CAACG,MAAZ,CAAmBF,QAAnB,CAAP;;;;;;WAMD,IAAP;GA3DJ;;MA+DED,WAAW,CAAChF,QAAZ,GAAuB7H,MAAvB,KAAkC,CAAlC,IACA6M,WAAW,CACRhF,QADH,GAEG0F,KAFH,GAGGjL,GAHH,CAGO,CAHP,MAGcoK,UAAU,CAACpK,GAAX,CAAe,CAAf,CALhB,EAME;WACOoK,UAAP;;;SAGKG,WAAP;;;ACtFF;;AACA,AAAe,SAASW,mBAAT,CAA0BtJ,CAA1B,EAA6B;MACtCwI,UAAJ;MACIC,QAAQ,GAAG,CAAf;EAEAzI,CAAC,CAAC,SAAD,CAAD,CAAaG,IAAb,CAAkB,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;;QAE7B6F,2BAAyB,CAACxL,IAA1B,CAA+B2F,IAAI,CAAC0C,OAApC,CAAJ,EAAkD;;;;QAI5CzC,KAAK,GAAGN,CAAC,CAACK,IAAD,CAAf;QACMsG,KAAK,GAAGC,QAAQ,CAACtG,KAAD,CAAtB;;QAEIqG,KAAK,GAAG8B,QAAZ,EAAsB;MACpBA,QAAQ,GAAG9B,KAAX;MACA6B,UAAU,GAAGlI,KAAb;;GAXJ,EAJ0C;;;MAqBtC,CAACkI,UAAL,EAAiB;WACRxI,CAAC,CAAC,MAAD,CAAD,IAAaA,CAAC,CAAC,GAAD,CAAD,CAAOqJ,KAAP,EAApB;;;EAGFb,UAAU,GAAGD,aAAa,CAACC,UAAD,EAAaC,QAAb,EAAuBzI,CAAvB,CAA1B;SAEOwI,UAAP;;;ACjCF;;ACWA,SAASe,mBAAT,CAA6BjJ,KAA7B,EAAoCN,CAApC,EAAuCwJ,MAAvC,EAA+C;;;;;MAKzClJ,KAAK,CAACmJ,QAAN,CAAe,qBAAf,CAAJ,EAA2C;;;;MAIrCpM,OAAO,GAAGrD,eAAe,CAACsG,KAAK,CAACrG,IAAN,EAAD,CAA/B;;MAEI4M,WAAW,CAACxJ,OAAD,CAAX,GAAuB,EAA3B,EAA+B;QACvBqM,MAAM,GAAG1J,CAAC,CAAC,GAAD,EAAMM,KAAN,CAAD,CAAcxE,MAA7B;QACM6N,UAAU,GAAG3J,CAAC,CAAC,OAAD,EAAUM,KAAV,CAAD,CAAkBxE,MAArC,CAF6B;;QAKzB6N,UAAU,GAAGD,MAAM,GAAG,CAA1B,EAA6B;MAC3BpJ,KAAK,CAACkC,MAAN;;;;QAIIpD,aAAa,GAAG/B,OAAO,CAACvB,MAA9B;QACM8N,QAAQ,GAAG5J,CAAC,CAAC,KAAD,EAAQM,KAAR,CAAD,CAAgBxE,MAAjC,CAX6B;;;QAezBsD,aAAa,GAAG,EAAhB,IAAsBwK,QAAQ,KAAK,CAAvC,EAA0C;MACxCtJ,KAAK,CAACkC,MAAN;;;;QAIIwG,OAAO,GAAGC,WAAW,CAAC3I,KAAD,CAA3B,CApB6B;;;;QAyBzBkJ,MAAM,GAAG,EAAT,IAAeR,OAAO,GAAG,GAAzB,IAAgC5J,aAAa,GAAG,EAApD,EAAwD;MACtDkB,KAAK,CAACkC,MAAN;;KA1B2B;;;;QAgCzBgH,MAAM,IAAI,EAAV,IAAgBR,OAAO,GAAG,GAA9B,EAAmC;;;;UAI3BjG,OAAO,GAAGzC,KAAK,CAAClC,GAAN,CAAU,CAAV,EAAa2E,OAAb,CAAqBhH,WAArB,EAAhB;UACM8N,UAAU,GAAG9G,OAAO,KAAK,IAAZ,IAAoBA,OAAO,KAAK,IAAnD;;UACI8G,UAAJ,EAAgB;YACRC,YAAY,GAAGxJ,KAAK,CAACyJ,IAAN,EAArB;;YAEED,YAAY,IACZ9P,eAAe,CAAC8P,YAAY,CAAC7P,IAAb,EAAD,CAAf,CAAqCsD,KAArC,CAA2C,CAAC,CAA5C,MAAmD,GAFrD,EAGE;;;;;MAKJ+C,KAAK,CAACkC,MAAN;;;;QAIIwH,WAAW,GAAGhK,CAAC,CAAC,QAAD,EAAWM,KAAX,CAAD,CAAmBxE,MAAvC,CApD6B;;QAuDzBkO,WAAW,GAAG,CAAd,IAAmB5K,aAAa,GAAG,GAAvC,EAA4C;MAC1CkB,KAAK,CAACkC,MAAN;;;;;;;;;;;;AAYN,AAAe,SAASyH,YAAT,CAAmBjF,QAAnB,EAA6BhF,CAA7B,EAAgC;EAC7CA,CAAC,CAACiB,wBAAD,EAA2B+D,QAA3B,CAAD,CAAsC7E,IAAtC,CAA2C,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;QACpDC,KAAK,GAAGN,CAAC,CAACK,IAAD,CAAf,CAD0D;;QAGtDC,KAAK,CAACmJ,QAAN,CAAe7I,UAAf,KAA8BN,KAAK,CAAC9F,IAAN,YAAeoG,UAAf,GAA6B9E,MAA7B,GAAsC,CAAxE,EACE;QAEE0N,MAAM,GAAG5C,QAAQ,CAACtG,KAAD,CAArB;;QACI,CAACkJ,MAAL,EAAa;MACXA,MAAM,GAAG9B,iBAAc,CAACpH,KAAD,EAAQN,CAAR,CAAvB;MACAuH,QAAQ,CAACjH,KAAD,EAAQN,CAAR,EAAWwJ,MAAX,CAAR;KATwD;;;QAatDA,MAAM,GAAG,CAAb,EAAgB;MACdlJ,KAAK,CAACkC,MAAN;KADF,MAEO;;MAEL+G,mBAAmB,CAACjJ,KAAD,EAAQN,CAAR,EAAWwJ,MAAX,CAAnB;;GAjBJ;SAqBOxJ,CAAP;;;AC3Ga,SAASkK,YAAT,CAAsBlF,QAAtB,EAAgChF,CAAhC,EAA+C;MAAZmK,KAAY,uEAAJ,EAAI;EAC5DnK,CAAC,CAACmB,eAAD,EAAkB6D,QAAlB,CAAD,CAA6B7E,IAA7B,CAAkC,UAACxE,KAAD,EAAQyO,MAAR,EAAmB;QAC7CC,OAAO,GAAGrK,CAAC,CAACoK,MAAD,CAAjB,CADmD;;;;;QAM/CpK,CAAC,CAACqK,OAAD,EAAUrF,QAAV,CAAD,CAAqBsF,OAArB,CAA6B,GAA7B,EAAkCxO,MAAlC,KAA6C,CAAjD,EAAoD;aAC3CuO,OAAO,CAAC7H,MAAR,EAAP;KAPiD;;;QAW/CxI,eAAe,CAACgG,CAAC,CAACoK,MAAD,CAAD,CAAUnQ,IAAV,EAAD,CAAf,KAAsCkQ,KAA1C,EAAiD;aACxCE,OAAO,CAAC7H,MAAR,EAAP;KAZiD;;;;QAiB/CkE,SAAS,CAAC1G,CAAC,CAACoK,MAAD,CAAF,CAAT,GAAuB,CAA3B,EAA8B;aACrBC,OAAO,CAAC7H,MAAR,EAAP;;;WAGK6H,OAAP;GArBF;SAwBOrK,CAAP;;;AC3BF;;AACA,AAAe,SAASuK,kBAAT,CAAyBpF,OAAzB,EAAkCnF,CAAlC,EAAqC;;;;EAIlDA,CAAC,GAAG4D,gBAAa,CAAC5D,CAAC,CAAC,MAAD,CAAF,EAAYA,CAAZ,EAAe,KAAf,CAAjB;EACAA,CAAC,GAAG4D,gBAAa,CAAC5D,CAAC,CAAC,MAAD,CAAF,EAAYA,CAAZ,EAAe,KAAf,CAAjB;SAEOA,CAAP;;;ACPF,SAASwK,UAAT,CAAoBxK,CAApB,EAAuByK,OAAvB,EAAgCjK,IAAhC,EAAsC;MAC9BkK,OAAO,GAAG1K,CAAC,CAAC,MAAD,CAAD,CAAUQ,IAAV,CAAe,MAAf,CAAhB;EAEAR,CAAC,YAAKQ,IAAL,OAAD,CAAeL,IAAf,CAAoB,UAACC,CAAD,EAAIC,IAAJ,EAAa;QACzB8D,KAAK,GAAGC,QAAQ,CAAC/D,IAAD,CAAtB;QACMhG,GAAG,GAAG8J,KAAK,CAAC3D,IAAD,CAAjB;QACI,CAACnG,GAAL,EAAU;QACJsQ,WAAW,GAAGxO,GAAG,CAACmC,OAAJ,CAAYoM,OAAO,IAAID,OAAvB,EAAgCpQ,GAAhC,CAApB;IAEAuQ,OAAO,CAACvK,IAAD,EAAOG,IAAP,EAAamK,WAAb,CAAP;GANF;;;AAUF,SAASE,aAAT,CAAuB7K,CAAvB,EAA0ByK,OAA1B,EAAmCK,QAAnC,EAA6C;EAC3C9K,CAAC,CAAC,UAAD,EAAa8K,QAAb,CAAD,CAAwB3K,IAAxB,CAA6B,UAACC,CAAD,EAAIC,IAAJ,EAAa;QAClC8D,KAAK,GAAGC,QAAQ,CAAC/D,IAAD,CAAtB;QACM0K,MAAM,GAAG5G,KAAK,CAAC6G,MAArB;;QAEID,MAAJ,EAAY;;;;UAIJE,UAAU,GAAGF,MAAM,CAAC1P,KAAP,CACjB,6CADiB,CAAnB;UAGI,CAAC4P,UAAL,EAAiB;UACXC,kBAAkB,GAAGD,UAAU,CAAC3G,GAAX,CAAe,UAAA6G,SAAS,EAAI;;;YAG/CC,KAAK,GAAGD,SAAS,CACpBhR,IADW,GAEXD,OAFW,CAEH,IAFG,EAEG,EAFH,EAGXsB,KAHW,CAGL,KAHK,CAAd;QAIA4P,KAAK,CAAC,CAAD,CAAL,GAAWjP,GAAG,CAACmC,OAAJ,CAAYmM,OAAZ,EAAqBW,KAAK,CAAC,CAAD,CAA1B,CAAX;eACOA,KAAK,CAACnO,IAAN,CAAW,GAAX,CAAP;OARyB,CAA3B;;UAUMoO,cAAc,GAAG,mBAAI,SAAQH,kBAAR,CAAJ,EAAiCjO,IAAjC,CAAsC,IAAtC,CAAvB;;MACA2N,OAAO,CAACvK,IAAD,EAAO,QAAP,EAAiBgL,cAAjB,CAAP;;GAvBJ;;;AA4BF,AAAe,SAASC,oBAAT,CAA2BR,QAA3B,EAAqC9K,CAArC,EAAwC3F,GAAxC,EAA6C;GACzD,MAAD,EAAS,KAAT,EAAgB+N,OAAhB,CAAwB,UAAA5H,IAAI;WAAIgK,UAAU,CAACxK,CAAD,EAAI3F,GAAJ,EAASmG,IAAT,CAAd;GAA5B;EACAqK,aAAa,CAAC7K,CAAD,EAAI3F,GAAJ,EAASyQ,QAAT,CAAb;SAEOA,QAAP;;;AClDK,SAAS9D,UAAT,CAAoB/M,IAApB,EAA0B;SACxBA,IAAI,CAACE,IAAL,GAAYD,OAAZ,CAAoB,MAApB,EAA4B,GAA5B,EAAiC4B,MAAxC;;;;;AAMF,AAAO,SAASmN,WAAT,CAAqB3I,KAArB,EAA4B;MAC3BiL,eAAe,GAAGvE,UAAU,CAAC1G,KAAK,CAACrG,IAAN,EAAD,CAAlC;MAEMuR,QAAQ,GAAGlL,KAAK,CAAC9F,IAAN,CAAW,GAAX,EAAgBP,IAAhB,EAAjB;MACMwR,UAAU,GAAGzE,UAAU,CAACwE,QAAD,CAA7B;;MAEID,eAAe,GAAG,CAAtB,EAAyB;WAChBE,UAAU,GAAGF,eAApB;;;MAEEA,eAAe,KAAK,CAApB,IAAyBE,UAAU,GAAG,CAA1C,EAA6C;WACpC,CAAP;;;SAGK,CAAP;;;ACjBF;;AACA,AAAe,SAASC,kBAAT,CACb1L,CADa,EAEb2L,SAFa,EAGbC,WAHa,EAKb;MADA3B,SACA,uEADY,IACZ;MACM4B,UAAU,GAAGF,SAAS,CAACG,MAAV,CAAiB,UAAAC,IAAI;WAAIH,WAAW,CAACI,OAAZ,CAAoBD,IAApB,MAA8B,CAAC,CAAnC;GAArB,CAAnB,CADA;;;;;;;;UAIWA,IAJX;UAKQE,IAAI,GAAG,MAAb;UACM1L,KAAK,GAAG,OAAd;UAEM2L,KAAK,GAAGlM,CAAC,gBAASiM,IAAT,gBAAkBF,IAAlB,SAAf,CARF;;;;UAaQI,MAAM,GAAGD,KAAK,CACjB5H,GADY,CACR,UAAC3I,KAAD,EAAQ0E,IAAR;eAAiBL,CAAC,CAACK,IAAD,CAAD,CAAQG,IAAR,CAAaD,KAAb,CAAjB;OADQ,EAEZ6L,OAFY,GAGZN,MAHY,CAGL,UAAA7R,IAAI;eAAIA,IAAI,KAAK,EAAb;OAHC,CAAf,CAbF;;;;;UAsBMkS,MAAM,CAACrQ,MAAP,KAAkB,CAAtB,EAAyB;YACnBuQ,SAAJ,CADuB;;;YAInBpC,SAAJ,EAAe;UACboC,SAAS,GAAGC,SAAS,CAACH,MAAM,CAAC,CAAD,CAAP,EAAYnM,CAAZ,CAArB;SADF,MAEO;uCACSmM,MADT;;UACJE,SADI;;;;aAIAA;;;;;sCA5BQR,UAAnB,4GAA+B;;;;KAJ/B;;;;;;;;;;;;;;;;;SAqCO,IAAP;;;AC5CF,SAASU,UAAT,CAAoBjM,KAApB,EAA2BkM,WAA3B,EAAwC;;;MAGlClM,KAAK,CAACqD,QAAN,GAAiB7H,MAAjB,GAA0B0Q,WAA9B,EAA2C;WAClC,KAAP;GAJoC;;;MAOlCC,gBAAa,CAACnM,KAAD,CAAjB,EAA0B;WACjB,KAAP;;;SAGK,IAAP;;;;;;AAMF,AAAe,SAASoM,uBAAT,CACb1M,CADa,EAEb2M,SAFa,EAKb;MAFAH,WAEA,uEAFc,CAEd;MADAI,QACA,uEADW,IACX;;;;;;;sCAEuBD,SAAvB,4GAAkC;UAAvBE,QAAuB;UAC1BX,KAAK,GAAGlM,CAAC,CAAC6M,QAAD,CAAf,CADgC;;;UAK5BX,KAAK,CAACpQ,MAAN,KAAiB,CAArB,EAAwB;YAChBwE,KAAK,GAAGN,CAAC,CAACkM,KAAK,CAAC,CAAD,CAAN,CAAf;;YAEIK,UAAU,CAACjM,KAAD,EAAQkM,WAAR,CAAd,EAAoC;cAC9BnP,OAAO,SAAX;;cACIuP,QAAJ,EAAc;YACZvP,OAAO,GAAGiD,KAAK,CAACrG,IAAN,EAAV;WADF,MAEO;YACLoD,OAAO,GAAGiD,KAAK,CAACkE,IAAN,EAAV;;;cAGEnH,OAAJ,EAAa;mBACJA,OAAP;;;;;;;;;;;;;;;;;;;;SAMD,IAAP;;;ACjDF;AACA,AAAe,SAASiP,SAAT,CAAmBrS,IAAnB,EAAyB+F,CAAzB,EAA4B;;;MAGnC8M,SAAS,GAAG9M,CAAC,iBAAU/F,IAAV,aAAD,CAA0BA,IAA1B,EAAlB;SACO6S,SAAS,KAAK,EAAd,GAAmB7S,IAAnB,GAA0B6S,SAAjC;;;ACHa,SAASL,gBAAT,CAAuBnM,KAAvB,EAA8B;MACrC0D,OAAO,GAAG1D,KAAK,CAAC0D,OAAN,GAAgBoI,OAAhB,EAAhB;MACMW,aAAa,GAAG/I,OAAO,CAACxJ,IAAR,CAAa,UAAAsL,MAAM,EAAI;QACrC3B,KAAK,GAAGC,QAAQ,CAAC0B,MAAD,CAAtB;QACekH,SAF4B,GAEV7I,KAFU,CAEnC8I,KAFmC;QAEjB3K,EAFiB,GAEV6B,KAFU,CAEjB7B,EAFiB;QAGrCC,UAAU,aAAMyK,SAAN,cAAmB1K,EAAnB,CAAhB;WACOC,UAAU,CAAC1F,QAAX,CAAoB,SAApB,CAAP;GAJoB,CAAtB;SAOOkQ,aAAa,KAAKG,SAAzB;;;ACXF;;;AAIA,AAAe,SAASC,gBAAT,CAA0B7M,KAA1B,EAAiC;SACvCA,KAAK,CAACrG,IAAN,GAAaE,IAAb,GAAoB2B,MAApB,IAA8B,GAArC;;;ACHa,SAASsR,WAAT,CAAqBpN,CAArB,EAAwB;SAC9BA,CAAC,CAAC2B,cAAD,CAAD,CAAkB7F,MAAlB,GAA2B,CAAlC;;;ACHa,SAASsI,QAAT,CAAkB/D,IAAlB,EAAwB;MAC7BgN,OAD6B,GACLhN,IADK,CAC7BgN,OAD6B;MACpBC,UADoB,GACLjN,IADK,CACpBiN,UADoB;;MAGjC,CAACD,OAAD,IAAYC,UAAhB,EAA4B;QACpBnJ,KAAK,GAAG,iBAAgBmJ,UAAhB,EAA4B5Q,MAA5B,CAAmC,UAACC,GAAD,EAAMhB,KAAN,EAAgB;UACzD6E,IAAI,GAAG8M,UAAU,CAAC3R,KAAD,CAAvB;UAEI,CAAC6E,IAAI,CAACuL,IAAN,IAAc,CAACvL,IAAI,CAACD,KAAxB,EAA+B,OAAO5D,GAAP;MAE/BA,GAAG,CAAC6D,IAAI,CAACuL,IAAN,CAAH,GAAiBvL,IAAI,CAACD,KAAtB;aACO5D,GAAP;KANY,EAOX,EAPW,CAAd;;WAQOwH,KAAP;;;SAGKkJ,OAAP;;;ACfa,SAASzC,OAAT,CAAiBvK,IAAjB,EAAuBG,IAAvB,EAA6B+M,GAA7B,EAAkC;MAC3ClN,IAAI,CAACgN,OAAT,EAAkB;IAChBhN,IAAI,CAACgN,OAAL,CAAa7M,IAAb,IAAqB+M,GAArB;GADF,MAEO,IAAIlN,IAAI,CAACiN,UAAT,EAAqB;IAC1BjN,IAAI,CAACmN,YAAL,CAAkBhN,IAAlB,EAAwB+M,GAAxB;;;SAGKlN,IAAP;;;ACPa,SAASsF,QAAT,CAAkBtF,IAAlB,EAAwB8D,KAAxB,EAA+B;MACxC9D,IAAI,CAACgN,OAAT,EAAkB;IAChBhN,IAAI,CAACgN,OAAL,GAAelJ,KAAf;GADF,MAEO,IAAI9D,IAAI,CAACiN,UAAT,EAAqB;WACnBjN,IAAI,CAACiN,UAAL,CAAgBxR,MAAhB,GAAyB,CAAhC,EAAmC;MACjCuE,IAAI,CAACoN,eAAL,CAAqBpN,IAAI,CAACiN,UAAL,CAAgB,CAAhB,EAAmBvB,IAAxC;;;qBAGc5H,KAAhB,EAAuBiE,OAAvB,CAA+B,UAAA7D,GAAG,EAAI;MACpClE,IAAI,CAACmN,YAAL,CAAkBjJ,GAAlB,EAAuBJ,KAAK,CAACI,GAAD,CAA5B;KADF;;;SAKKlE,IAAP;;;ACbF;;ACAO,IAAMqN,OAAO,GAAG,IAAI7S,MAAJ,CAAW,WAAX,EAAwB,GAAxB,CAAhB;AACP,IAAM8S,QAAQ,GAAG,kBAAjB;AACA,AAAO,IAAMC,QAAQ,GAAG,IAAI/S,MAAJ,WAAc8S,QAAd,GAA0B,GAA1B,CAAjB;AACP,AAAO,IAAME,SAAS,GAAG,IAAIhT,MAAJ,WACpB8S,QADoB,kCAEvB,GAFuB,CAAlB;AAKP,AAAO,IAAMG,cAAc,GAAG,CAAC,QAAD,EAAW,OAAX,EAAoB,MAApB,EAA4B7Q,IAA5B,CAAiC,GAAjC,CAAvB;;ACHP;;;;;AAIA,AAAe,SAAS8Q,uBAAT,CAAiC/N,CAAjC,EAAoC;MAC3CgO,kBAAkB,GAAG,SAArBA,kBAAqB,CAAAvQ,GAAG,EAAI;QAC5B;wBACcwQ,IAAI,CAAC7R,KAAL,CAAWqB,GAAX,CADd;UACMyQ,GADN,eACMA,GADN;;UAEE,OAAOA,GAAP,KAAe,QAAnB,EAA6B,OAAOA,GAAP;KAF/B,CAGE,OAAO9N,CAAP,EAAU;aACH,KAAP;;;WAGK,KAAP;GARF;;EAWAJ,CAAC,CAAC,KAAD,CAAD,CAASG,IAAT,CAAc,UAACC,CAAD,EAAI6E,GAAJ,EAAY;QAClBd,KAAK,GAAGC,QAAQ,CAACa,GAAD,CAAtB;;qBAEgBd,KAAhB,EAAuBiE,OAAvB,CAA+B,UAAA5H,IAAI,EAAI;UAC/BD,KAAK,GAAG4D,KAAK,CAAC3D,IAAD,CAAnB;;UAEIA,IAAI,KAAK,QAAT,IAAqBkN,OAAO,CAAChT,IAAR,CAAa6F,KAAb,CAArB,IAA4CsN,SAAS,CAACnT,IAAV,CAAe6F,KAAf,CAAhD,EAAuE;QACrEP,CAAC,CAACiF,GAAD,CAAD,CAAOzE,IAAP,CAAY,QAAZ,EAAsBD,KAAtB;OADF,MAEO,IACLC,IAAI,KAAK,KAAT,IACAA,IAAI,KAAK,QADT,IAEAkN,OAAO,CAAChT,IAAR,CAAa6F,KAAb,CAFA,IAGAqN,QAAQ,CAAClT,IAAT,CAAc6F,KAAd,CAJK,EAKL;;YAEM4N,WAAW,GAAGH,kBAAkB,CAACzN,KAAD,CAAtC;;YACI4N,WAAJ,EAAiB;UACfnO,CAAC,CAACiF,GAAD,CAAD,CAAOzE,IAAP,CAAY,KAAZ,EAAmB2N,WAAnB;SADF,MAEO;UACLnO,CAAC,CAACiF,GAAD,CAAD,CAAOzE,IAAP,CAAY,KAAZ,EAAmBD,KAAnB;;;KAhBN;GAHF;SAyBOP,CAAP;;;AC5CF,SAASoO,SAAT,CAAmBzS,KAAnB,EAA0B0E,IAA1B,EAAgC;SACvBA,IAAI,CAAC4L,IAAL,KAAc,SAArB;;;AAGF,SAASoC,aAAT,CAAuBrO,CAAvB,EAA0B;EACxBA,CAAC,CAACsO,IAAF,GACG9T,IADH,CACQ,GADR,EAEGiK,QAFH,GAGGqH,MAHH,CAGUsC,SAHV,EAIG5L,MAJH;SAMOxC,CAAP;;;AAGF,AAAe,SAASuO,KAAT,CAAevO,CAAf,EAAkB;EAC/BA,CAAC,CAAC8N,cAAD,CAAD,CAAkBtL,MAAlB;EAEAxC,CAAC,GAAGqO,aAAa,CAACrO,CAAD,CAAjB;SACOA,CAAP;;;ACbF,IAAMwO,QAAQ,GAAG;;;;;;;;EAQTC,MARS;;;8CAQFpU,GARE,EAQGqU,gBARH,EAQqBxS,SARrB;;;;;;;;;cAQgCgD,OARhC,2DAQ0C,EAR1C;;mBAWTwP,gBAXS;;;;;cAYLC,aAZK,GAYW;gBACpB7P,aAAa,EAAE,IADK;gBAEpBC,UAAU,EAAE,GAFQ;gBAGpBG,OAAO,EAAE;kCACS,WADT;oCAEW;;eAjBX;cAqBX0P,MAAM,GAAG;gBACPjQ,IAAI,EAAE+P,gBADC;gBAEPhQ,QAAQ,EAAEiQ,aAFH;gBAGPE,cAAc,EAAE;eAHlB;;;;;;qBAMexP,aAAa,CAAChF,GAAD,EAAM6B,SAAN,EAAiBgD,OAAjB,CA3BjB;;;cA2BX0P,MA3BW;;;mBA8BTA,MAAM,CAAC3P,KA9BE;;;;;cA+BX2P,MAAM,CAACE,MAAP,GAAgB,IAAhB;+CACOF,MAhCI;;;+CAmCN,KAAKG,WAAL,CAAiBH,MAAjB,CAnCM;;;;;;;;;;;;;;;;EAsCfG,WAtCe,6BAsCkD;QAA7C1R,OAA6C,QAAnDsB,IAAmD;QAApCD,QAAoC,QAApCA,QAAoC;mCAA1BmQ,cAA0B;QAA1BA,cAA0B,oCAAT,KAAS;gCAClBnQ,QAAQ,CAACQ,OADS,CACvD,cADuD;QACvCC,WADuC,sCACzB,EADyB;;;QAK3D,CAACA,WAAW,CAACtC,QAAZ,CAAqB,MAArB,CAAD,IAAiC,CAACsC,WAAW,CAACtC,QAAZ,CAAqB,MAArB,CAAtC,EAAoE;YAC5D,IAAImC,KAAJ,CAAU,qCAAV,CAAN;;;QAGEgB,CAAC,GAAG,KAAKgP,SAAL,CAAe;MAAE3R,OAAO,EAAPA,OAAF;MAAW8B,WAAW,EAAXA,WAAX;MAAwB0P,cAAc,EAAdA;KAAvC,CAAR;;QAEI7O,CAAC,CAACsO,IAAF,GAAS3K,QAAT,GAAoB7H,MAApB,KAA+B,CAAnC,EAAsC;YAC9B,IAAIkD,KAAJ,CAAU,kCAAV,CAAN;;;IAGFgB,CAAC,GAAGU,iBAAiB,CAACV,CAAD,CAArB;IACAA,CAAC,GAAG+N,uBAAuB,CAAC/N,CAAD,CAA3B;IACAA,CAAC,GAAGuO,KAAK,CAACvO,CAAD,CAAT;WAEOA,CAAP;GAzDa;EA4DfgP,SA5De,4BA4D6C;QAAhD3R,OAAgD,SAAhDA,OAAgD;QAAvC8B,WAAuC,SAAvCA,WAAuC;qCAA1B0P,cAA0B;QAA1BA,cAA0B,qCAAT,KAAS;;QACtDA,cAAJ,EAAoB;aACX/Q,OAAO,CAACmR,IAAR,CAAa5R,OAAb,CAAP;;;QAGIK,QAAQ,GAAGF,WAAW,CAAC2B,WAAD,CAA5B;QACI+P,cAAc,GAAGvR,KAAK,CAACwR,MAAN,CAAa9R,OAAb,EAAsBK,QAAtB,CAArB;QACIsC,CAAC,GAAGlC,OAAO,CAACmR,IAAR,CAAaC,cAAb,CAAR,CAP0D;;QASpDE,mBAAmB,GAAGtR,OAAO,CAACC,OAAR,GACxB,+BADwB,GAExB,iCAFJ;QAGMsR,eAAe,GACnBrP,CAAC,CAACoP,mBAAD,CAAD,CAAuB5O,IAAvB,CAA4B,SAA5B,KACAR,CAAC,CAAC,eAAD,CAAD,CAAmBQ,IAAnB,CAAwB,SAAxB,CAFF;QAGM8O,cAAc,GAAG9R,WAAW,CAAC6R,eAAD,CAAlC,CAf0D;;QAkBtDA,eAAe,IAAIC,cAAc,KAAK5R,QAA1C,EAAoD;MAClDwR,cAAc,GAAGvR,KAAK,CAACwR,MAAN,CAAa9R,OAAb,EAAsBiS,cAAtB,CAAjB;MACAtP,CAAC,GAAGlC,OAAO,CAACmR,IAAR,CAAaC,cAAb,CAAJ;;;WAGKlP,CAAP;;CAnFJ;;;;yBCPyBuP;;AAAzB,AAAe,SAAUA,KAAV;;;;;;;;UAAgBC,KAAhB,2DAAwB,CAAxB;UAA2BC,GAA3B,2DAAiC,CAAjC;;;gBACND,KAAK,IAAIC,GADH;;;;;;iBAEJD,KAAK,IAAI,CAAhB;;;;;;;;;;;;;;ACFJ;AACA,AAAe,SAASE,WAAT,OAAmC;MAAZrK,QAAY,QAAZA,QAAY;;SAEzC,CAAC,CAACA,QAAT;;;ACHF,IAAMsK,KAAK,GAAG,SAARA,KAAQ,CAACC,SAAD,EAAYC,OAAZ;SACZA,OAAO,CAACnT,MAAR,CAAe,UAACC,GAAD,EAAMmT,MAAN,EAAiB;IAC9BnT,GAAG,CAACmT,MAAD,CAAH,GAAcF,SAAd;WACOjT,GAAP;GAFF,EAGG,EAHH,CADY;CAAd;;AAMA,AAAe,SAASoT,qBAAT,CAA+BH,SAA/B,EAA0C;SAChDA,SAAS,CAACI,gBAAV,GACHL,KAAK,CAACC,SAAD,GAAaA,SAAS,CAACE,MAAvB,4BAAkCF,SAAS,CAACI,gBAA5C,GADF,GAEHL,KAAK,CAACC,SAAD,EAAY,CAACA,SAAS,CAACE,MAAX,CAAZ,CAFT;;;ACLK,IAAMG,aAAa,GAAG,EAAtB;AAEP,AAAe,SAASC,YAAT,CAAsBN,SAAtB,EAAiC;MAC1C,CAACA,SAAD,IAAc,CAACA,SAAS,CAACE,MAA7B,EAAqC;WAC5B;MACL7Q,KAAK,EAAE,IADF;MAELa,OAAO,EAAE;KAFX;;;iBAMYmQ,aAAd,EAA6BF,qBAAqB,CAACH,SAAD,CAAlD;;SAEOK,aAAP;;;ACdK,IAAME,gBAAgB,GAAG;EAC9BL,MAAM,EAAE,cADsB;EAE9BzS,OAAO,EAAE;;;;IAIPsP,SAAS,EAAE,CAAC,wBAAD,CAJJ;;IAOP4B,KAAK,EAAE,EAPA;;IAUP6B,UAAU,EAAE;MACVC,QAAQ,EAAE;;GAbgB;EAiB9BC,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,mBAAD;GAlBiB;EAqB9BxC,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD;GAtBiB;EAyB9B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,kBAAD;;CA1BR;;ACAA,IAAM6D,cAAc,GAAG;EAC5BV,MAAM,EAAE,WADoB;EAE5BzS,OAAO,EAAE;;IAEPsP,SAAS,EAAE,CAAC,qBAAD,EAAwB,cAAxB,EAAwC,iBAAxC,CAFJ;;IAKP4B,KAAK,EAAE,CAAC,KAAD,EAAQ,uBAAR,CALA;;;;;;;IAaP6B,UAAU,EAAE;;MAEVK,EAAE,EAAE,IAFM;;MAKVJ,QAAQ,EAAE,kBAAC/P,KAAD,EAAQN,CAAR,EAAc;YAChB0Q,SAAS,GAAG1Q,CAAC,CAACjC,OAAF,GAAYiC,CAAC,CAACM,KAAK,CAACrG,IAAN,EAAD,CAAb,GAA8BqG,KAAK,CAACqD,QAAN,EAAhD;;YAEE+M,SAAS,CAAC5U,MAAV,KAAqB,CAArB,IACA4U,SAAS,CAACtS,GAAV,CAAc,CAAd,MAAqB8O,SADrB,IAEAwD,SAAS,CAACtS,GAAV,CAAc,CAAd,EAAiB2E,OAAjB,CAAyBhH,WAAzB,OAA2C,KAH7C,EAIE;iBACO,QAAP;;;eAGK,IAAP;;;GA9BsB;EAmC5BoO,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,uBAAD,EAA0B,qBAA1B,EAAiD,IAAjD;GApCe;EAuC5B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,aAAD,EAAgB,sBAAhB;GAxCe;EA2C5BgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,sBAAD;GA5Ce;EA+C5B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,kCAAD,EAAqC,UAArC,CADS,EAET,wBAFS;;CAhDR;;ACAA,IAAMiE,kBAAkB,GAAG;EAChCd,MAAM,EAAE,eADwB;EAEhCzS,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;;IAMPT,UAAU,EAAE;sBACM,oBAAA9P,KAAK,EAAI;YACjB2H,OAAO,GAAG3H,KAAK,CAAC0D,OAAN,CAAc,UAAd,CAAhB,CADuB;;YAGnBiE,OAAO,CAACtE,QAAR,CAAiB,KAAjB,EAAwB7H,MAAxB,KAAmC,CAAvC,EAA0C;UACxCmM,OAAO,CAAC6I,OAAR,CAAgBxQ,KAAhB;;OALM;0BAQU,YARV;kBASE;KAfP;;IAmBPiO,KAAK,EAAE,CACL,iBADK,EAEL,oCAFK,EAGL,MAHK,EAIL,SAJK;GArBuB;EA6BhC+B,MAAM,EAAE,wBA7BwB;EA+BhCnG,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,UAAD;GAhCmB;EAmChC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,sBAAD;;CApCR;;ACAA,IAAMoE,gBAAgB,GAAG;EAC9BjB,MAAM,EAAE,aADsB;EAG9BzS,OAAO,EAAE;IACP+S,UAAU,EAAE;;;;;+BAKe,2BAAC9P,KAAD,EAAQN,CAAR,EAAc;YAC/BgR,MAAM,GAAG1Q,KAAK,CAAC9F,IAAN,CAAW,QAAX,CAAf;YACMyW,eAAe,GAAGjR,CAAC,CAAC,iCAAD,CAAzB;QACAiR,eAAe,CAACnI,MAAhB,CAAuBkI,MAAvB;QACA1Q,KAAK,CAACgD,WAAN,CAAkB2N,eAAlB;OATQ;;;MAcVC,CAAC,EAAE;KAfE;IAkBPvE,SAAS,EAAE,CAAC,uBAAD,CAlBJ;IAoBPkE,cAAc,EAAE,KApBT;IAsBPtC,KAAK,EAAE,CAAC,qBAAD,EAAwB,QAAxB,EAAkC,sBAAlC;GAzBqB;EA4B9B+B,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kCAAD;GA7BiB;EAgC9B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,4CAAD,EAA+C,cAA/C,CAAD;;CAjCR;;ACAA,IAAMwE,gBAAgB,GAAG;EAC9BrB,MAAM,EAAE,iBADsB;EAG9B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,4BADS,EAET,eAFS,EAGT,yBAHS,EAIT,aAJS,EAKT,sBALS;GAJiB;EAa9B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,qBAAD,EAAwB,OAAxB,CADS,EAET,WAFS,EAGT,SAHS,EAIT,CAAC,kBAAD,EAAqB,OAArB,CAJS;GAdiB;EAsB9BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,EAAiB,6BAAjB,EAAgD,eAAhD,CADJ;IAGPyD,UAAU,EAAE;oBACI,kBAAA9P,KAAK,EAAI;YACjB4N,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,KAAX,CAAV;YACMqE,KAAK,GAAG,GAAd;QAEAqJ,GAAG,GAAGA,GAAG,CAAChU,OAAJ,CAAY,UAAZ,EAAwB2K,KAAxB,CAAN;QACAvE,KAAK,CAACE,IAAN,CAAW,KAAX,EAAkB0N,GAAlB;;KATG;IAaPK,KAAK,EAAE,CACL,KADK,EAEL,qBAFK,EAGL,2BAHK,EAIL,kBAJK,EAKL,mBALK,EAML,QANK,EAOL,kBAPK,EAQL,SARK,EASL,WATK,EAUL,eAVK,EAWL,YAXK,EAYL,qBAZK;GAnCqB;EAmD9BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,gCAAD,EAAmC,OAAnC,CAFS;GApDiB;EA0D9ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA3DiB;EA8D9BgE,GAAG,EAAE,IA9DyB;EAgE9BU,aAAa,EAAE,IAhEe;EAkE9BC,OAAO,EAAE;CAlEJ;;ACAP;;AAEA,AAAO,IAAMC,oBAAoB,GAAG;EAClCzB,MAAM,EAAE,qBAD0B;EAElC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,wBAAP;GAHqB;EAMlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD,EAAmC,mBAAnC;GAPqB;EAUlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,EAAY,eAAZ,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CACL,cADK,EAEL,UAFK,EAGL,0BAHK,EAIL,4BAJK,EAKL,sBALK,EAML,iBANK,EAOL,uBAPK,EAQL,gBARK;GApByB;EAgClCoC,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD;GAjCqB;EAoClC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,gCAAD,EAAmC,UAAnC,CAAD;GArCqB;EAwClCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAzCqB;EA4ClC0E,aAAa,EAAE,IA5CmB;EA8ClCC,OAAO,EAAE;CA9CJ;;ACFP;;;AAGA,AAAO,IAAME,kBAAkB,GAAG;EAChC1B,MAAM,EAAE,mBADwB;EAEhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,6BADS,EAET,iCAFS,EAGT,+BAHS,EAIT,CAAC,uBAAD,EAA0B,OAA1B,CAJS;GAHmB;EAWhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,6CADS,EAET,CAAC,6BAAD,EAAgC,OAAhC,CAFS,EAGT,mDAHS,EAIT,2DAJS;GAZmB;EAoBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,gBADS,EAET,8BAFS,EAGT,gCAHS,CADJ;;;IASPyD,UAAU,EAAE;wBACQ,YADR;0BAEU;KAXf;;;;IAiBP7B,KAAK,EAAE,CAAC,wCAAD,EAA2C,OAA3C;GArCuB;EAwChCgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,mCAFS,EAGT,CAAC,sBAAD,EAAyB,OAAzB,CAHS,CADG;IAMd8E,QAAQ,EAAE;GA9CoB;EAiDhCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlDmB;EAqDhCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CACT,gCADS,EAET,yBAFS,EAGT,iCAHS;GAtDmB;EA6DhC0E,aAAa,EAAE,IA7DiB;EA+DhCC,OAAO,EAAE;CA/DJ;;ACHP;;;AAGA,AAAO,IAAMI,cAAc,GAAG;EAC5B5B,MAAM,EAAE,eADoB;EAE5B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,oCADS;GAHe;EAS5B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,6BAAD,EAAgC,OAAhC,CADS,EAET,iBAFS;GAVe;EAiB5BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,8BADS,EAET,iBAFS,CADJ;;;IASPyD,UAAU,EAAE,EATL;;;;IAcP7B,KAAK,EAAE,CAAC,kBAAD,EAAqB,sBAArB,EAA6C,gBAA7C;GA/BmB;EAkC5BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAnCe;EAsC5ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvCe;EA0C5BgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GA3Ce;EA8C5B0E,aAAa,EAAE,IA9Ca;EAgD5BC,OAAO,EAAE;CAhDJ;;ACHP;;;AAGA,AAAO,IAAMK,YAAY,GAAG;EAC1B7B,MAAM,EAAE,aADkB;EAE1B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,IADS;GAHa;EAS1B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,qBADS;GAVa;EAgB1BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,cADS,CADJ;;;IAQPyD,UAAU,EAAE,EARL;;;;IAaP7B,KAAK,EAAE,CAAC,cAAD;GA7BiB;EAgC1BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,WAAD;GAjCa;EAoC1ByE,cAAc,EAAE;IACdzE,SAAS,EAAE;GArCa;EAwC1BgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GAzCa;EA4C1B0E,aAAa,EAAE,IA5CW;EA8C1BC,OAAO,EAAE;CA9CJ;;ACHP;;;AAGA,AAAO,IAAMM,cAAc,GAAG;EAC5B9B,MAAM,EAAE,eADoB;EAE5B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,sBADS;GAHe;EAS5B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,oBADS;GAVe;EAgB5BtP,OAAO,EAAE;IACPsP,SAAS,EAAE;qBAAA,CADJ;;;IAQPyD,UAAU,EAAE,EARL;;;;IAaP7B,KAAK,EAAE,CAAC,iBAAD;GA7BmB;EAgC5BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,UAAxB,CAAD;GAjCe;EAoC5ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GArCe;EAwC5BgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAzCe;EA8C5B0E,aAAa,EAAE,IA9Ca;EAgD5BC,OAAO,EAAE;CAhDJ;;ACHP;;;AAGA,AAAO,IAAMO,iBAAiB,GAAG;EAC/B/B,MAAM,EAAE,kBADuB;EAG/BE,gBAAgB,EAAE,CAAC,sBAAD,CAHa;EAK/B7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,yBADS;GANkB;EAY/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,gCADS,EAET,gBAFS,EAGT,CAAC,qBAAD,EAAwB,OAAxB,CAHS;GAbkB;EAqB/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,gDAAD,EAAmD,qBAAnD,CADS,EAET,CAAC,qBAAD,CAFS,CADJ;IAMPkE,cAAc,EAAE,KANT;;;IAUPT,UAAU,EAAE;MACV0B,EAAE,EAAE,GADM;0CAG0B,yCAAAxR,KAAK,EAAI;YACvCA,KAAK,CAACyR,GAAN,CAAU,KAAV,KAAoBzR,KAAK,CAACyR,GAAN,CAAU,+BAAV,CAAxB,EAAoE;iBAC3D,QAAP;;;eAGK,IAAP;OARQ;2EAYR;KAtBG;;;;IA4BPxD,KAAK,EAAE,CACL,oBADK,EAEL,uEAFK,EAGL,YAHK,EAIL,QAJK,EAKL,sBALK,EAML,kBANK;GAjDsB;EA2D/BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,gBAAD,EAAmB,UAAnB,CAAD;GA5DkB;EA+D/ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhEkB;EAmE/BgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,6BAAD;GApEkB;EAuE/B0E,aAAa,EAAE,IAvEgB;EAyE/BC,OAAO,EAAE;CAzEJ;;ACHP;;;AAGA,AAAO,IAAMU,cAAc,GAAG;EAC5BlC,MAAM,EAAE,kBADoB;EAE5B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,gBADS;GAHe;EAS5B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,eADS,EAET,KAFS;GAVe;EAiB5BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,eADS,EAET,gBAFS,CADJ;;;IASPyD,UAAU,EAAE,EATL;;;;IAcP7B,KAAK,EAAE;GA/BmB;EAkC5BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAnCe;EAsC5ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvCe;EA0C5BgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GA3Ce;EA8C5B0E,aAAa,EAAE,IA9Ca;EAgD5BC,OAAO,EAAE;CAhDJ;;ACHP;;;AAGA,AAAO,IAAMW,qBAAqB,GAAG;EACnCnC,MAAM,EAAE,sBAD2B;EAEnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,yBADS,EAET,eAFS;GAHsB;EAUnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,+CADS,EAET,CAAC,qBAAD,EAAwB,OAAxB,CAFS;GAXsB;EAkBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE;uCAAA,EAGT,mBAHS,EAIT,kBAJS,CADJ;;;IAUPyD,UAAU,EAAE,EAVL;;;;IAeP7B,KAAK,EAAE;GAjC0B;EAoCnC6C,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GArCsB;EAwCnC0E,aAAa,EAAE,IAxCoB;EA0CnCC,OAAO,EAAE;CA1CJ;;ACHA,IAAMY,iBAAiB,GAAG;EAC/BpC,MAAM,EAAE,kBADuB;EAE/B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAHkB;EAM/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,8CAAD,EAAiD,OAAjD,CADS,EAET,6BAFS,EAGT,oCAHS;GAPkB;EAc/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,aAAD,CAAD,EAAkB,qBAAlB,EAAyC,aAAzC,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE,CAAC,YAAD,EAAe,aAAf,EAA8B,KAA9B;GAnBsB;EAsB/BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,gCAAD,EAAmC,UAAnC,CADS,EAET,CAAC,qCAAD,EAAwC,UAAxC,CAFS,EAGT,CAAC,+CAAD,EAAkD,UAAlD,CAHS,CADG;IAMd8E,QAAQ,EAAE;GA5BmB;EA+B/BL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhCkB;EAmC/BgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;;CApCR;;ACAA,IAAMwF,iBAAiB,GAAG;EAC/BrC,MAAM,EAAE,cADuB;EAG/BE,gBAAgB,EAAE,CAChB,aADgB,EAEhB,gBAFgB,EAGhB,YAHgB,EAIhB,aAJgB,EAKhB,cALgB,EAMhB,WANgB,EAOhB,YAPgB,EAQhB,eARgB,EAShB,kBATgB,EAUhB,cAVgB,EAWhB,aAXgB,EAYhB,gBAZgB,EAahB,kBAbgB,CAHa;EAmB/B7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,WAAD,EAAc,aAAd;GApBkB;EAuB/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,sBAAD,EAAyB,SAAzB;GAxBkB;EA2B/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,EAAqB,eAArB,EAAsC,gBAAtC,CADJ;;;IAKPyD,UAAU,EAAE;0DAC0C,8CAAA9P,KAAK,EAAI;YACrD8R,SAAS,GAAG9R,KAAK,CAACE,IAAN,CAAW,IAAX,EAAiBhF,KAAjB,CAAuB,UAAvB,EAAmC,CAAnC,CAAlB;QACA8E,KAAK,CAACE,IAAN,CAAW,KAAX,0CAAmD4R,SAAnD;;KARG;;;;IAeP7D,KAAK,EAAE,CAAC,YAAD,EAAe,WAAf;GA1CsB;EA6C/BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,wBAAD,EAA2B,UAA3B,CAFS;GA9CkB;EAoD/ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GArDkB;EAwD/BgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAzDkB;EA8D/B0E,aAAa,EAAE;IACb1E,SAAS,EAAE;;GA/DkB;EAoE/B2E,OAAO,EAAE;IACP3E,SAAS,EAAE;;;CArER;;ACAP;;;AAGA,AAAO,IAAM0F,sBAAsB,GAAG;EACpCvC,MAAM,EAAE,uBAD4B;EAEpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,uBAAD,EAA0B,kBAA1B;GAHuB;EAMpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,uBAAD;GAPuB;EAUpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,2BAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;GApB2B;EAuBpCgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,8BAAD,EAAiC,OAAjC,CAAD;GAxBuB;EA2BpCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA5BuB;EA+BpCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GAhCuB;EAmCpC0E,aAAa,EAAE;IACb1E,SAAS,EAAE;;GApCuB;EAyCpC2E,OAAO,EAAE;IACP3E,SAAS,EAAE;;;CA1CR;;ACHP;;;AAGA,AAAO,IAAM2F,yBAAyB,GAAG;EACvCxC,MAAM,EAAE,0BAD+B;EAEvC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,aAAD;GAH0B;EAMvC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,mBAAD;GAP0B;EAUvCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;;;IAKPyD,UAAU,EAAE;wDACwC,+CAAC9P,KAAD,EAAQN,CAAR,EAAc;YACxDuS,IAAI,GAAGtE,IAAI,CAAC7R,KAAL,CAAWkE,KAAK,CAACE,IAAN,CAAW,YAAX,CAAX,CAAb;YACQ0N,GAFsD,GAE9CqE,IAAI,CAACC,OAAL,CAAa,CAAb,CAF8C,CAEtDtE,GAFsD;YAGxDvJ,IAAI,GAAG3E,CAAC,CAAC,SAAD,CAAD,CAAaQ,IAAb,CAAkB,KAAlB,EAAyB0N,GAAzB,CAAb;QACA5N,KAAK,CAACgD,WAAN,CAAkBqB,IAAlB;;KAVG;;;;IAiBP4J,KAAK,EAAE;GA3B8B;EA8BvCgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,kCAAD,EAAqC,UAArC,CAAD;GA/B0B;EAkCvCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnC0B;EAsCvCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GAvC0B;EA0CvC0E,aAAa,EAAE;IACb1E,SAAS,EAAE;;GA3C0B;EAgDvC2E,OAAO,EAAE;IACP3E,SAAS,EAAE;;;CAjDR;;ACHA,IAAM8F,eAAe,GAAG;EAC7B3C,MAAM,EAAE,YADqB;EAG7B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,CAAC,uBAAD,EAA0B,OAA1B,CAAP;GAJgB;EAO7B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARgB;EAW7BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,CADJ;;;IAKPyD,UAAU,EAAE;;oCAEoB,gCAAA9P,KAAK,EAAI;YAC/BoS,KAAK,GAAGpS,KAAK,CAACkE,IAAN,EAAd;;YACIkO,KAAK,CAAC5W,MAAN,KAAiB,CAAjB,IAAsB,gBAAgBpB,IAAhB,CAAqBgY,KAArB,CAA1B,EAAuD;UACrDpS,KAAK,CAACgD,WAAN,CAAkBoP,KAAlB;;OALM;;MASVC,MAAM,EAAE,gBAAArS,KAAK,EAAI;YACTsS,IAAI,GAAG,kEAAb;YACMC,KAAK,GAAGC,kBAAkB,CAACxS,KAAK,CAACE,IAAN,CAAW,gBAAX,CAAD,CAAhC;YACMyH,OAAO,GAAG3H,KAAK,CAAC0D,OAAN,CAAc,QAAd,CAAhB;;YAEI4O,IAAI,CAAClY,IAAL,CAAUmY,KAAV,CAAJ,EAAsB;6BACGA,KAAK,CAACxX,KAAN,CAAYuX,IAAZ,CADH;;cACbxS,CADa;cACVgS,SADU;;;UAEpB9R,KAAK,CAACE,IAAN,CAAW,KAAX,0CAAmD4R,SAAnD;cACMW,QAAQ,GAAG9K,OAAO,CAACzN,IAAR,CAAa,YAAb,CAAjB;UACAyN,OAAO,CAAC+K,KAAR,GAAgBlK,MAAhB,CAAuB,CAACxI,KAAD,EAAQyS,QAAR,CAAvB;;SATa;;;QAcf9K,OAAO,CAACzF,MAAR;OAvBQ;;MA2BVyQ,MAAM,EAAE,gBAAA3S,KAAK,EAAI;;YAEXA,KAAK,CAAC9F,IAAN,CAAW,QAAX,EAAqBsB,MAArB,GAA8B,CAAlC,EAAqC;YAE/B6I,IAAI,GAAGrE,KAAK,CAAC9F,IAAN,CAAW,KAAX,EAAkB+C,KAAlB,CAAwB,CAAC,CAAzB,EAA4B,CAA5B,CAAb;YACMwV,QAAQ,GAAGzS,KAAK,CAAC9F,IAAN,CAAW,YAAX,CAAjB;QAEA8F,KAAK,CAAC0S,KAAN,GAAclK,MAAd,CAAqB,CAACnE,IAAD,EAAOoO,QAAP,CAArB;OAlCQ;;;MAuCV9N,GAAG,EAAE,aAAA3E,KAAK,EAAI;YACNuE,KAAK,GAAG,UAASvE,KAAK,CAACE,IAAN,CAAW,OAAX,CAAT,EAA8B,EAA9B,CAAd;;YACIqE,KAAK,GAAG,GAAZ,EAAiBvE,KAAK,CAACkC,MAAN;;KA9Cd;;;;IAqDP+L,KAAK,EAAE,CAAC,QAAD,EAAW,KAAX;GAhEoB;EAmE7BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GApEgB;EAuE7ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAxEgB;EA2E7BgE,GAAG,EAAE,IA3EwB;EA6E7BU,aAAa,EAAE;IACb1E,SAAS,EAAE;;GA9EgB;EAmF7B2E,OAAO,EAAE;IACP3E,SAAS,EAAE;;;CApFR;;ACAA,IAAMuG,kBAAkB,GAAG;EAChCpD,MAAM,EAAE,aADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,wBAAD,EAA2B,IAA3B,EAAiC,WAAjC;GAJmB;EAOhC2D,MAAM,EAAE,WAPwB;EAShCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,wBAAD,EAA2B,sBAA3B,CADG;IAGd8E,QAAQ,EAAE;GAZoB;EAehCd,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAhBmB;EAqBhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBmB;EAyBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,EAAqB,kBAArB,EAAyC,gBAAzC,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,gBAAD;;CAnCJ;;ACAA,IAAM4E,6BAA6B,GAAG;EAC3CrD,MAAM,EAAE,wBADmC;EAG3C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,0BAAP;GAJ8B;EAO3C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iBAAD;GAR8B;EAW3C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,6CAAD,EAAgD,SAAhD,CAAD;GAZ8B;EAe3CgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GAhB8B;EAmB3CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApB8B;EAuB3CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,CADJ;;;IAKPyD,UAAU,EAAE;4BACY,0BAAA9P,KAAK,EAAI;YACzBA,KAAK,CAACyR,GAAN,CAAU,kBAAV,EAA8BjW,MAA9B,GAAuC,CAA3C,EAA8C;iBACrC,QAAP;;;QAGFwE,KAAK,CAACkC,MAAN;eACO,IAAP;OAPQ;qBASK;KAdV;;;;IAoBP+L,KAAK,EAAE,CAAC,oBAAD,EAAuB,yBAAvB;;CA3CJ;;ACAA,IAAM6E,6BAA6B,GAAG;EAC3CtD,MAAM,EAAE,wBADmC;EAG3C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,oBAAD;GAJ8B;EAO3C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iCAAD;GAR8B;EAW3C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,oCAAD,EAAuC,OAAvC,CADS,EAET,CAAC,qCAAD,EAAwC,OAAxC,CAFS;GAZ8B;EAkB3CgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,uBAAD;GAnB8B;EAsB3CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvB8B;EA0B3CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,iBAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;;;IAOPT,UAAU,EAAE,EAPL;;;;IAYP7B,KAAK,EAAE,CACL,aADK,EAEL,YAFK,EAGL,cAHK,EAIL,cAJK,EAKL,oBALK,EAML,kBANK;;CAtCJ;;ACAA,IAAM8E,uBAAuB,GAAG;EACrCvD,MAAM,EAAE,iBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qBAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iBAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD,CADG;IAGd8E,QAAQ,EAAE;GAdyB;EAiBrCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,oBAAD;GAlBwB;EAqBrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBwB;EAyBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,kBAAD,CAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,OAAD;;CAnCJ;;ACAA,IAAM+E,oBAAoB,GAAG;EAClCxD,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD,EAAmC,WAAnC;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,mBAAD,EAAsB,OAAtB,CAAD,CADG;IAGd8E,QAAQ,EAAE;GAdsB;EAiBlCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,eAAD;GAlBqB;EAqBlCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBqB;EAyBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,YAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,iBAAD;;CAnCJ;;ACAA,IAAMgF,uBAAuB,GAAG;EACrCzD,MAAM,EAAE,kBAD6B;EAGrCE,gBAAgB,EAAE,CAAC,iBAAD,CAHmB;EAKrC7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GANwB;EASrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GAVwB;EAarC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAdwB;EAiBrCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,QAAD;GAlBwB;EAqBrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBwB;EAyBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE;KAER,wBAAD,EAA2B,gBAA3B,EAA6C,kBAA7C,CAFS;KAIR,gBAAD,EAAmB,kBAAnB,CAJS;2BAAA;yBAAA,CADJ;;IAaPyD,UAAU,EAAE;MACVC,QAAQ,EAAE,kBAAA/P,KAAK,EAAI;YACXoQ,SAAS,GAAGpQ,KAAK,CAACqD,QAAN,EAAlB;;YACI+M,SAAS,CAAC5U,MAAV,KAAqB,CAArB,IAA0B4U,SAAS,CAACtS,GAAV,CAAc,CAAd,EAAiB2E,OAAjB,KAA6B,KAA3D,EAAkE;iBACzD,MAAP;;;eAGK,IAAP;;KApBG;;;;IA2BPwL,KAAK,EAAE,CACL,QADK,EAEL,qBAFK;;CApDJ;;ACAA,IAAMiF,kBAAkB,GAAG;EAChC1D,MAAM,EAAE,aADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD,EAAmB,IAAnB;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZmB;EAehCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBmB;EAmBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE;KAER,0BAAD,EAA6B,eAA7B,CAFS;mBAAA,EAKT,6BALS,CADJ;;;IAWPyD,UAAU,EAAE;gEACgD,wDAAA9P,KAAK,EAAI;YAC3DoS,KAAK,GAAGpS,KAAK,CAACkE,IAAN,EAAd;;YACIkO,KAAJ,EAAW;iBACF,GAAP;;;eAGK,IAAP;OAPQ;;;6BAYa,2BAAApS,KAAK,EAAI;YAC1BA,KAAK,CAACyR,GAAN,CAAU,GAAV,CAAJ,EAAoB;cAEhBzR,KAAK,CAACrG,IAAN,GAAaE,IAAb,OACAmG,KAAK,CACF9F,IADH,CACQ,GADR,EAEGP,IAFH,GAGGE,IAHH,EAFF,EAME;YACAmG,KAAK,CAACkC,MAAN;;;OArBI;kCA0BkB;KArCvB;;;;IA2CP+L,KAAK,EAAE;;CA9DJ;;ACAA,IAAMkF,kBAAkB,GAAG;EAChC3D,MAAM,EAAE,aADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qBAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,0BAAD,CADG;IAGd8E,QAAQ,EAAE;GAdoB;EAiBhCd,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAlBmB;EAuBhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAxBmB;EA2BhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CArCJ;;ACAA,IAAMmF,sBAAsB,GAAG;EACpC5D,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,CAAC,oBAAD,EAAuB,OAAvB,CADS,EAET,cAFS,EAGT,0BAHS;GAJuB;EAWpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,SAA1B,CAAD,EAAuC,eAAvC;GAZuB;EAepC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,gCAAD,EAAmC,OAAnC,CAAD,CADG;IAGd8E,QAAQ,EAAE;GAlBwB;EAqBpCd,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAtBuB;EA2BpCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA5BuB;EA+BpCtP,OAAO,EAAE;IACPwT,cAAc,EAAE,KADT;IAGPlE,SAAS,EAAE,CACT,yBADS,EAET,6DAFS,EAGT,CAAC,aAAD,EAAgB,cAAhB,CAHS,CAHJ;;;IAWPyD,UAAU,EAAE;qBACK,mBAAC9P,KAAD,EAAQN,CAAR,EAAc;YACrB2T,OAAO,GAAG3T,CAAC,CAAC,0BAAD,CAAD,CAA8BQ,IAA9B,CAAmC,OAAnC,CAAhB;QACAF,KAAK,CAACkE,IAAN,mEAC+CmP,OAD/C;OAHQ;iCAMiB,8BAACrT,KAAD,EAAQN,CAAR,EAAc;YACjC2T,OAAO,GAAG3T,CAAC,CAAC,0BAAD,CAAD,CAA8BQ,IAA9B,CAAmC,OAAnC,CAAhB;YACMoT,WAAW,GAAG5T,CAAC,CAAC,8BAAD,CAAD,CAAkCQ,IAAlC,CAAuC,OAAvC,CAApB;QACAF,KAAK,CAACkE,IAAN,iEAC6CmP,OAD7C,gFAEaC,WAFb;;KApBG;;;;IA6BPrF,KAAK,EAAE;;CA5DJ;;ACAA,IAAMsF,0BAA0B,GAAG;EACxC/D,MAAM,EAAE,qBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,oBAAP;GAJ2B;EAOxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kCAAD,EAAqC,UAArC;GAR2B;EAWxC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZ2B;EAexCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,gCAAD,EAAmC,sBAAnC;GAhB2B;EAmBxCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApB2B;EAuBxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,EAAiB,wBAAjB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,iBAAD,EAAoB,cAApB;;CAjCJ;;ACAA,IAAMuF,uBAAuB,GAAG;EACrChE,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZwB;EAerCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,yBAAD,EAA4B,0BAA5B;GAhBwB;EAmBrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBwB;EAuBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,qBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAjCJ;;ACAA,IAAMwF,wBAAwB,GAAG;EACtCjE,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE;oBAAA;sBAAA;2BAAA,EAST,wBATS;GAJyB;EAiBtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,6BAAD,EAAgC,OAAhC,CADS,EAET,uBAFS;YAAA;aAAA,EAST,oBATS;GAlByB;EA+BtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,mBAAD,EAAsB,UAAtB,CADS,EAET,CAAC,gBAAD,EAAmB,UAAnB,CAFS,EAGT,CAAC,mBAAD,EAAsB,OAAtB,CAHS,EAIT,CAAC,+BAAD,EAAkC,OAAlC,CAJS,EAKT,CAAC,+BAAD,EAAkC,SAAlC,CALS;GAhCyB;EAyCtCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GA1CyB;EA6CtCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS,EAET,CAAC,uBAAD,EAA0B,SAA1B,CAFS;GA9CyB;EAoDtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,wBADS,EAET,eAFS;KAKR,oBAAD,CALS;gBAAA,CADJ;;;IAcPyD,UAAU,EAAE,EAdL;;;;IAmBP7B,KAAK,EAAE,CAAC,oBAAD,EAAuB,UAAvB;;CAvEJ;;ACAA,IAAMyF,qBAAqB,GAAG;EACnClE,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,qBAAP;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,oBAAD,EAAuB,0BAAvB;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,MAAD,EAAS,UAAT,CAAD;GAZsB;EAenCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBsB;EAmBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,EAAY,kBAAZ,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CA7BJ;;ACAA,IAAM0F,kBAAkB,GAAG;EAChCnE,MAAM,EAAE,aADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,aAAP;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,oCAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,2BAAD,EAA8B,UAA9B,CADS,EAET,CAAC,mBAAD,EAAsB,OAAtB,CAFS;GAZmB;EAkBhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS,EAET,CAAC,gCAAD,EAAmC,OAAnC,CAFS;GAnBmB;EAyBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,YAAD,CADJ;;;IAKPyD,UAAU,EAAE;2BACW,QADX;2CAE2B;KAPhC;;;;IAaP7B,KAAK,EAAE,CAAC,qBAAD;;CAtCJ;;ACAA,IAAM2F,qBAAqB,GAAG;EACnCpE,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZsB;EAenCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,0BAAD;GAhBsB;EAmBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBsB;EAuBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,sBAAD,EAAyB,kBAAzB,CADS,EAET,kBAFS,CADJ;;;IAQPyD,UAAU,EAAE,EARL;;;;IAaP7B,KAAK,EAAE;;CApCJ;;ACAA,IAAM4F,cAAc,GAAG;EAC5BrE,MAAM,EAAE,QADoB;EAG5B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,mBAAD;GAJe;EAO5B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARe;EAW5B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,gBAAD,EAAmB,UAAnB,CAFS;GAZe;EAkB5ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS,EAET,CAAC,2BAAD,EAA8B,SAA9B,CAFS,EAGT,CAAC,4BAAD,EAA+B,SAA/B,CAHS;GAnBe;EA0B5BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CApCJ;;ACAA,IAAM6F,wBAAwB,GAAG;EACtCtE,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,6CAAD;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE;kBAAA,CADG;IAMd8E,QAAQ,EAAE,iBANI;IAOd4C,MAAM,EAAE;GAlB4B;EAqBtC1D,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,iBAAD;GAtByB;EAyBtCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,8BAAD,EAAiC,MAAjC,CAAD;GA1ByB;EA6BtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,iBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAvCJ;;ACAA,IAAM+F,sBAAsB,GAAG;EACpCxE,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,sCAAD,EAAyC,qBAAzC;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,gCAAD,EAAmC,OAAnC,CAAD,EAA8C,SAA9C;GARuB;EAWpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,wCAAD,EAA2C,OAA3C,CAAD;GAZuB;EAepCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBuB;EAmBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,wBAAD,EAA2B,eAA3B,CADJ;;;IAKPyD,UAAU,EAAE;2BACW;KANhB;;;;IAYP7B,KAAK,EAAE,CACL,6CADK,EAEL,yBAFK;;CA/BJ;;ACAA,IAAMgG,oBAAoB,GAAG;EAClCzE,MAAM,EAAE,cAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,WAAD,EAAc,UAAd;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD,EAA2C,oBAA3C;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZqB;EAelCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBqB;EAmBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,EAAa,mCAAb,CADJ;;;IAKPyD,UAAU,EAAE;uBACO;KANZ;;;;IAYP7B,KAAK,EAAE;;CA/BJ;;ACAA,IAAMiG,6BAA6B,GAAG;EAC3C1E,MAAM,EAAE,wBADmC;EAG3C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJ8B;EAO3C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,uCAAD;GAR8B;EAW3C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,MAAD;GAZ8B;EAe3CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhB8B;EAmB3CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CA7BJ;;ACAA,IAAMkG,kBAAkB,GAAG;EAChC3E,MAAM,EAAE,aADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZmB;EAehCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,QAAD;GAhBmB;EAmBhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBmB;EAuBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,sBAAD,EAAyB,kBAAzB,CADS,EAET,kBAFS,CADJ;;;IAQPyD,UAAU,EAAE;yCACyB,qCAAA9P,KAAK,EAAI;YACpCoU,OAAO,GAAGpU,KAAK,CAACkE,IAAN,EAAhB;QACAlE,KAAK,CACF0D,OADH,CACW,iBADX,EAEGxJ,IAFH,CAEQ,kBAFR,EAGG8I,WAHH,CAGeoR,OAHf;OAHQ;+BASe;KAjBpB;;;;IAuBPnG,KAAK,EAAE;;CA9CJ;;ACAA,IAAMoG,kCAAkC,GAAG;EAChD7E,MAAM,EAAE,6BADwC;EAGhD3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,eAAP;GAJmC;EAOhD2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,wCAAD;GARmC;EAWhD4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD,CADG;IAEd0H,MAAM,EAAE,6BAFM;IAGd5C,QAAQ,EAAE;GAdoC;EAiBhDd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,gBAAD;GAlBmC;EAqBhDyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBmC;EAyBhDtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,iBAAD,EAAoB,iBAApB,CAAD,EAAyC,UAAzC,CADJ;;;IAKPyD,UAAU,EAAE;yBACS,uBAAC9P,KAAD,EAAQN,CAAR,EAAc;YACzB4U,OAAO,GAAGtU,KAAK,CAClB9F,IADa,CACR,wBADQ,EAEbA,IAFa,CAER,cAFQ,EAGb6O,KAHa,GAIbkJ,IAJa,CAIR,cAJQ,CAAhB;;YAKIqC,OAAJ,EAAa;UACXtU,KAAK,CAACwQ,OAAN,CAAc9Q,CAAC,+CAAqC4U,OAArC,UAAf;;;KAbC;;;;IAqBPrG,KAAK,EAAE,CAAC,+BAAD;;CA9CJ;;ACAA,IAAMsG,iCAAiC,GAAG;EAC/C/E,MAAM,EAAE,4BADuC;EAG/C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,eAAP;GAJkC;EAO/C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,wCAAD;GARkC;EAW/C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZkC;EAe/CgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,0BAAD,EAA6B,gBAA7B;GAhBkC;EAmB/CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBkC;EAuB/CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,0BADS,EAET,CAAC,iBAAD,EAAoB,iBAApB,CAFS,EAGT,UAHS,CADJ;;;IASPyD,UAAU,EAAE;yBACS,uBAAC9P,KAAD,EAAQN,CAAR,EAAc;YACzB8U,YAAY,GAAGxU,KAAK,CAACqD,QAAN,GAAiB0F,KAAjB,EAArB;;YACIyL,YAAY,CAACrL,QAAb,CAAsB,YAAtB,CAAJ,EAAyC;cACjCsL,kBAAkB,GAAGD,YAAY,CACpCta,IADwB,CACnB,2BADmB,EAExBmJ,QAFwB,GAGxB0F,KAHwB,EAA3B;cAIM2L,QAAQ,GAAGD,kBAAkB,CAACxC,IAAnB,CAAwB,sBAAxB,CAAjB;cACM0C,QAAQ,GAAGF,kBAAkB,CAACxC,IAAnB,CAAwB,sBAAxB,CAAjB;;cACI0C,QAAQ,IAAID,QAAhB,EAA0B;YACxB1U,KAAK,CAACwQ,OAAN,CACE9Q,CAAC,sEACagV,QADb,8CAEaC,QAFb,gCADH;;SARJ,MAeO;cACCL,OAAO,GAAGtU,KAAK,CAClB9F,IADa,CACR,wBADQ,EAEbA,IAFa,CAER,cAFQ,EAGb6O,KAHa,GAIbkJ,IAJa,CAIR,cAJQ,CAAhB;;cAKIqC,OAAJ,EAAa;YACXtU,KAAK,CAACwQ,OAAN,CAAc9Q,CAAC,+CAAqC4U,OAArC,UAAf;;;;KAlCD;;;;IA2CPrG,KAAK,EAAE,CAAC,+BAAD;;CAlEJ;;ACAA,IAAM2G,sBAAsB,GAAG;EACpCpF,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,aAAD,EAAgB,YAAhB;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,0CADS,EAET,CAAC,qBAAD,EAAwB,OAAxB,CAFS;GARuB;EAcpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,gCAAD,EAAmC,OAAnC,CAFS;GAfuB;EAqBpCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBuB;EAyBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,oBAAD,EAAuB,cAAvB,CADJ;;;IAKPyD,UAAU,EAAE;oBACI,mBAAA9P,KAAK,EAAI;YACf6U,OAAO,GAAG7U,KAAK,CAAC9F,IAAN,CAAW,QAAX,CAAhB;QACA8F,KAAK,CAACgD,WAAN,CAAkB6R,OAAlB;;KARG;;;;IAeP5G,KAAK,EAAE,CAAC,YAAD,EAAe,YAAf;;CAxCJ;;ACAA,IAAM6G,mBAAmB,GAAG;EACjCtF,MAAM,EAAE,aADyB;EAGjCE,gBAAgB,EAAE,CAAC,YAAD,CAHe;EAKjC7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GANoB;EASjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,SAAD;GAVoB;EAajC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAdoB;EAiBjCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD;GAlBoB;EAqBjCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBoB;EAyBjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,yBAAD,EAA4B,gBAA5B,CADS,EAET,gBAFS,CADJ;;;IAQPyD,UAAU,EAAE;iCACiB,QADjB;0BAEU;KAVf;;;;IAgBP7B,KAAK,EAAE,CAAC,gBAAD;;CAzCJ;;ACAA,IAAM8G,+BAA+B,GAAG;EAC7CvF,MAAM,EAAE,yBADqC;EAG7C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD;GAJgC;EAO7C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,oBAAD,EAAuB,6BAAvB;GARgC;EAW7C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZgC;EAe7CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBgC;EAmB7CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CACL,QADK,EAEL,kBAFK,EAGL,gBAHK,EAIL,kBAJK,EAKL,aALK,EAML,CAAC,UAAD,CANK;;CA7BJ;;ACAA,IAAM+G,wBAAwB,GAAG;EACtCxF,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,mBAAD,EAAsB,mBAAtB;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,yBAAD,EAA4B,cAA5B;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,gCAAD,EAAmC,OAAnC,CAAD,CADG;IAEd8E,QAAQ,EAAE;GAb0B;EAgBtCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,kBAAD,EAAqB,kBAArB;GAjByB;EAoBtCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GArByB;EAwBtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAlCJ;;ACAA,IAAMgH,oBAAoB,GAAG;EAClCzF,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,kBAAP;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,cAAD,EAAiB,SAAjB;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,gCAAD,EAAmC,OAAnC,CADS,EAET,CAAC,6BAAD,EAAgC,OAAhC,CAFS;GAZqB;EAkBlCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD;GAnBqB;EAsBlCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvBqB;EA0BlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,wBAAD,EAA2B,iBAA3B,CADJ;;;IAKPyD,UAAU,EAAE;yBACS,sBAAC9P,KAAD,EAAQN,CAAR,EAAc;mDAI3BuV,oBAAoB,CAACnE,cAArB,CAAoCzE,SAApC,CAA8C,CAA9C,CAJ2B;YAE7BE,QAF6B;YAG7BrM,IAH6B;;YAKzB0N,GAAG,GAAGlO,CAAC,CAAC6M,QAAD,CAAD,CAAYrM,IAAZ,CAAiBA,IAAjB,CAAZ;;YACI0N,GAAJ,EAAS;UACP5N,KAAK,CAACwQ,OAAN,sBAA2B5C,GAA3B;;;KAbC;;;;IAqBPK,KAAK,EAAE;;CA/CJ;;ACAA,IAAMiH,kCAAkC,GAAG;EAChD1F,MAAM,EAAE,6BADwC;EAGhD3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAJmC;EAOhD2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,8BAAD,EAAiC,OAAjC,CAAD;GARmC;EAWhD4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,4BAAD,EAA+B,OAA/B,CAAD,CADG;IAEd8E,QAAQ,EAAE;GAboC;EAgBhDd,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAjBmC;EAsBhDyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS;GAvBmC;EA4BhDtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAtCJ;;ACAA,IAAMkH,0BAA0B,GAAG;EACxC3F,MAAM,EAAE,qBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS,EAET,UAFS,EAGT,cAHS,EAIT,QAJS;GAJ2B;EAYxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,+BADS,EAET,oCAFS;GAb2B;EAmBxC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,sBAFS,CADG;IAKd8E,QAAQ,EAAE;GAxB4B;EA2BxCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA5B2B;EA+BxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,EAAiB,2BAAjB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,OAAD;;CAzCJ;;ACAA,IAAMmH,qBAAqB,GAAG;EACnC5F,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qCAAD,EAAwC,oBAAxC;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,gCAAD,EAAmC,UAAnC,CADL;IAEN4B,KAAK,EAAE,CAAC,iBAAD,EAAoB,UAApB;GAT0B;EAYnCgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,cAAD,EAAiB,YAAjB,CADG;IAEd0H,MAAM,EAAE,qBAFM;IAGd5C,QAAQ,EAAE;GAfuB;EAkBnCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnBsB;EAsBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,EAAY,eAAZ,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAhCJ;;ACAA,IAAMoH,0BAA0B,GAAG;EACxC7F,MAAM,EAAE,qBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,aAAD,EAAgB,gBAAhB;GAJ2B;EAOxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,sBADS,EAET,CAAC,6BAAD,EAAgC,OAAhC,CAFS;GAR2B;EAcxC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,MAAD,EAAS,CAAC,4BAAD,EAA+B,OAA/B,CAAT;GAf2B;EAkBxCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnB2B;EAsBxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,EAAY,iBAAZ,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,YAAD,EAAe,aAAf,EAA8B,aAA9B,EAA6C,oBAA7C;;CAhCJ;;ACAA,IAAMqH,mBAAmB,GAAG;EACjC9F,MAAM,EAAE,cADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,UAAD,EAAa,2BAAb;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARoB;EAWjC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZoB;EAejCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBoB;EAmBjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,0BADS,EAET,WAFS,EAGT,6BAHS,CADJ;;;IASPyD,UAAU,EAAE,EATL;;;;IAcP7B,KAAK,EAAE;;CAjCJ;;ACAA,IAAMsH,uBAAuB,GAAG;EACrC/F,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,eAAD,EAAkB,YAAlB;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZwB;EAerCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBwB;EAmBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,mBAAD,EAAsB,YAAtB,EAAoC,YAApC;;CA7BJ;;ACAA,IAAMuH,oBAAoB,GAAG;EAClChG,MAAM,EAAE,cAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,SAAD,EAAY,QAAZ;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZqB;EAelCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,QAAD;GAhBqB;EAmBlCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBqB;EAuBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAjCJ;;ACAA,IAAMwH,kBAAkB,GAAG;EAChCjG,MAAM,EAAE,YADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,oBAAD,EAAuB,CAAC,uBAAD,EAA0B,OAA1B,CAAvB;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,8BAAD,EAAiC,OAAjC,CAAD,EAA4C,iBAA5C;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,8BADS,EAET,CAAC,qCAAD,EAAwC,OAAxC,CAFS;GAZmB;EAkBhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnBmB;EAsBhCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,oBAAD;GAvBmB;EA0BhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mCAAD,EAAsC,yBAAtC,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CApCJ;;ACAA,IAAMyH,yBAAyB,GAAG;EACvClG,MAAM,EAAE,oBAD+B;EAGvC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,WAAD;GAJ0B;EAOvC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,UAAD,EAAa,kCAAb;GAR0B;EAWvC4D,cAAc,EAAE;IACdkB,QAAQ,EAAE,kBADI;IAGd9E,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAd0B;EAiBvCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlB0B;EAqBvCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,qBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,iBAAD;;CA/BJ;;ACAA,IAAM0H,2BAA2B,GAAG;EACzCnG,MAAM,EAAE,sBADiC;EAGzC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iCAAD,EAAoC,kBAApC;GAJ4B;EAOzC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kBAAD,EAAqB,kCAArB;GAR4B;EAWzC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,6BAFS,CADG;IAMd8E,QAAQ,EAAE;GAjB6B;EAoBzCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,gCAAD,EAAmC,sBAAnC;GArB4B;EAwBzCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAzB4B;EA4BzCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,oBADS,EAET,CAAC,iBAAD,EAAoB,kBAApB,CAFS,EAGT,kBAHS,CADJ;;;IASPyD,UAAU,EAAE,EATL;;;;IAcP7B,KAAK,EAAE,CAAC,0BAAD,EAA6B,iBAA7B;;CA1CJ;;ACAA,IAAM2H,+BAA+B,GAAG;EAC7CpG,MAAM,EAAE,eADqC;EAG7C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,OAAD,EAAU,mBAAV;GAJgC;EAO7C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,sBAAD,EAAyB,SAAzB;GARgC;EAW7C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,sBAAD,EAAyB,gBAAzB,CAAD;GAZgC;EAe7CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBgC;EAmB7CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,EAAkB,sBAAlB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CA7BJ;;ACAA,IAAM4H,kBAAkB,GAAG;EAChCrG,MAAM,EAAE,YADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qBAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,wBAAD,EAA2B,OAA3B,CAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZmB;EAehCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBmB;EAmBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,gBAAD,CADJ;;;IAKPyD,UAAU,EAAE;mBACG,QADH;oCAEoB;KAPzB;;;;IAaP7B,KAAK,EAAE;;CAhCJ;;ACAA,IAAM6H,sBAAsB,GAAG;EACpCtG,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,0BAAD,EAA6B,mBAA7B;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,+BAAD,EAAkC,uBAAlC;GARuB;EAWpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,gCAAD,EAAmC,OAAnC,CAFS;GAZuB;EAkBpCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnBuB;EAsBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,uCAAD,CADS,EAET,CAAC,8DAAD,CAFS,CADJ;;;IAQPyD,UAAU,EAAE;iCACiB,QADjB;iDAEiC;KAVtC;;;;IAgBP7B,KAAK,EAAE;;CAtCJ;;ACAA,IAAM8H,0BAA0B,GAAG;EACxCvG,MAAM,EAAE,qBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,UAAD;GAJ2B;EAOxC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,kBAAD,CADG;IAGd8E,QAAQ,EAAE;GAV4B;EAaxCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAd2B;EAiBxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,wBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CA3BJ;;ACAA,IAAM+H,yBAAyB,GAAG;EACvCxG,MAAM,EAAE,oBAD+B;EAGvC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,UAAD;GAJ0B;EAOvC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,cAAD;GAR0B;EAWvC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,4BAAD,EAA+B,OAA/B,CAAD,CADG;IAGd8E,QAAQ,EAAE;GAd2B;EAiBvCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlB0B;EAqBvCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,oBAAD,EAAuB,kBAAvB,CADS,EAET,kBAFS,EAGT,OAHS,CADJ;;;IASPyD,UAAU,EAAE;8BACc,4BAAA9P,KAAK,EAAI;YACzBoU,OAAO,GAAGpU,KAAK,CAACkE,IAAN,EAAhB;QACAlE,KAAK,CAAC0D,OAAN,CAAc,UAAd,EAA0BV,WAA1B,CAAsCoR,OAAtC;OAHQ;wBAMQ,QANR;yCAQyB,YARzB;uBAUO;KAnBZ;;;;IAyBPnG,KAAK,EAAE,CAAC,cAAD;;CA9CJ;;ACAA,IAAMgI,wBAAwB,GAAG;EACtCzG,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,UAAP;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,yBAAD,EAA4B,aAA5B;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,MAAD,EAAS,UAAT,CAAD,CADG;IAGd8E,QAAQ,EAAE;GAd0B;EAiBtCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD;GAlByB;EAqBtCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtByB;EAyBtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,EAAY,UAAZ,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAnCJ;;ACAA,IAAMiI,6BAA6B,GAAG;EAC3C1G,MAAM,EAAE,wBADmC;EAG3C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,eAAP;GAJ8B;EAO3C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAR8B;EAW3C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZ8B;EAe3CgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD;GAhB8B;EAmB3CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApB8B;EAuB3CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,QAAD,EAAW,YAAX;;CAjCJ;;ACAA,IAAMkI,iBAAiB,GAAG;EAC/B3G,MAAM,EAAE,YADuB;EAG/B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,aAAP;GAJkB;EAO/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARkB;EAW/B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,wBAAD,EAA2B,OAA3B,CAAD,CADG;IAGd8E,QAAQ,EAAE;GAdmB;EAiB/Bd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,uBAAD;GAlBkB;EAqB/ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBkB;EAyB/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,iBADS,EAET,CAAC,GAAD,EAAM,mBAAN,EAA2B,kBAA3B,CAFS,CADJ;;;IAQPyD,UAAU,EAAE;MACVC,QAAQ,EAAE,kBAAA/P,KAAK,EAAI;YACXoQ,SAAS,GAAGpQ,KAAK,CAACqD,QAAN,EAAlB;;YACI+M,SAAS,CAAC5U,MAAV,KAAqB,CAArB,IAA0B4U,SAAS,CAACtS,GAAV,CAAc,CAAd,EAAiB2E,OAAjB,KAA6B,KAA3D,EAAkE;iBACzD,QAAP;;;eAGK,IAAP;;KAfG;;;;IAsBPwL,KAAK,EAAE,CACL,CAAC,eAAD,EAAkB,kBAAlB,EAAsC,cAAtC,EAAsD,eAAtD,CADK;;CA/CJ;;ACAA,IAAMmI,uBAAuB,GAAG;EACrC5G,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD,EAAqC,aAArC;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,yCADS,EAET,8BAFS;GARwB;EAcrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,6BAFS,CADG;IAMd8E,QAAQ,EAAE;GApByB;EAuBrCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAxBwB;EA2BrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,YAAD,EAAe,eAAf,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CArCJ;;ACAA,IAAMoI,mBAAmB,GAAG;EACjC7G,MAAM,EAAE,cADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,aAAD,EAAgB,UAAhB;GARoB;EAWjC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,MAAD,CADG;IAGd8E,QAAQ,EAAE;GAdqB;EAiBjCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,aAAD,EAAgB,cAAhB;GAlBoB;EAqBjCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBoB;EAyBjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,oBAAD,EAAuB,oBAAvB,CADS,EAET,oBAFS,CADJ;;;IAQPyD,UAAU,EAAE;sBACM,qBAAA9P,KAAK,EAAI;YACjBqE,IAAI,GAAGrE,KAAK,CAAC9F,IAAN,CAAW,KAAX,CAAb;QACAmK,IAAI,CAACnE,IAAL,CAAU,OAAV,EAAmB,MAAnB;QACAmE,IAAI,CAACnE,IAAL,CAAU,QAAV,EAAoB,MAApB;QACAmE,IAAI,CAACW,QAAL,CAAc,gBAAd;QACAhF,KAAK,CAACkC,MAAN,CAAa,eAAb,EAA8BsO,OAA9B,CAAsCnM,IAAtC;;KAdG;;;;IAqBP4J,KAAK,EAAE;;CA9CJ;;ACAA,IAAMqI,oBAAoB,GAAG;EAClC9G,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gCAAD,EAAmC,mBAAnC;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kBAAD,EAAqB,CAAC,qBAAD,EAAwB,OAAxB,CAArB;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,gBAAD,EAAmB,CAAC,6BAAD,EAAgC,OAAhC,CAAnB;GAZqB;EAelCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBqB;EAmBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,2BAAD,EAA8B,kBAA9B,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,gBAAD;;CA7BJ;;ACAA,IAAMsI,iBAAiB,GAAG;EAC/B/G,MAAM,EAAE,YADuB;EAG/B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,oBAAD,EAAuB,OAAvB,CAAD;GAJkB;EAO/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GARkB;EAW/B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,oCAAD,EAAuC,OAAvC,CAAD,CADG;IAEd8E,QAAQ,EAAE;GAbmB;EAgB/BL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAjBkB;EAoB/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,gBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CA9BJ;;ACAA,IAAMuI,8BAA8B,GAAG;EAC5ChH,MAAM,EAAE,yBADoC;EAG5C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,4BAAD,EAA+B,OAA/B,CAAD;GAJ+B;EAO5C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,oBAAD,EAAuB,OAAvB,CAAD;GAR+B;EAW5C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZ+B;EAe5CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhB+B;EAmB5CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,WAAD,EAAc,YAAd,CADS,EAET,YAFS,EAGT,4BAHS,CADJ;;;IASPyD,UAAU,EAAE,EATL;;;;IAcP7B,KAAK,EAAE;;CAjCJ;;ACAA,IAAMwI,gCAAgC,GAAG;EAC9CjH,MAAM,EAAE,2BADsC;EAG9C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,OAAD,EAAU,gBAAV;GAJiC;EAO9C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARiC;EAW9C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAZiC;EAe9CgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,WAAD;GAhBiC;EAmB9CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBiC;EAuB9CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,+BAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,kBAAD;;CAjCJ;;ACAA,IAAMyI,yBAAyB,GAAG;EACvClH,MAAM,EAAE,oBAD+B;EAGvC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,QAAD,EAAW,CAAC,oBAAD,EAAuB,OAAvB,CAAX;GAJ0B;EAOvC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,SAAD;GAR0B;EAWvC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,2BAAD,EAA8B,OAA9B,CAAD;GAZ0B;EAevCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAhB0B;EAqBvCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtB0B;EAyBvCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,kBAAD,EAAqB,QAArB,EAA+B,OAA/B,CAAD,EAA0C,OAA1C,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,wBAAD,EAA2B,sBAA3B;;CAnCJ;;ACAA,IAAM0I,sBAAsB,GAAG;EACpCnH,MAAM,EAAE,gBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,cAAD,EAAiB,iBAAjB,EAAoC,kBAApC;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,eAAD,EAAkB,qBAAlB;GARuB;EAWpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZuB;EAepCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAhBuB;EAqBpCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,gCAAD,EAAmC,KAAnC,CAAD;GAtBuB;EAyBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,4BAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAnCJ;;ACAA,IAAM2I,wBAAwB,GAAG;EACtCpH,MAAM,EAAE,kBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD,EAAqC,QAArC;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kCAAD,EAAqC,cAArC;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,yCAAD,EAA4C,SAA5C,CADS,EAET,CAAC,qCAAD,EAAwC,OAAxC,CAFS;GAZyB;EAkBtCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnByB;EAsBtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,EAAkB,gBAAlB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAhCJ;;ACAA,IAAM4I,0BAA0B,GAAG;EACxCrH,MAAM,EAAE,oBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,UAAD,EAAa,CAAC,uBAAD,EAA0B,OAA1B,CAAb;GAJ2B;EAOxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,QADS,EAET,2GAFS,EAGT,gBAHS;GAR2B;EAexC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAhB2B;EAmBxCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApB2B;EAuBxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,aAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,UAAD,EAAa,YAAb;;CAjCJ;;ACAA,IAAM6I,wBAAwB,GAAG;EACtCtH,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qCAAD;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,2BAAD;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,4BAAD,EAA+B,OAA/B,CAAD;GAZyB;EAetCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhByB;EAmBtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,EAAkB,iBAAlB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CACL,gBADK,EAEL,yBAFK,EAGL,yBAHK;;CA7BJ;;ACAA,IAAM8I,sBAAsB,GAAG;EACpCvH,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,8BAAD,EAAiC,oBAAjC;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,4CADS,EAET,oBAFS;GARuB;EAcpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,gCAAD,EAAmC,OAAnC,CADS,EAET,CAAC,wDAAD,EAA2D,UAA3D,CAFS,EAGT,4BAHS,CADG;IAOd8E,QAAQ,EAAE;GArBwB;EAwBpCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAzBuB;EA4BpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,2BAAD,EAA8B,kBAA9B,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAtCJ;;ACAA,IAAM+I,mBAAmB,GAAG;EACjCxH,MAAM,EAAE,aADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARoB;EAWjC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,WAAD,CADG;IAGd8E,QAAQ,EAAE;GAdqB;EAiBjCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBoB;EAqBjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,SAAD,EAAY,aAAZ,CAAD,EAA6B,aAA7B,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CA/BJ;;ACAA,IAAMgJ,uBAAuB,GAAG;EACrCzH,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD,EAAmB,IAAnB;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,sBADS,EAET,CAAC,6BAAD,EAAgC,OAAhC,CAFS,EAGT,4BAHS;GARwB;EAerC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,2BADS,EAET,CAAC,gCAAD,EAAmC,UAAnC,CAFS,CADG;IAMd8E,QAAQ,EAAE;GArByB;EAwBrCd,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAzBwB;EA8BrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA/BwB;EAkCrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,wBADS,EAET,CAAC,eAAD,EAAkB,QAAlB,CAFS,EAGT,QAHS,CADJ;;;IASPyD,UAAU,EAAE,EATL;;;;IAcP7B,KAAK,EAAE,CAAC,eAAD;;CAhDJ;;ACAA,IAAMiJ,mCAAmC,GAAG;EACjD1H,MAAM,EAAE,8BADyC;EAGjDE,gBAAgB,EAAE,CAAC,gBAAD,CAH+B;EAKjD7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,kBAAP;GANoC;EASjD2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,mBAAD,EAAsB,wBAAtB;GAVoC;EAajD4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAdoC;EAiBjDgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,kCAAD;GAlBoC;EAqBjDyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBoC;EAyBjDtP,OAAO,EAAE;IACPwT,cAAc,EAAE,KADT;IAGPlE,SAAS,EAAE,CAAC,mBAAD,EAAsB,8BAAtB,CAHJ;;;IAOPyD,UAAU,EAAE,EAPL;;;;IAYP7B,KAAK,EAAE,CAAC,kBAAD,EAAqB,qBAArB;;CArCJ;;ACAA,IAAMkJ,4BAA4B,GAAG;EAC1C3H,MAAM,EAAE,uBADkC;EAG1C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,2BAAD,EAA8B,UAA9B;GAJ6B;EAO1C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD,EAAmC,sBAAnC;GAR6B;EAW1C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,wBAAD,EAA2B,OAA3B,CADS,EAET,CAAC,2BAAD,EAA8B,OAA9B,CAFS;GAZ6B;EAkB1CgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAnB6B;EAwB1CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAzB6B;EA4B1CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,iBAAD,EAAoB,kBAApB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,sBAAD;;CAtCJ;;ACAA,IAAMmJ,gCAAgC,GAAG;EAC9C5H,MAAM,EAAE,4BADsC;EAG9C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qBAAD,EAAwB,aAAxB;GAJiC;EAO9C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,2BAAD,EAA8B,sBAA9B;GARiC;EAW9C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD,EAAmD,YAAnD,CADG;IAGd8E,QAAQ,EAAE;GAdkC;EAiB9Cd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,2BAAD,EAA8B,gBAA9B;GAlBiC;EAqB9CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBiC;EAyB9CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,EAAqB,uBAArB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAnCJ;;ACAA,IAAMoJ,mBAAmB,GAAG;EACjC7H,MAAM,EAAE,aADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,gBADS,EAET,cAFS,EAGT,CAAC,8BAAD,EAAiC,OAAjC,CAHS;GARoB;EAejC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,mBAAD,EAAsB,OAAtB,CAFS;GAhBoB;EAsBjCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAvBoB;EA4BjCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA7BoB;EAgCjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,4BADS,EAET,CAAC,uBAAD,EAA0B,cAA1B,CAFS,CADJ;;;IAQPyD,UAAU,EAAE,EARL;;;;IAaP7B,KAAK,EAAE,CAAC,cAAD,EAAiB,aAAjB,EAAgC,UAAhC,EAA4C,WAA5C;;CA7CJ;;ACAA,IAAMqJ,qBAAqB,GAAG;EACnC9H,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,UAAP;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,OAAD;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,kBAAD,EAAqB,iBAArB,CAAD;GAZsB;EAenCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,UAAD;GAhBsB;EAmBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,wBAAD,EAA2B,KAA3B,CAAD;GApBsB;EAuBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,WAAD,EAAc,UAAd,EAA0B,WAA1B;;CAjCJ;;ACAA,IAAMsJ,qBAAqB,GAAG;EACnC/H,MAAM,EAAE,eAD2B;EAGnCE,gBAAgB,EAAE,CAChB,gBADgB,EAEhB,WAFgB,EAGhB,WAHgB,EAIhB,iBAJgB,EAKhB,WALgB,CAHiB;EAWnC7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,kBAAP;GAZsB;EAenC2D,MAAM,EAAE;;IAEN3D,SAAS,EAAE,CAAC,+CAAD,EAAkD,SAAlD;GAjBsB;EAoBnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,MAFS,EAGT,gBAHS,CADG;IAOd8E,QAAQ,EAAE;GA3BuB;EA8BnCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,IAAD;GA/BsB;EAkCnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnCsB;EAsCnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,EAAkB,aAAlB,CADJ;;;IAKPyD,UAAU,EAAE;wBACQ,QADR;uBAEO,YAFP;wBAGQ,QAHR;uBAIO,YAJP;yBAKS,QALT;wBAMQ;KAXb;;;;IAiBP7B,KAAK,EAAE,CACL,gBADK,EAEL,gBAFK,EAGL,iBAHK,EAIL,cAJK;;CAvDJ;;ACAA,IAAMuJ,mBAAmB,GAAG;EACjChI,MAAM,EAAE,cADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,qBAAD,EAAwB,OAAxB,CADS,EAET,6BAFS;GARoB;EAcjC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,mBAAD,EAAsB,OAAtB,CAAD;GAfoB;EAkBjCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD,EAA2C,WAA3C;GAnBoB;EAsBjCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvBoB;EA0BjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,wBAAD,EAA2B,kBAA3B,CADJ;;;IAKPyD,UAAU,EAAE;sBACM,oBAAA9P,KAAK,EAAI;YACjB4N,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,KAAX,CAAZ;QACAF,KAAK,CAACwF,MAAN,GAAexC,WAAf,8BAAgD4K,GAAhD;OAHQ;kBAKE;KAVP;;;;IAgBPK,KAAK,EAAE,CAAC,QAAD;;CA1CJ;;ACAA,IAAMwJ,oBAAoB,GAAG;EAClCjI,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,MAAD,EAAS,IAAT;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,eAAD;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,WAAD,CADG;IAGd8E,QAAQ,EAAE;GAdsB;EAiBlCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,MAAD;GAlBqB;EAqBlCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBqB;EAyBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,OAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CACL,mBADK,EAEL,YAFK,EAGL,8BAHK,EAIL,cAJK;;CAnCJ;;ACAA,IAAMyJ,yBAAyB,GAAG;EACvClI,MAAM,EAAE,qBAD+B;EAGvC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJ0B;EAOvC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,yBAAD,EAA4B,OAA5B,CAAD;GAR0B;EAWvC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,8BAAD,EAAiC,OAAjC,CAAD,CADG;IAEd0H,MAAM,EAAE,oBAFM;IAGd5C,QAAQ,EAAE;GAd2B;EAiBvCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,oBAAD,EAAuB,wBAAvB;GAlB0B;EAqBvCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtB0B;EAyBvCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,gCADS,EAET,CAAC,uBAAD,EAA0B,qBAA1B,CAFS,CADJ;;;IAQPyD,UAAU,EAAE,EARL;;;;IAaP7B,KAAK,EAAE;;CAtCJ;;ACAA,IAAM0J,uBAAuB,GAAG;EACrCnI,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,wBAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZwB;EAerCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBwB;EAmBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,+DADS,CADJ;IAKPyD,UAAU,EAAE;MACVC,QAAQ,EAAE,kBAAA/P,KAAK,EAAI;YACXoQ,SAAS,GAAGpQ,KAAK,CAACqD,QAAN,EAAlB;;YACI+M,SAAS,CAAC5U,MAAV,KAAqB,CAArB,IAA0B4U,SAAS,CAACtS,GAAV,CAAc,CAAd,EAAiB2E,OAAjB,KAA6B,KAA3D,EAAkE;iBACzD,QAAP;;;eAEK,IAAP;;;;CA9BD;;ACAA,IAAMmV,0BAA0B,GAAG;EACxCpI,MAAM,EAAE,qBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJ2B;EAOxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GAR2B;EAWxC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZ2B;EAexCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,aAAD;GAhB2B;EAmBxCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApB2B;EAuBxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,gBAAD;;CAxBR;;ACAA,IAAMwL,yBAAyB,GAAG;EACvCrI,MAAM,EAAE,mBAD+B;EAGvC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD,EAAqC,gBAArC;GAJ0B;EAOvC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kBAAD;GAR0B;EAWvC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,iBAAD,EAAoB,UAApB,CAFS,EAGT,CAAC,gCAAD,EAAmC,SAAnC,CAHS;GAZ0B;EAmBvCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GApB0B;EAyBvCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS,EAET,CAAC,2BAAD,EAA8B,SAA9B,CAFS,EAGT,CAAC,wBAAD,EAA2B,SAA3B,CAHS,EAIT,CAAC,4BAAD,EAA+B,SAA/B,CAJS,EAKT,CAAC,sBAAD,EAAyB,KAAzB,CALS;GA1B0B;EAmCvCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CACE,yBADF,EAEE,mGAFF,CADS,CADJ;;;IAUPyD,UAAU,EAAE;MACVgI,UAAU,EAAE;KAXP;;;;IAiBP7J,KAAK,EAAE,CAAC,gBAAD;;CApDJ;;ACAA,IAAM8J,qBAAqB,GAAG;EACnCvI,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,sBADS,EAET,gDAFS;GARsB;EAcnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAfsB;EAkBnCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAnBsB;EAsBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvBsB;EA0BnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,EAAqB,kBAArB,CADJ;;;IAKPyD,UAAU,EAAE;MACVnL,GAAG,EAAE,aAAA3E,KAAK,EAAI;YACN4N,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,eAAX,CAAZ;;YACI0N,GAAG,KAAK,EAAZ,EAAgB;UACd5N,KAAK,CAACE,IAAN,CAAW,KAAX,EAAkB0N,GAAlB;;;KATC;;;;IAiBPK,KAAK,EAAE;;CA3CJ;;ACAA,IAAM+J,0BAA0B,GAAG;EACxCxI,MAAM,EAAE,oBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,mBAAD;GAJ2B;EAOxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,0BAAD;GAR2B;EAWxC4D,cAAc,EAAE;;IAEd5D,SAAS,EAAE,CAAC,sDAAD;GAb2B;EAgBxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,iBAAD;;CA1BJ;;ACAA,IAAMgK,kBAAkB,GAAG;EAChCzI,MAAM,EAAE,YADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE;;GARmB;EAahC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,yBAAD,EAA4B,UAA5B,CADS,EAET,CAAC,6CAAD,EAAgD,UAAhD,CAFS;GAdmB;EAoBhCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CACT,CAAC,0BAAD,EAA6B,OAA7B,CADS,EAET,wBAFS;GArBmB;EA2BhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA5BmB;EA+BhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,iBAAD,CAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAzCJ;;ACAA,IAAMiK,qBAAqB,GAAG;EACnC1I,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,qCADS,EAET,qCAFS;GAJsB;EAUnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,mDAAD;GAXsB;EAcnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,kEADS,EAET,+DAFS;GAfsB;EAqBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBsB;EAyBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,oCAAD,CADS;KAGP,sFADF;iEAAA,CAFS;KAMR,6DAAD,CANS;KAOR,oCAAD,CAPS;sCAAA,CADJ;;;IAcPyD,UAAU,EAAE;yBACS,oBAAA9P,KAAK,EAAI;;YAEpBqE,IAAI,GAAGrE,KAAK,CAAC9F,IAAN,CAAW,KAAX,CAAb;YACMie,KAAK,GAAGnY,KAAK,CAACoY,GAAN,CAAU,kBAAV,CAAd;;YACI/T,IAAI,CAAC7I,MAAL,KAAgB,CAAhB,IAAqB2c,KAAzB,EAAgC;UAC9B9T,IAAI,CAACnE,IAAL,CAAU,KAAV,EAAiBiY,KAAK,CAACpd,KAAN,CAAY,WAAZ,EAAyB,CAAzB,EAA4BnB,OAA5B,CAAoC,QAApC,EAA8C,EAA9C,CAAjB;iBACOyK,IAAP;;;eAEKrE,KAAP;;KAvBG;;;;IA8BPiO,KAAK,EAAE,CACL,OADK,EAEL,6BAFK,EAGL,uDAHK;;CAvDJ;;ACAA,IAAMoK,gBAAgB,GAAG;EAC9B7I,MAAM,EAAE,UADsB;EAG9B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,kBAAD;GAJiB;EAO9B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,sBAAD;GARiB;EAW9B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZiB;EAe9BgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAhBiB;EAmB9ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBiB;EAuB9BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CACL,oBADK,EAEL,8BAFK,EAGL,SAHK,EAIL,oBAJK;;CA9BJ;;ACAA,IAAMqK,qBAAqB,GAAG;EACnC9I,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,6BAAD;GAJsB;EAOnC2D,MAAM,EAAE,IAP2B;EASnCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,QAAD,CADG;IAEd0H,MAAM,EAAE,mBAFM;IAGd5C,QAAQ,EAAE;GAZuB;EAenCd,GAAG,EAAE,IAf8B;EAiBnCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBsB;EAqBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,2CAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE;;CA5BJ;;ACAA,IAAMsK,iBAAiB,GAAG;EAC/B/I,MAAM,EAAE,WADuB;EAG/B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD;GAJkB;EAO/B2D,MAAM,EAAE,IAPuB;EAS/BC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,iBAAD,EAAoB,UAApB,CAAD;GAVkB;EAa/BgE,GAAG,EAAE,IAb0B;EAe/BS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBkB;EAmB/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE;;CA1BJ;;ACAA,IAAMuK,oBAAoB,GAAG;EAClChJ,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,SAAD,EAAY,kBAAZ;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,sBAAD,EAAyB,OAAzB,CAAD;GAZqB;EAelCgE,GAAG,EAAE,IAf6B;EAiBlCW,OAAO,EAAE;IACP3E,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAlBqB;EAqBlCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBqB;EAyBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,MAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,WAAD,EAAc,qBAAd,EAAqC,MAArC,EAA6C,cAA7C;;CAhCJ;;ACAA,IAAMwK,qBAAqB,GAAG;EACnCjJ,MAAM,EAAE,iBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJsB;EAOnC2D,MAAM,EAAE,IAP2B;EASnCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,SAAD,CADG;IAEd0H,MAAM,EAAE,YAFM;IAGd5C,QAAQ,EAAE;GAZuB;EAenCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAhBsB;EAmBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBsB;EAuBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,aAAD,EAAgB,aAAhB,EAA+B,iBAA/B;;CA9BJ;;ACAA,IAAMyK,sBAAsB,GAAG;EACpClJ,MAAM,EAAE,kBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,OAAD;GAJuB;EAOpC2D,MAAM,EAAE,IAP4B;EASpCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,gBAAD,CADG;IAEd0H,MAAM,EAAE,YAFM;IAGd5C,QAAQ,EAAE;GAZwB;EAepCd,GAAG,EAAE,IAf+B;EAiBpCS,cAAc,EAAE,IAjBoB;EAmBpC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE;MACV6I,KAAK,EAAE,eAAA3Y,KAAK,EAAI;QACdA,KAAK,CAACE,IAAN,CAAW,OAAX,EAAoB,MAApB;;KAPG;IAWP+N,KAAK,EAAE;;CA9BJ;;ACAA,IAAM2K,4BAA4B,GAAG;EAC1CpJ,MAAM,EAAE,wBADkC;EAG1C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,4BAAD;GAJ6B;EAO1C2D,MAAM,EAAE,IAPkC;EAS1CC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,oCAAD,EAAuC,OAAvC,CAAD;GAV6B;EAa1CgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,mCAAD;GAd6B;EAiB1CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlB6B;EAqB1CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,0CAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,iBAAD;;CA5BJ;;ACAA,IAAM4K,mBAAmB,GAAG;EACjCrJ,MAAM,EAAE,cADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,OAAD;GAJoB;EAOjC2D,MAAM,EAAE,IAPyB;EASjCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,4BAAD,CADG;IAEd0H,MAAM,EAAE,YAFM;IAGd5C,QAAQ,EAAE;GAZqB;EAejCd,GAAG,EAAE,IAf4B;EAiBjCS,cAAc,EAAE,IAjBiB;EAmBjC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,YAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE;;CA1BJ;;ACAA,IAAM6K,kBAAkB,GAAG;EAChCtJ,MAAM,EAAE,YADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,MAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CACE,0BADF,EAEE,OAFF,EAGE,UAAA0M,GAAG,EAAI;UACCC,IAAI,GAAGrL,IAAI,CAAC7R,KAAL,CAAWid,GAAX,CAAb;aACOC,IAAI,CAACC,IAAL,CAAUC,YAAjB;KALJ,CADS;GAZmB;EAwBhC7I,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAzBmB;EA8BhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CACE,0BADF,EAEE,OAFF,EAGE,UAAA0M,GAAG,EAAI;UACCC,IAAI,GAAGrL,IAAI,CAAC7R,KAAL,CAAWid,GAAX,CAAb;aACOC,IAAI,CAACC,IAAL,CAAUE,KAAV,CAAgBC,aAAvB;KALJ,CADS;GA/BmB;EA2ChCrc,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CArDJ;;ACAA,IAAMoL,mBAAmB,GAAG;EACjC7J,MAAM,EAAE,cADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,aAAD;GAJoB;EAOjC2D,MAAM,EAAE,IAPyB;EASjCC,cAAc,EAAE,IATiB;EAWjCI,GAAG,EAAE,IAX4B;EAajCW,OAAO,EAAE;IACP3E,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAdoB;EAiBjCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBoB;EAqBjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,YAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE,CAAC,UAAD,EAAa,OAAb;;CA1BJ;;ACAA,IAAMqL,mBAAmB,GAAG;EACjC9J,MAAM,EAAE,aADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,OAAD;GAJoB;EAOjC2D,MAAM,EAAE,IAPyB;EASjCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,OAAD,CADG;IAEd0H,MAAM,EAAE,aAFM;IAGd5C,QAAQ,EAAE;GAZqB;EAejCd,GAAG,EAAE,IAf4B;EAiBjCS,cAAc,EAAE,IAjBiB;EAmBjC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE;;CA1BJ;;ACAA,IAAMsL,oBAAoB,GAAG;EAClC/J,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,YAAD;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,6BAAD;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,yBAAD,CADG;IAEd0H,MAAM,EAAE,aAFM;IAGd5C,QAAQ,EAAE;GAdsB;EAiBlCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAlBqB;EAqBlCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBqB;EAyBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE;;CAhCJ;;ACAA,IAAMuL,sBAAsB,GAAG;EACpChK,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,YAAD;GAJuB;EAOpC2D,MAAM,EAAE,IAP4B;EASpCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,uCAAD,CADG;IAEd8E,QAAQ,EAAE;GAXwB;EAcpCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAfuB;EAkBpCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnBuB;EAsBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,OAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE,CAAC,kBAAD;;CA3BJ;;ACAA,IAAMwL,uBAAuB,GAAG;EACrCjK,MAAM,EAAE,mBAD6B;EAGrCE,gBAAgB,EAAE,CAChB,oBADgB,EAEhB,0BAFgB,EAGhB,oBAHgB,CAHmB;EASrC7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,cAAD;GAVwB;EAarC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,SAAD;GAdwB;EAiBrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,oCAAD,EAAuC,OAAvC,CAAD;GAlBwB;EAqBrCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,iBAAD;GAtBwB;EAyBrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA1BwB;EA6BrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,cAAD;;CApCJ;;ACAA,IAAMyL,wBAAwB,GAAG;EACtClK,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iCAAD,EAAoC,oBAApC;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,aAAD,CADG;IAEd0H,MAAM,EAAE,aAFM;IAGd5C,QAAQ,EAAE;GAd0B;EAiBtCd,GAAG,EAAE,IAjBiC;EAmBtCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApByB;EAuBtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,cAAD,EAAiB,SAAjB,EAA4B,eAA5B;;CA9BJ;;ACAA,IAAM0L,0BAA0B,GAAG;EACxCnK,MAAM,EAAE,qBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJ2B;EAOxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GAR2B;EAWxC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,kCAAD,EAAqC,OAArC,CAAD;GAZ2B;EAexCgE,GAAG,EAAE,IAfmC;EAiBxCS,cAAc,EAAE,IAjBwB;EAmBxC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE;;CA1BJ;;ACAA,IAAM2L,qBAAqB,GAAG;EACnCpK,MAAM,EAAE,eAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,kBAAD,EAAqB,iBAArB;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,oBAAD,EAAuB,aAAvB;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,0CADS,EAET,0EAFS,CADG;IAKd8E,QAAQ,EAAE;GAhBuB;EAmBnCd,GAAG,EAAE,IAnB8B;EAqBnCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBsB;EAyBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,yBADS,EAET,CAAC,eAAD,EAAkB,sBAAlB,CAFS,CADJ;IAMPkE,cAAc,EAAE,KANT;IAQPT,UAAU,EAAE,EARL;IAUP7B,KAAK,EAAE,CACL,yBADK,EAEL,8BAFK,EAGL,sCAHK,EAIL,gCAJK;;CAnCJ;;ACAA,IAAM4L,uBAAuB,GAAG;EACrCrK,MAAM,EAAE,mBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,kCAAD;GAJwB;EAOrC2D,MAAM,EAAE,IAP6B;EASrCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAVwB;EAarCgE,GAAG,EAAE,IAbgC;EAerCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBwB;EAmBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,qBAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE;;CAxBJ;;ACAA,IAAM6L,qBAAqB,GAAG;EACnCtK,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,oBAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,SAAD;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,OAAD,CADG;IAEd0H,MAAM,EAAE,oBAFM;IAGd5C,QAAQ,EAAE;GAduB;EAiBnCd,GAAG,EAAE,IAjB8B;EAmBnCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBsB;EAuBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE;;CA5BJ;;ACAA,IAAM8L,oBAAoB,GAAG;EAClCvK,MAAM,EAAE,cAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,mBAAD;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZqB;EAelCgE,GAAG,EAAE,IAf6B;EAiBlCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBqB;EAqBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,6DAAD,CADJ;IAGPyD,UAAU,EAAE;wBACQ,sBAAA9P,KAAK,EAAI;YACnBga,SAAS,GAAGha,KAAK,CAACkE,IAAN,EAAlB;QACAlE,KAAK,CAACgD,WAAN,CAAkBgX,SAAlB;;KANG;IAUP/L,KAAK,EAAE,CAAC,YAAD;;CA/BJ;;ACAA,IAAMgM,qBAAqB,GAAG;EACnCzK,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,wBAAD;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,2BAAD,EAA8B,UAA9B,CAAD;GAZsB;EAenCgE,GAAG,EAAE,IAf8B;EAiBnCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBsB;EAqBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,gBAAD,CADJ;IAGPyD,UAAU,EAAE;mCACmB,gCAAA9P,KAAK,EAAI;YAC9B4N,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,KAAX,CAAZ;QACAF,KAAK,CAACE,IAAN,CAAW,KAAX,EAAkB0N,GAAG,CAAChU,OAAJ,CAAY,SAAZ,EAAuB,EAAvB,EAA2BA,OAA3B,CAAmC,OAAnC,EAA4C,EAA5C,CAAlB;;KANG;IAUPqU,KAAK,EAAE,CAAC,iBAAD,EAAoB,kBAApB;;CA/BJ;;ACAA,IAAMiM,kBAAkB,GAAG;EAChC1K,MAAM,EAAE,YADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,YAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD,EAA2C,WAA3C;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,oBAAD,EAAuB,UAAvB,CAFS;GAZmB;EAkBhCgE,GAAG,EAAE,IAlB2B;EAoBhCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GArBmB;EAwBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE;;CA7BJ;;ACAA,IAAMkM,wBAAwB,GAAG;EACtC3K,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qCAAD,EAAwC,qBAAxC;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,qBAAD,EAAwB,OAAxB,CADS,EAET,+BAFS;GARyB;EActC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,gCAAD,EAAmC,UAAnC,CAFS;GAfyB;EAqBtCgE,GAAG,EAAE,IArBiC;EAuBtCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAxByB;EA2BtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,uCADS,EAET,yBAFS,CADJ;IAMPyD,UAAU,EAAE;sBACM,qBAAA9P,KAAK,EAAI;YACjB4N,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,KAAX,CAAZ;QACAF,KAAK,CAACE,IAAN,CAAW,KAAX,EAAkB0N,GAAG,CAAChU,OAAJ,CAAY,SAAZ,EAAuB,EAAvB,EAA2BA,OAA3B,CAAmC,OAAnC,EAA4C,EAA5C,CAAlB;;KATG;IAaPqU,KAAK,EAAE,CAAC,+BAAD;;CAxCJ;;ACAA,IAAMmM,oBAAoB,GAAG;EAClC5K,MAAM,EAAE,gBAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,wBAAD,EAA2B,IAA3B;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iBAAD,EAAoB,iBAApB;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,MAAD,CADG;IAEd0H,MAAM,EAAE,aAFM;IAGd5C,QAAQ,EAAE;GAdsB;EAiBlCd,GAAG,EAAE,IAjB6B;EAmBlCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBqB;EAuBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,EAAiB,UAAjB,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE,CAAC,cAAD;;CA5BJ;;ACAA,IAAMoM,uBAAuB,GAAG;EACrC7K,MAAM,EAAE,mBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD,EAAqC,IAArC;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,yBAAD,EAA4B,uBAA5B;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,8BAAD,EAAiC,SAAjC,CADS,EAET,CAAC,gCAAD,EAAmC,OAAnC,CAFS,CADG;IAKd8E,QAAQ,EAAE;GAhByB;EAmBrCd,GAAG,EAAE,IAnBgC;EAqBrCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,kCAAD,EAAqC,OAArC,CADS,EAET,CAAC,uBAAD,EAA0B,OAA1B,CAFS;GAtBwB;EA4BrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,gBAAD,EAAmB,UAAnB,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,eAAD;;CAnCJ;;ACAA,IAAMqM,mBAAmB,GAAG;EACjC9K,MAAM,EAAE,eADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJoB;EAOjC2D,MAAM,EAAE,IAPyB;EASjCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,mBAAD,CADG;IAEd0H,MAAM,EAAE,WAFM;IAGd5C,QAAQ,EAAE;GAZqB;EAejCd,GAAG,EAAE,IAf4B;EAiBjCS,cAAc,EAAE,IAjBiB;EAmBjC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,YAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,mBAAD;;CA1BJ;;ACAA,IAAMsM,sBAAsB,GAAG;EACpC/K,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,YAAD,EAAe,yBAAf;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,UAAD;GARuB;EAWpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,QAAD,EAAW,CAAC,oBAAD,EAAuB,OAAvB,CAAX,CADG;IAGd0H,MAAM,EAAE,mBAHM;IAKd5C,QAAQ,EAAE;GAhBwB;EAmBpCd,GAAG,EAAE,IAnB+B;EAqBpCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBuB;EAyBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,qBAAD,EAAwB,aAAxB,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE;;CA9BJ;;ACAA,IAAMuM,uBAAuB,GAAG;EACrChL,MAAM,EAAE,mBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iBAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,iBAAD,EAAoB,UAApB,CAAD;GAZwB;EAerCgE,GAAG,EAAE,IAfgC;EAiBrCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBwB;EAqBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,8BAAD;;CA5BJ;;ACEA,IAAMwM,gBAAgB,GAAG;EAC9BjL,MAAM,EAAE,UADsB;EAG9B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,oCAAD,EAAuC,eAAvC;GAJiB;EAO9B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,6BAAD,EAAgC,OAAhC,CADS,EAET,sBAFS;GARiB;EAc9B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,MAAD,EAAS,UAAT,CAFS;GAfiB;EAqB9BgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,gCAAD,EAAmC,aAAnC;GAtBiB;EAyB9ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA1BiB;EA6B9BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,kDADS,EAET,wBAFS,CADJ;IAMPyD,UAAU,EAAE;4BACY,yBAAA9P,KAAK,EAAI;YACvB0a,YAAY,GAAG1a,KAAK,CAACE,IAAN,CAAW,eAAX,CAArB;YACM0N,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,KAAX,CAAZ;YACMnG,GAAG,GAAG8B,GAAG,CAACmC,OAAJ,CAAY4P,GAAZ,EAAiB8M,YAAjB,CAAZ;QACA1a,KAAK,CAACE,IAAN,CAAW,KAAX,EAAkBnG,GAAlB;;KAXG;IAePkU,KAAK,EAAE,CAAC,gBAAD,EAAmB,MAAnB,EAA2B,eAA3B,EAA4C,qBAA5C;;CA5CJ;;ACFA,IAAM0M,sBAAsB,GAAG;EACpCnL,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,iCAAD,EAAoC,OAApC,CAAD;GARuB;EAWpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZuB;EAepCgE,GAAG,EAAE,IAf+B;EAiBpCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBuB;EAqBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE;;CA1BJ;;ACAA,IAAM2M,uBAAuB,GAAG;EACrCpL,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,qBAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,aAAD,EAAgB,UAAhB,CAAD;GAZwB;EAerCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD,EAAwC,eAAxC;GAhBwB;EAmBrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBwB;EAuBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE,CAAC,YAAD;;CA5BJ;;ACAA,IAAM4M,qBAAqB,GAAG;EACnCrL,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,mBAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,eAAD;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,wCAAD,EAA2C,OAA3C,CAAD;GAZsB;EAenCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,gBAAD;GAhBsB;EAmBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBsB;EAuBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE,CAAC,YAAD;;CA5BJ;;ACAA,IAAM6M,uBAAuB,GAAG;EACrCtL,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,YAAD,EAAe,gBAAf;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,uBAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,SAAD,CADG;;IAGd0H,MAAM,EAAE,sBAHM;IAId5C,QAAQ,EAAE;GAfyB;EAkBrCd,GAAG,EAAE,IAlBgC;EAoBrCS,cAAc,EAAE,IApBqB;EAsBrC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAhCJ;;ACAA,IAAM8M,qBAAqB,GAAG;EACnCvL,MAAM,EAAE,eAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD,EAAqC,OAArC;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,6BAAD,EAAgC,OAAhC,CADS,EAET,+BAFS;GARsB;EAcnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,iCAAD,EAAoC,CAAC,WAAD,EAAc,UAAd,CAApC;GAfsB;EAkBnCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CACT,CAAC,6BAAD,EAAgC,OAAhC,CADS,EAET,0BAFS;GAnBsB;EAyBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS,EAET,CAAC,kCAAD,EAAqC,KAArC,CAFS;GA1BsB;EAgCnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,2BAAD,EAA8B,sBAA9B;GAjCsB;EAoCnC2O,MAAM,EAAE;IACN3U,KAAK,EAAE;MACLgG,SAAS,EAAE,CAAC,oBAAD,EAAuB,QAAvB;;;CAtCV;;ACAA,IAAM4O,mBAAmB,GAAG;EACjCzL,MAAM,EAAE,aADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,eAAD;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,uEADS;GARoB;EAajCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,gBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAvBJ;;ACAA,IAAMiN,qBAAqB,GAAG;EACnC1L,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,SAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kBAAD;GARsB;EAWnC4D,cAAc,EAAE,IAXmB;EAanCe,OAAO,EAAE;IACP3E,SAAS,EAAE,CAAC,UAAD;GAdsB;EAiBnCyE,cAAc,EAAE,IAjBmB;EAmBnC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;;;IAKPyD,UAAU,EAAE;iBACC,IADD;0BAEU,GAFV;MAGVqL,MAAM,EAAE,GAHE;MAIVC,OAAO,EAAE;KATJ;;;;IAePnN,KAAK,EAAE,CAAC,eAAD,EAAkB,oBAAlB;;CAlCJ;;ACAA,IAAMoN,uBAAuB,GAAG;EACrC7L,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iBAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,MAAD,CADG;IAEd8E,QAAQ,EAAE;GAbyB;EAgBrCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAjBwB;EAoBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,2BAAD,CADJ;IAEP4B,KAAK,EAAE,CACL,MADK,EAEL,QAFK,EAGL,sCAHK,EAIL,SAJK,EAKL,0BALK;;CAtBJ;;ACAA,IAAMqN,kCAAkC,GAAG;EAChD9L,MAAM,EAAE,6BADwC;EAGhD3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJmC;EAOhD2O,MAAM,EAAE;IACNO,QAAQ,EAAE;MACRlP,SAAS,EAAE,CAAC,YAAD,CADH;MAERyD,UAAU,EAAE;;GAVgC;EAchDG,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,SAAD,CADG;IAEd0H,MAAM,EAAE,sBAFM;IAGd5C,QAAQ,EAAE;GAjBoC;EAoBhDL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GArBmC;EAwBhDtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,iCAAD,CADJ;IAEPkE,cAAc,EAAE,KAFT;IAIPtC,KAAK,EAAE,CACL,SADK,EAEL,IAFK,EAGL,SAHK,EAIL,WAJK,EAKL,kBALK,EAML,kDANK;;CA5BJ;;ACAA,IAAMuN,kBAAkB,GAAG;EAChChM,MAAM,EAAE,aADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,4BAAD,EAA+B,OAA/B,CAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZmB;EAehCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,UAAD,CAAD,CADJ;;;IAKPyD,UAAU,EAAE;MACV0B,EAAE,EAAE,YAAAxR,KAAK,EAAI;;;QAGXA,KAAK,CAACE,IAAN,CAAW,IAAX,EAAiB,IAAjB,EAHW;;eAMJ,IAAP;OAPQ;MASViQ,EAAE,EAAE,YAAAnQ,KAAK,EAAI;;;QAGXA,KAAK,CAACE,IAAN,CAAW,IAAX,EAAiB,IAAjB,EAHW;;;QAOXF,KAAK,CAACyb,KAAN,CAAY,SAAZ;OAhBQ;MAkBVC,EAAE,EAAE,YAAA1b,KAAK,EAAI;;;QAGXA,KAAK,CAACE,IAAN,CAAW,OAAX,EAAoB,qBAApB;;;;CAzCD;;ACAA,IAAMyb,oBAAoB,GAAG;EAClCnM,MAAM,EAAE,cAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,WAAD,EAAc,4BAAd;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,OAAD,EAAU,+BAAV,CADG;IAEd8E,QAAQ,EAAE,kBAFI;IAGd4C,MAAM,EAAE;GAdwB;EAiBlCjD,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBqB;EAqBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,EAAY,mBAAZ,CADJ;;;IAKPyD,UAAU,EAAE;MACV8L,EAAE,EAAE,KADM;MAEVC,EAAE,EAAE;KAPC;;;;IAaP5N,KAAK,EAAE;;CAlCJ;;ACAP;;;AAEA,AAAO,IAAM6N,wBAAwB,GAAG;EACtCtM,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,8BAAD;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,6BAAD;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,yBAAD,EAA4B,UAA5B,CADS,EAET,CAAC,4BAAD,EAA+B,UAA/B,CAFS;GAZyB;EAkBtCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD;GAnByB;EAsBtCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvByB;EA0BtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;;;IAKPyD,UAAU,EAAE;MACVhN,CAAC,EAAE,WAAA9C,KAAK,EAAI;YACN,CAACA,KAAK,CAACmJ,QAAN,CAAe,YAAf,CAAL,EAAmC,OAAO,IAAP;YAC/B4S,CAAC,GAAG,EAAR;YACIC,CAAC,GAAG,CAAR;;aACK,IAAIC,CAAC,GAAGjc,KAAK,CAACrG,IAAN,EAAb,EAA2BqiB,CAAC,GAAGC,CAAC,CAACzgB,MAAjC,EAAyCwgB,CAAC,IAAI,CAA9C,EAAiD;cACzCE,CAAC,GAAGD,CAAC,CAACE,UAAF,CAAaH,CAAb,CAAV;UACAE,CAAC,KAAK,GAAN,GACKH,CAAC,IAAI,GADV,GAEIG,CAAC,KAAK,GAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,GAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,GAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,EAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,EAAN,GACCH,CAAC,IAAI,IADN,GAEAG,CAAC,GAAG,EAAJ,KAAWH,CAAC,IAAIK,MAAM,CAACC,YAAP,CAAoBH,CAAC,GAAG,CAAxB,CAAhB,CAZJ;;;QAeFlc,KAAK,CAACkE,IAAN,CAAW6X,CAAX;QACA/b,KAAK,CAACsF,WAAN,CAAkB,YAAlB;QACAtF,KAAK,CAACgF,QAAN,CAAe,cAAf;eACO,IAAP;OAzBQ;MA2BV9B,GAAG,EAAE,aAAAlD,KAAK,EAAI;YACR,CAACA,KAAK,CAACmJ,QAAN,CAAe,YAAf,CAAL,EAAmC,OAAO,IAAP;YAC/B4S,CAAC,GAAG,EAAR;YACIC,CAAC,GAAG,CAAR;;aACK,IAAIC,CAAC,GAAGjc,KAAK,CAACrG,IAAN,EAAb,EAA2BqiB,CAAC,GAAGC,CAAC,CAACzgB,MAAjC,EAAyCwgB,CAAC,IAAI,CAA9C,EAAiD;cACzCE,CAAC,GAAGD,CAAC,CAACE,UAAF,CAAaH,CAAb,CAAV;UACAE,CAAC,KAAK,GAAN,GACKH,CAAC,IAAI,GADV,GAEIG,CAAC,KAAK,GAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,GAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,GAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,EAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,EAAN,GACCH,CAAC,IAAI,IADN,GAEAG,CAAC,GAAG,EAAJ,KAAWH,CAAC,IAAIK,MAAM,CAACC,YAAP,CAAoBH,CAAC,GAAG,CAAxB,CAAhB,CAZJ;;;QAeFlc,KAAK,CAACkE,IAAN,CAAW6X,CAAX;QACA/b,KAAK,CAACsF,WAAN,CAAkB,YAAlB;QACAtF,KAAK,CAACgF,QAAN,CAAe,cAAf;eACO,IAAP;;KAxDG;;;;IA+DPiJ,KAAK,EAAE;;CAzFJ;;ACFA,IAAMqO,oBAAoB,GAAG;EAClC9M,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,WAAD;GAJqB;EAOlC2D,MAAM,EAAE,IAP0B;EASlCC,cAAc,EAAE,IATkB;EAWlCI,GAAG,EAAE,IAX6B;EAalCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,2BAAD,EAA8B,SAA9B,CAAD;GAdqB;EAiBlCtP,OAAO,EAAE;;IAEPsP,SAAS,EAAE,CAAC,CAAC,gBAAD,EAAmB,YAAnB,EAAiC,WAAjC,EAA8C,YAA9C,CAAD,CAFJ;;;IAMPyD,UAAU,EAAE,EANL;;;;IAWP7B,KAAK,EAAE,CAAC,YAAD,EAAe,UAAf;;CA5BJ;;ACAA,IAAMsO,uBAAuB,GAAG;EACrC/M,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,sCAAD;GARwB;;;;EAcrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE;;GAfwB;EAoBrCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,gCAAD;GArBwB;;;;EA2BrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE;;GA5BwB;EAiCrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT;;oDAAA,EAIE,kBAJF,CADS,CADJ;;;IAYPyD,UAAU,EAAE,EAZL;;;;IAiBP7B,KAAK,EAAE;;CAlDJ;;ACAA,IAAMuO,uBAAuB,GAAG;EACrChN,MAAM,EAAE,iBAD6B;;;;;;EASrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,OAAD;GAVwB;EAarC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,oCAAD;GAdwB;EAiBrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,cAAD,EAAiB,UAAjB,CAAD;GAlBwB;EAqBrCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,4BAAD;GAtBwB;EAyBrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA1BwB;EA6BrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,6BAAD,CADJ;;;IAKPyD,UAAU,EAAE;MACV0B,EAAE,EAAE,YAAAxR,KAAK,EAAI;;;;QAIXA,KAAK,CAACyc,MAAN,CAAa,SAAb;;KAVG;;;;IAiBPxO,KAAK,EAAE;8BAAA,EAGL,iBAHK;;kBAAA;cAAA,EAYL,OAZK,EAaL,UAbK;;CA9CJ;;ACAA,IAAMyO,mBAAmB,GAAG;EACjClN,MAAM,EAAE,cADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD,EAAqC,gBAArC;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,+CAAD;GARoB;EAWjC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,+BAAD,EAAkC,SAAlC,CAAD;GAZoB;EAejCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,IAAD;GAhBoB;EAmBjCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBoB;EAuBjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,6BAAD,CADJ;;;IAKPyD,UAAU,EAAE;;;;qBAIK,oBAAA9P,KAAK,EAAI;YAClB,CAACA,KAAK,CAAC0D,OAAN,CAAc,GAAd,EAAmBlI,MAAxB,EAAgC;cACxBqH,WAAW,GAAG7C,KAAK,CAACwC,IAAN,CAAW,GAAX,CAApB;;cACIK,WAAJ,EAAiB;YACf7C,KAAK,CAACkC,MAAN;YACAW,WAAW,CAAC2N,OAAZ,CAAoBxQ,KAApB;;;;KAdD;;;;IAuBPiO,KAAK,EAAE,CACL,iBADK,EAEL,yBAFK,EAGL,OAHK,EAIL,uBAJK;;CA9CJ;;ACAA,IAAM0O,iBAAiB,GAAG;EAC/BnN,MAAM,EAAE,iBADuB;EAG/B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJkB;EAO/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,8BAAD;GARkB;EAW/B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,sBAAD,CADG;IAEd8E,QAAQ,EAAE;GAbmB;EAgB/Bd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,iBAAD;GAjBkB;EAoB/ByE,cAAc,EAAE;IACdzE,SAAS,EAAE;KAER,uBAAD,EAA0B,OAA1B,CAFS;;KAKR,2BAAD,EAA8B,SAA9B,CALS;;8BAAA;GArBkB;EAiC/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,iBAAD,CADJ;IAEP4B,KAAK,EAAE,CACL,cADK,EAEL,iBAFK,EAGL,OAHK,EAIL,WAJK,EAKL,sBALK,EAML,kBANK,EAOL,YAPK,EAQL,cARK;;CAnCJ;;ACAA,IAAM2O,qBAAqB,GAAG;EACnCpN,MAAM,EAAE,eAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZsB;EAenCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,0BAAD;GAhBsB;EAmBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBsB;EAuBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,WAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CACL,sBADK,EAEL,OAFK,EAGL,wCAHK;;CAjCJ;;ACAA,IAAM4O,kCAAkC,GAAG;EAChDrN,MAAM,EAAE,6BADwC;EAGhD3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJmC;EAOhD2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,wBAAD;GARmC;EAWhD4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,gCAAD,EAAmC,OAAnC,CAAD;GAZmC;EAehDgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAhBmC;EAmBhDyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBmC;EAuBhDtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,sBAAD,CADJ;IAGP4B,KAAK,EAAE,CAAC,SAAD;;CA1BJ;;ACAA,IAAM6O,iBAAiB,GAAG;EAC/BtN,MAAM,EAAE,YADuB;EAG/B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJkB;EAO/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,aAAD,EAAgB,gBAAhB;GARkB;EAW/B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,sBAAD,EAAyB,UAAzB,CAAD;GAZkB;EAe/BgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,OAAD;GAhBkB;EAmB/ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBkB;EAuB/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,QAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAjCJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACGP,iBAAe,aAAY8O,gBAAZ,EAA8B3gB,MAA9B,CAAqC,UAACC,GAAD,EAAM4H,GAAN,EAAc;MAC1DqL,SAAS,GAAGyN,gBAAgB,CAAC9Y,GAAD,CAAlC;2BAEK5H,GADL,EAEKoT,qBAAqB,CAACH,SAAD,CAF1B;CAFa,EAMZ,EANY,CAAf;;ACHA;AACA,AAAO,IAAM0N,eAAe,GAAG,wCAAxB;;AAGP,AAAO,IAAMC,YAAY,GAAG,IAAI1iB,MAAJ,CAAW,aAAX,EAA0B,GAA1B,CAArB;AAEP;AAkBA,AAAO,IAAM2iB,cAAc,GAAG,WAAvB;AACP,AAAO,IAAMC,eAAe,GAAG,WAAxB;AACP,AAAO,IAAMC,oBAAoB,GAAG,4BAA7B;AACP,AAAO,IAAMC,sBAAsB,GAAG,oBAA/B;AACP,AAAO,IAAMC,qBAAqB,GAAG,QAA9B;AACP,AAAO,IAAMC,eAAe,GAAG,6BAAxB;AACP,IAAMC,SAAS,GAAG,CAChB,UADgB,EAEhB,UAFgB,EAGhB,QAHgB,EAIhB,OAJgB,EAKhB,QALgB,EAMhB,SANgB,EAOhB,QAPgB,CAAlB;AASA,IAAMC,YAAY,GAAGD,SAAS,CAAC7gB,IAAV,CAAe,GAAf,CAArB;AACA,AAAO,IAAM+gB,eAAe,GAAG,IAAInjB,MAAJ,sBACfkjB,YADe,eAE7B,GAF6B,CAAxB;AAIP,IAAME,MAAM,GAAG,CACb,KADa,EAEb,KAFa,EAGb,KAHa,EAIb,KAJa,EAKb,KALa,EAMb,KANa,EAOb,KAPa,EAQb,KARa,EASb,KATa,EAUb,KAVa,EAWb,KAXa,EAYb,KAZa,CAAf;AAcA,IAAMC,SAAS,GAAGD,MAAM,CAAChhB,IAAP,CAAY,GAAZ,CAAlB;AACA,IAAMkhB,UAAU,GAAG,qCAAnB;AACA,IAAMC,UAAU,GAAG,wCAAnB;AACA,IAAMC,UAAU,GAAG,cAAnB;AACA,AAAO,IAAMC,iBAAiB,GAAG,IAAIzjB,MAAJ,YAC3BsjB,UAD2B,gBACXC,UADW,gBACKC,UADL,6BACkCH,SADlC,QAE/B,IAF+B,CAA1B;;;AAOP,AAAO,IAAMK,mBAAmB,GAAG,WAA5B;;;;AAKP,AAAO,IAAMC,kBAAkB,GAAG,gBAA3B;AAEP,AAAO,IAAMC,iBAAiB,GAAG,IAAI5jB,MAAJ,CAAW,2BAAX,EAAwC,GAAxC,CAA1B;;ACxEP;;AACA,AAAe,SAAS6jB,WAAT,CAAqBpO,MAArB,EAA6B;SACnCtW,eAAe,CAACsW,MAAM,CAACpW,OAAP,CAAeojB,eAAf,EAAgC,IAAhC,EAAsCnjB,IAAtC,EAAD,CAAtB;;;ACJa,SAASoU,OAAT,CAAeoQ,YAAf,EAA6B;EAC1CA,YAAY,GAAGA,YAAY,CAACxkB,IAAb,EAAf;;MACIykB,QAAQ,CAACC,QAAT,CAAkBF,YAAlB,CAAJ,EAAqC;WAC5BA,YAAP;;;SAGK,IAAP;;;ACFF;;AACA,AAAe,SAASG,QAAT,CAAkBnO,GAAlB,QAAuC;MAAd3Q,CAAc,QAAdA,CAAc;MAAXsR,OAAW,QAAXA,OAAW;;MAEhDX,GAAG,CAAC7U,MAAJ,GAAa,IAAb,IAAqB6U,GAAG,CAAC7U,MAAJ,GAAa,CAAtC,EAAyC,OAAO,IAAP,CAFW;;MAKhDwV,OAAO,IAAIlU,cAAc,CAACkU,OAAD,EAAU,EAAV,CAAd,KAAgClU,cAAc,CAACuT,GAAD,EAAM,EAAN,CAA7D,EACE,OAAO,IAAP;MAEIoO,OAAO,GAAGzS,SAAS,CAACqE,GAAD,EAAM3Q,CAAN,CAAzB,CARoD;;;MAYhDud,YAAY,CAAC7iB,IAAb,CAAkBqkB,OAAlB,CAAJ,EAAgC,OAAO,IAAP;SAEzB/kB,eAAe,CAAC+kB,OAAO,CAAC5kB,IAAR,EAAD,CAAtB;;;ACHK,SAAS6kB,eAAT,CAAyBC,UAAzB,EAAqC;SACnC,CAACA,UAAU,CAAC5jB,KAAX,CAAiBijB,iBAAjB,KAAuC,EAAxC,EACJrhB,IADI,CACC,GADD,EAEJ/C,OAFI,CAEI0jB,qBAFJ,EAE2B,GAF3B,EAGJ1jB,OAHI,CAGIyjB,sBAHJ,EAG4B,UAH5B,EAIJzjB,OAJI,CAIIwjB,oBAJJ,EAI0B,IAJ1B,EAKJvjB,IALI,EAAP;;AAQF,AAAO,SAAS+kB,UAAT,CAAoBD,UAApB,EAAgCxN,QAAhC,EAA0C4C,MAA1C,EAAkD;MACnDkK,mBAAmB,CAAC7jB,IAApB,CAAyBukB,UAAzB,CAAJ,EAA0C;WACjCE,MAAM,CAAC,IAAIC,IAAJ,CAASH,UAAT,CAAD,CAAb;;;MAGEjB,eAAe,CAACtjB,IAAhB,CAAqBukB,UAArB,CAAJ,EAAsC;QAC9BI,SAAS,GAAGrB,eAAe,CAACrjB,IAAhB,CAAqBskB,UAArB,CAAlB;WACOE,MAAM,GAAGG,QAAT,CAAkBD,SAAS,CAAC,CAAD,CAA3B,EAAgCA,SAAS,CAAC,CAAD,CAAzC,CAAP;;;MAGExB,eAAe,CAACnjB,IAAhB,CAAqBukB,UAArB,CAAJ,EAAsC;WAC7BE,MAAM,EAAb;;;SAGK1N,QAAQ,GACX0N,MAAM,CAACI,EAAP,CAAUN,UAAV,EAAsB5K,MAAM,IAAImL,WAAW,CAACP,UAAD,CAA3C,EAAyDxN,QAAzD,CADW,GAEX0N,MAAM,CAACF,UAAD,EAAa5K,MAAM,IAAImL,WAAW,CAACP,UAAD,CAAlC,CAFV;;;;AAOF,AAAe,SAASQ,kBAAT,CACbR,UADa,EAGb;iFADuB,EACvB;MADExN,QACF,QADEA,QACF;MADY4C,MACZ,QADYA,MACZ;;;MAEImJ,cAAc,CAAC9iB,IAAf,CAAoBukB,UAApB,CAAJ,EAAqC;WAC5B,IAAIG,IAAJ,CAAS,UAASH,UAAT,EAAqB,EAArB,CAAT,EAAmCS,WAAnC,EAAP;;;MAEEjC,eAAe,CAAC/iB,IAAhB,CAAqBukB,UAArB,CAAJ,EAAsC;WAC7B,IAAIG,IAAJ,CAAS,UAASH,UAAT,EAAqB,EAArB,IAA2B,IAApC,EAA0CS,WAA1C,EAAP;;;MAGEC,IAAI,GAAGT,UAAU,CAACD,UAAD,EAAaxN,QAAb,EAAuB4C,MAAvB,CAArB;;MAEI,CAACsL,IAAI,CAACC,OAAL,EAAL,EAAqB;IACnBX,UAAU,GAAGD,eAAe,CAACC,UAAD,CAA5B;IACAU,IAAI,GAAGT,UAAU,CAACD,UAAD,EAAaxN,QAAb,EAAuB4C,MAAvB,CAAjB;;;SAGKsL,IAAI,CAACC,OAAL,KAAiBD,IAAI,CAACD,WAAL,EAAjB,GAAsC,IAA7C;;;ACrDa,SAASG,gBAAT,CACb1a,OADa,QAGb;MADEnF,CACF,QADEA,CACF;mCADK8f,kBACL;MADKA,kBACL,sCAD0B,IAC1B;wBADgC3V,KAChC;MADgCA,KAChC,2BADwC,EACxC;sBAD4C9P,GAC5C;MAD4CA,GAC5C,yBADkD,EAClD;iCADsDwW,cACtD;MADsDA,cACtD,oCADuE,IACvE;;;EAGAtG,kBAAe,CAACpF,OAAD,EAAUnF,CAAV,CAAf,CAHA;;;;MAQI6Q,cAAJ,EAAoB9L,WAAW,CAACI,OAAD,EAAUnF,CAAV,CAAX,CARpB;;EAWAsL,oBAAiB,CAACnG,OAAD,EAAUnF,CAAV,EAAa3F,GAAb,CAAjB,CAXA;;;;EAgBA6K,UAAU,CAACC,OAAD,EAAUnF,CAAV,EAAa3F,GAAb,CAAV,CAhBA;;;EAoBAkL,aAAa,CAACJ,OAAD,EAAUnF,CAAV,CAAb,CApBA;;;;EAyBAwF,aAAU,CAACL,OAAD,EAAUnF,CAAV,CAAV,CAzBA;;EA4BAkK,YAAY,CAAC/E,OAAD,EAAUnF,CAAV,EAAamK,KAAb,CAAZ,CA5BA;;;;;MAkCI0G,cAAJ,EAAoB5G,YAAS,CAAC9E,OAAD,EAAUnF,CAAV,EAAa8f,kBAAb,CAAT,CAlCpB;;EAqCA/Z,WAAW,CAACZ,OAAD,EAAUnF,CAAV,CAAX,CArCA;;EAwCA6F,kBAAe,CAACV,OAAD,EAAUnF,CAAV,CAAf;SAEOmF,OAAP;;;ACrDa,SAAS4a,aAAT,CAAoB5V,KAApB,QAAuC;MAAV9P,GAAU,QAAVA,GAAU;MAAL2F,CAAK,QAALA,CAAK;;;;MAGhDwe,kBAAkB,CAAC9jB,IAAnB,CAAwByP,KAAxB,CAAJ,EAAoC;IAClCA,KAAK,GAAG6V,iBAAiB,CAAC7V,KAAD,EAAQ9P,GAAR,CAAzB;GAJkD;;;;MAShD8P,KAAK,CAACrO,MAAN,GAAe,GAAnB,EAAwB;;QAEhB2U,EAAE,GAAGzQ,CAAC,CAAC,IAAD,CAAZ;;QACIyQ,EAAE,CAAC3U,MAAH,KAAc,CAAlB,EAAqB;MACnBqO,KAAK,GAAGsG,EAAE,CAACxW,IAAH,EAAR;;GAbgD;;;SAkB7CD,eAAe,CAACsS,SAAS,CAACnC,KAAD,EAAQnK,CAAR,CAAT,CAAoB7F,IAApB,EAAD,CAAtB;;;ACnBF,SAAS8lB,sBAAT,CAAgCC,UAAhC,EAA4CjmB,IAA5C,EAAkD;;;;MAI5CimB,UAAU,CAACpkB,MAAX,IAAqB,CAAzB,EAA4B;;;;QAIpBqkB,UAAU,GAAGD,UAAU,CAACxjB,MAAX,CAAkB,UAACC,GAAD,EAAMyjB,SAAN,EAAoB;MACvDzjB,GAAG,CAACyjB,SAAD,CAAH,GAAiBzjB,GAAG,CAACyjB,SAAD,CAAH,GAAiBzjB,GAAG,CAACyjB,SAAD,CAAH,GAAiB,CAAlC,GAAsC,CAAvD;aACOzjB,GAAP;KAFiB,EAGhB,EAHgB,CAAnB;;gCAK6B,iBAAgBwjB,UAAhB,EAA4BzjB,MAA5B,CAC3B,UAACC,GAAD,EAAM4H,GAAN,EAAc;UACR5H,GAAG,CAAC,CAAD,CAAH,GAASwjB,UAAU,CAAC5b,GAAD,CAAvB,EAA8B;eACrB,CAACA,GAAD,EAAM4b,UAAU,CAAC5b,GAAD,CAAhB,CAAP;;;aAGK5H,GAAP;KANyB,EAQ3B,CAAC,CAAD,EAAI,CAAJ,CAR2B,CATH;;QASnB0jB,OATmB;QASVC,SATU;;;;;;QAwBtBA,SAAS,IAAI,CAAb,IAAkBD,OAAO,CAACvkB,MAAR,IAAkB,CAAxC,EAA2C;MACzCokB,UAAU,GAAGjmB,IAAI,CAACuB,KAAL,CAAW6kB,OAAX,CAAb;;;QAGIE,SAAS,GAAG,CAACL,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC3iB,KAAX,CAAiB,CAAC,CAAlB,CAAhB,CAAlB;QACMijB,UAAU,GAAGD,SAAS,CAAC7jB,MAAV,CACjB,UAACC,GAAD,EAAM8S,GAAN;aAAe9S,GAAG,CAACb,MAAJ,GAAa2T,GAAG,CAAC3T,MAAjB,GAA0Ba,GAA1B,GAAgC8S,GAA/C;KADiB,EAEjB,EAFiB,CAAnB;;QAKI+Q,UAAU,CAAC1kB,MAAX,GAAoB,EAAxB,EAA4B;aACnB0kB,UAAP;;;WAGKvmB,IAAP;;;SAGK,IAAP;;;AAGF,SAASwmB,oBAAT,CAA8BP,UAA9B,EAA0C7lB,GAA1C,EAA+C;;;;;;;mBAO5B8B,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CAP4B;MAOrCiC,IAPqC,cAOrCA,IAPqC;;MAQvCokB,WAAW,GAAGpkB,IAAI,CAACpC,OAAL,CAAaukB,iBAAb,EAAgC,EAAhC,CAApB;MAEMkC,SAAS,GAAGT,UAAU,CAAC,CAAD,CAAV,CAAcnkB,WAAd,GAA4B7B,OAA5B,CAAoC,GAApC,EAAyC,EAAzC,CAAlB;MACM0mB,cAAc,GAAGC,KAAK,CAACC,WAAN,CAAkBH,SAAlB,EAA6BD,WAA7B,CAAvB;;MAEIE,cAAc,GAAG,GAAjB,IAAwBD,SAAS,CAAC7kB,MAAV,GAAmB,CAA/C,EAAkD;WACzCokB,UAAU,CAAC3iB,KAAX,CAAiB,CAAjB,EAAoBN,IAApB,CAAyB,EAAzB,CAAP;;;MAGI8jB,OAAO,GAAGb,UAAU,CACvB3iB,KADa,CACP,CAAC,CADM,EACH,CADG,EAEbxB,WAFa,GAGb7B,OAHa,CAGL,GAHK,EAGA,EAHA,CAAhB;MAIM8mB,YAAY,GAAGH,KAAK,CAACC,WAAN,CAAkBC,OAAlB,EAA2BL,WAA3B,CAArB;;MAEIM,YAAY,GAAG,GAAf,IAAsBD,OAAO,CAACjlB,MAAR,IAAkB,CAA5C,EAA+C;WACtCokB,UAAU,CAAC3iB,KAAX,CAAiB,CAAjB,EAAoB,CAAC,CAArB,EAAwBN,IAAxB,CAA6B,EAA7B,CAAP;;;SAGK,IAAP;;;;;AAKF,AAAe,SAAS+iB,iBAAT,CAA2B7V,KAA3B,EAA4C;MAAV9P,GAAU,uEAAJ,EAAI;;;MAGnD6lB,UAAU,GAAG/V,KAAK,CAAC3O,KAAN,CAAYgjB,kBAAZ,CAAnB;;MACI0B,UAAU,CAACpkB,MAAX,KAAsB,CAA1B,EAA6B;WACpBqO,KAAP;;;MAGE8W,QAAQ,GAAGhB,sBAAsB,CAACC,UAAD,EAAa/V,KAAb,CAArC;MACI8W,QAAJ,EAAc,OAAOA,QAAP;EAEdA,QAAQ,GAAGR,oBAAoB,CAACP,UAAD,EAAa7lB,GAAb,CAA/B;MACI4mB,QAAJ,EAAc,OAAOA,QAAP,CAZ2C;;;SAgBlD9W,KAAP;;;AC9FF,IAAM+W,QAAQ,GAAG;EACf5Q,MAAM,EAAEoO,WADO;EAEftN,cAAc,EAAE+P,OAFD;EAGfxQ,GAAG,EAAEmO,QAHU;EAIfvO,cAAc,EAAEkP,kBAJD;EAKfpiB,OAAO,EAAE+jB,gBALM;EAMfjX,KAAK,EAAE4V;CANT;;ACFA;;;;;;;;;;;AAUA,AAAe,SAASsB,eAAT,CAAyBrhB,CAAzB,EAA4BshB,IAA5B,EAAkC;MAC3CA,IAAI,CAACnf,uBAAT,EAAkC;IAChCnC,CAAC,GAAGmC,uBAAuB,CAACnC,CAAD,CAA3B;;;EAGFA,CAAC,GAAGiE,sBAAmB,CAACjE,CAAD,CAAvB;EACAA,CAAC,GAAGmI,eAAY,CAACnI,CAAD,EAAIshB,IAAI,CAACzZ,WAAT,CAAhB;MACM0Z,aAAa,GAAGjY,mBAAgB,CAACtJ,CAAD,CAAtC;SAEOuhB,aAAP;;;AChBF,IAAMC,uBAAuB,GAAG;EAC9BC,WAAW,EAAE;IACXtf,uBAAuB,EAAE,IADd;IAEX0F,WAAW,EAAE,IAFF;IAGXiY,kBAAkB,EAAE;GAJQ;;;;;;;;;;;;;;;;;;;;EA0B9B4B,OA1B8B,yBA0BGJ,IA1BH,EA0BS;QAA7BthB,CAA6B,QAA7BA,CAA6B;QAA1BwE,IAA0B,QAA1BA,IAA0B;QAApB2F,KAAoB,QAApBA,KAAoB;QAAb9P,GAAa,QAAbA,GAAa;IACrCinB,IAAI,qBAAQ,KAAKG,WAAb,EAA6BH,IAA7B,CAAJ;IAEAthB,CAAC,GAAGA,CAAC,IAAIlC,OAAO,CAACmR,IAAR,CAAazK,IAAb,CAAT,CAHqC;;;QAOjCnE,IAAI,GAAG,KAAKshB,cAAL,CAAoB3hB,CAApB,EAAuBmK,KAAvB,EAA8B9P,GAA9B,EAAmCinB,IAAnC,CAAX;;QAEInU,gBAAgB,CAAC9M,IAAD,CAApB,EAA4B;aACnB,KAAKuhB,kBAAL,CAAwBvhB,IAAxB,EAA8BL,CAA9B,CAAP;KAVmC;;;;;;;;;;wCAgBnB,iBAAgBshB,IAAhB,EAAsBxV,MAAtB,CAA6B,UAAA+V,CAAC;eAAIP,IAAI,CAACO,CAAD,CAAJ,KAAY,IAAhB;OAA9B,CAAlB,4GAAuE;YAA5Dtd,GAA4D;QACrE+c,IAAI,CAAC/c,GAAD,CAAJ,GAAY,KAAZ;QACAvE,CAAC,GAAGlC,OAAO,CAACmR,IAAR,CAAazK,IAAb,CAAJ;QAEAnE,IAAI,GAAG,KAAKshB,cAAL,CAAoB3hB,CAApB,EAAuBmK,KAAvB,EAA8B9P,GAA9B,EAAmCinB,IAAnC,CAAP;;YAEInU,gBAAgB,CAAC9M,IAAD,CAApB,EAA4B;;;;;;;;;;;;;;;;;;;WAKvB,KAAKuhB,kBAAL,CAAwBvhB,IAAxB,EAA8BL,CAA9B,CAAP;GArD4B;;EAyD9B2hB,cAzD8B,0BAyDf3hB,CAzDe,EAyDZmK,KAzDY,EAyDL9P,GAzDK,EAyDAinB,IAzDA,EAyDM;WAC3BF,gBAAY,CAACC,eAAe,CAACrhB,CAAD,EAAIshB,IAAJ,CAAhB,EAA2B;MAC5CthB,CAAC,EAADA,CAD4C;MAE5C8f,kBAAkB,EAAEwB,IAAI,CAACxB,kBAFmB;MAG5C3V,KAAK,EAALA,KAH4C;MAI5C9P,GAAG,EAAHA;KAJiB,CAAnB;GA1D4B;;;;EAqE9BunB,kBArE8B,8BAqEXvhB,IArEW,EAqELL,CArEK,EAqEF;QACtB,CAACK,IAAL,EAAW;aACF,IAAP;;;WAGKrG,eAAe,CAACgG,CAAC,CAACwE,IAAF,CAAOnE,IAAP,CAAD,CAAtB;;CA1EJ;;ACRA;;;;;;AAOA,AAAO,IAAMyhB,sBAAsB,GAAG,CACpC,iBADoC,EAEpC,UAFoC,EAGpC,SAHoC,EAIpC,UAJoC,EAKpC,OALoC,CAA/B;;;AAUP,AAAO,IAAMC,oBAAoB,GAAG,CAAC,UAAD,CAA7B;;;;;;;;AASP,AAAO,IAAMC,sBAAsB,GAAG,CACpC,sBADoC,EAEpC,kBAFoC,EAGpC,kBAHoC,EAIpC,YAJoC,EAKpC,mBALoC,EAMpC,cANoC,CAA/B;AASP,AAAO,IAAMC,oBAAoB,GAAG,CAClC,YADkC,EAElC,cAFkC,EAGlC,cAHkC,EAIlC,aAJkC,EAKlC,aALkC,EAMlC,aANkC,EAOlC,aAPkC,EAQlC,eARkC,EASlC,eATkC,EAUlC,iBAVkC,EAWlC,UAXkC,EAYlC,YAZkC,EAalC,IAbkC,EAclC,iBAdkC,EAelC,OAfkC,CAA7B;;ACzBP,IAAMC,qBAAqB,GAAG;EAC5BR,OAD4B,yBACG;QAArB1hB,CAAqB,QAArBA,CAAqB;QAAlB3F,GAAkB,QAAlBA,GAAkB;QAAb8nB,SAAa,QAAbA,SAAa;;;QAGzBhY,KAAJ;IAEAA,KAAK,GAAGuB,kBAAe,CAAC1L,CAAD,EAAI8hB,sBAAJ,EAA4BK,SAA5B,CAAvB;QACIhY,KAAJ,EAAW,OAAO4V,aAAU,CAAC5V,KAAD,EAAQ;MAAE9P,GAAG,EAAHA,GAAF;MAAO2F,CAAC,EAADA;KAAf,CAAjB,CANkB;;;IAU7BmK,KAAK,GAAGuC,uBAAoB,CAAC1M,CAAD,EAAIgiB,sBAAJ,CAA5B;QACI7X,KAAJ,EAAW,OAAO4V,aAAU,CAAC5V,KAAD,EAAQ;MAAE9P,GAAG,EAAHA,GAAF;MAAO2F,CAAC,EAADA;KAAf,CAAjB,CAXkB;;IAc7BmK,KAAK,GAAGuB,kBAAe,CAAC1L,CAAD,EAAI+hB,oBAAJ,EAA0BI,SAA1B,CAAvB;QACIhY,KAAJ,EAAW,OAAO4V,aAAU,CAAC5V,KAAD,EAAQ;MAAE9P,GAAG,EAAHA,GAAF;MAAO2F,CAAC,EAADA;KAAf,CAAjB,CAfkB;;IAkB7BmK,KAAK,GAAGuC,uBAAoB,CAAC1M,CAAD,EAAIiiB,oBAAJ,CAA5B;QACI9X,KAAJ,EAAW,OAAO4V,aAAU,CAAC5V,KAAD,EAAQ;MAAE9P,GAAG,EAAHA,GAAF;MAAO2F,CAAC,EAADA;KAAf,CAAjB,CAnBkB;;WAsBtB,EAAP;;CAvBJ;;ACVA;;;;;;AAMA,AAAO,IAAMoiB,gBAAgB,GAAG,CAC9B,KAD8B,EAE9B,OAF8B,EAG9B,WAH8B,EAI9B,eAJ8B,EAK9B,YAL8B,EAM9B,WAN8B,EAO9B,SAP8B,CAAzB;AAUP,AAAO,IAAMC,iBAAiB,GAAG,GAA1B;;;;;;;;AASP,AAAO,IAAMC,gBAAgB,GAAG,CAC9B,sBAD8B,EAE9B,mBAF8B,EAG9B,oBAH8B,EAI9B,mBAJ8B,EAK9B,oBAL8B,EAM9B,qBAN8B,EAO9B,aAP8B,EAQ9B,iBAR8B,EAS9B,oBAT8B,EAU9B,qBAV8B,EAW9B,eAX8B,EAY9B,YAZ8B,EAa9B,YAb8B,EAc9B,cAd8B,EAe9B,cAf8B,EAgB9B,yBAhB8B,EAiB9B,qBAjB8B,EAkB9B,qBAlB8B,EAmB9B,SAnB8B,EAoB9B,SApB8B,EAqB9B,gBArB8B,EAsB9B,gBAtB8B,EAuB9B,SAvB8B,CAAzB;;;AA4BP,IAAMC,QAAQ,GAAG,aAAjB;AACA,AAAO,IAAMC,mBAAmB,GAAG,CACjC,CAAC,SAAD,EAAYD,QAAZ,CADiC,EAEjC,CAAC,SAAD,EAAYA,QAAZ,CAFiC,CAA5B;;AC5CP,IAAME,sBAAsB,GAAG;EAC7Bf,OAD6B,yBACH;QAAhB1hB,CAAgB,QAAhBA,CAAgB;QAAbmiB,SAAa,QAAbA,SAAa;QACpB7R,MAAJ,CADwB;;;IAKxBA,MAAM,GAAG5E,kBAAe,CAAC1L,CAAD,EAAIoiB,gBAAJ,EAAsBD,SAAtB,CAAxB;;QACI7R,MAAM,IAAIA,MAAM,CAACxU,MAAP,GAAgBumB,iBAA9B,EAAiD;aACxC3D,WAAW,CAACpO,MAAD,CAAlB;KAPsB;;;IAWxBA,MAAM,GAAG5D,uBAAoB,CAAC1M,CAAD,EAAIsiB,gBAAJ,EAAsB,CAAtB,CAA7B;;QACIhS,MAAM,IAAIA,MAAM,CAACxU,MAAP,GAAgBumB,iBAA9B,EAAiD;aACxC3D,WAAW,CAACpO,MAAD,CAAlB;KAbsB;;;;;;;;;;wCAmBQkS,mBAAhC,4GAAqD;;YAAzC3V,QAAyC;YAA/B6V,KAA+B;;YAC7CriB,IAAI,GAAGL,CAAC,CAAC6M,QAAD,CAAd;;YACIxM,IAAI,CAACvE,MAAL,KAAgB,CAApB,EAAuB;cACf7B,IAAI,GAAGoG,IAAI,CAACpG,IAAL,EAAb;;cACIyoB,KAAK,CAAChoB,IAAN,CAAWT,IAAX,CAAJ,EAAsB;mBACbykB,WAAW,CAACzkB,IAAD,CAAlB;;;;;;;;;;;;;;;;;;;WAKC,IAAP;;CA9BJ;;ACVA;;;;AAIA,AAAO,IAAM0oB,wBAAwB,GAAG,CACtC,wBADsC,EAEtC,aAFsC,EAGtC,SAHsC,EAItC,gBAJsC,EAKtC,WALsC,EAMtC,cANsC,EAOtC,UAPsC,EAQtC,UARsC,EAStC,SATsC,EAUtC,eAVsC,EAWtC,UAXsC,EAYtC,cAZsC,EAatC,qBAbsC,EActC,cAdsC,EAetC,SAfsC,EAgBtC,MAhBsC,CAAjC;;;;AAsBP,AAAO,IAAMC,wBAAwB,GAAG,CACtC,4BADsC,EAEtC,oBAFsC,EAGtC,0BAHsC,EAItC,kBAJsC,EAKtC,oBALsC,EAMtC,kBANsC,EAOtC,iBAPsC,EAQtC,aARsC,EAStC,eATsC,EAUtC,qBAVsC,EAWtC,mBAXsC,EAYtC,cAZsC,EAatC,aAbsC,EActC,YAdsC,EAetC,kBAfsC,EAgBtC,WAhBsC,EAiBtC,UAjBsC,CAAjC;;;;AAuBP,IAAMC,eAAe,GAAG,mDAAxB;AACA,AAAO,IAAMC,sBAAsB,GAAG,CACpC,IAAIjoB,MAAJ,CAAW,4BAAX,EAAyC,GAAzC,CADoC,EAEpC,IAAIA,MAAJ,CAAW,6BAAX,EAA0C,GAA1C,CAFoC,EAGpC,IAAIA,MAAJ,sBAAyBgoB,eAAzB,kBAAuD,GAAvD,CAHoC,CAA/B;;ACxCP,IAAME,6BAA6B,GAAG;EACpCrB,OADoC,yBACL;QAArB1hB,CAAqB,QAArBA,CAAqB;QAAlB3F,GAAkB,QAAlBA,GAAkB;QAAb8nB,SAAa,QAAbA,SAAa;QACzBa,aAAJ,CAD6B;;;;IAK7BA,aAAa,GAAGtX,kBAAe,CAC7B1L,CAD6B,EAE7B2iB,wBAF6B,EAG7BR,SAH6B,EAI7B,KAJ6B,CAA/B;QAMIa,aAAJ,EAAmB,OAAOvD,kBAAkB,CAACuD,aAAD,CAAzB,CAXU;;;IAe7BA,aAAa,GAAGtW,uBAAoB,CAAC1M,CAAD,EAAI4iB,wBAAJ,CAApC;QACII,aAAJ,EAAmB,OAAOvD,kBAAkB,CAACuD,aAAD,CAAzB,CAhBU;;IAmB7BA,aAAa,GAAG5oB,cAAc,CAACC,GAAD,EAAMyoB,sBAAN,CAA9B;QACIE,aAAJ,EAAmB,OAAOvD,kBAAkB,CAACuD,aAAD,CAAzB;WAEZ,IAAP;;CAvBJ;;ACVA;;;;AAIA,IAAMC,mBAAmB,GAAG;EAC1BvB,OAD0B,qBAChB;WACD,IAAP;;CAFJ;;ACJA;;;AAGA,AAAO,IAAMwB,wBAAwB,GAAG,CACtC,UADsC,EAEtC,eAFsC,EAGtC,WAHsC,CAAjC;AAMP,AAAO,IAAMC,wBAAwB,GAAG,CAAC,qBAAD,CAAjC;AAEP,AAAO,IAAMC,6BAA6B,GAAG,CAC3C,QAD2C,EAE3C,YAF2C,EAG3C,OAH2C,EAI3C,OAJ2C,EAK3C,UAL2C,CAAtC;AAOP,AAAO,IAAMC,gCAAgC,GAAG,IAAIxoB,MAAJ,CAC9CuoB,6BAA6B,CAACnmB,IAA9B,CAAmC,GAAnC,CAD8C,EAE9C,GAF8C,CAAzC;AAKP,AAAO,IAAMqmB,6BAA6B,GAAG,CAC3C,QAD2C,EAE3C,QAF2C,EAG3C,OAH2C,EAI3C,UAJ2C,EAK3C,UAL2C,EAM3C,MAN2C,EAO3C,IAP2C,EAQ3C,YAR2C,EAS3C,MAT2C,EAU3C,QAV2C,EAW3C,QAX2C,EAY3C,KAZ2C,EAa3C,QAb2C,EAc3C,SAd2C,EAe3C,QAf2C,EAgB3C,SAhB2C,EAiB3C,SAjB2C,EAkB3C,QAlB2C,EAmB3C,OAnB2C,EAoB3C,UApB2C,EAqB3C,SArB2C,EAsB3C,OAtB2C,EAuB3C,OAvB2C,EAwB3C,KAxB2C,EAyB3C,aAzB2C,CAAtC;AA2BP,AAAO,IAAMC,gCAAgC,GAAG,IAAI1oB,MAAJ,CAC9CyoB,6BAA6B,CAACrmB,IAA9B,CAAmC,GAAnC,CAD8C,EAE9C,GAF8C,CAAzC;AAKP,AAAO,IAAMumB,MAAM,GAAG,gBAAf;AACP,AAAO,IAAMC,MAAM,GAAG,kBAAf;;AC/CP,SAASC,MAAT,CAAgBpjB,KAAhB,EAAuB;mBACXA,KAAK,CAACE,IAAN,CAAW,OAAX,KAAuB,EAAjC,cAAuCF,KAAK,CAACE,IAAN,CAAW,IAAX,KAAoB,EAA3D;;;;AAIF,AAAO,SAASmjB,aAAT,CAAuBtpB,GAAvB,EAA4B;EACjCA,GAAG,GAAGA,GAAG,CAACF,IAAJ,EAAN;MACIwM,KAAK,GAAG,CAAZ;;MAEI0c,gCAAgC,CAAC3oB,IAAjC,CAAsCL,GAAtC,CAAJ,EAAgD;IAC9CsM,KAAK,IAAI,EAAT;;;MAGE4c,gCAAgC,CAAC7oB,IAAjC,CAAsCL,GAAtC,CAAJ,EAAgD;IAC9CsM,KAAK,IAAI,EAAT;GAT+B;;;;MAc7B6c,MAAM,CAAC9oB,IAAP,CAAYL,GAAZ,CAAJ,EAAsB;IACpBsM,KAAK,IAAI,EAAT;;;MAGE8c,MAAM,CAAC/oB,IAAP,CAAYL,GAAZ,CAAJ,EAAsB;IACpBsM,KAAK,IAAI,EAAT;GAnB+B;;;SAwB1BA,KAAP;;;AAIF,AAAO,SAASid,SAAT,CAAmBjf,IAAnB,EAAyB;MAC1BA,IAAI,CAACnE,IAAL,CAAU,KAAV,CAAJ,EAAsB;WACb,CAAP;;;SAGK,CAAP;;;;AAKF,AAAO,SAASqjB,cAAT,CAAwBlf,IAAxB,EAA8B;MAC/BgC,KAAK,GAAG,CAAZ;MACMmd,UAAU,GAAGnf,IAAI,CAACX,OAAL,CAAa,QAAb,EAAuBqF,KAAvB,EAAnB;;MAEIya,UAAU,CAAChoB,MAAX,KAAsB,CAA1B,EAA6B;IAC3B6K,KAAK,IAAI,EAAT;;;MAGIsB,OAAO,GAAGtD,IAAI,CAACmB,MAAL,EAAhB;MACIie,QAAJ;;MACI9b,OAAO,CAACnM,MAAR,KAAmB,CAAvB,EAA0B;IACxBioB,QAAQ,GAAG9b,OAAO,CAACnC,MAAR,EAAX;;;GAGDmC,OAAD,EAAU8b,QAAV,EAAoB3b,OAApB,CAA4B,UAAA9H,KAAK,EAAI;QAC/B+F,gBAAc,CAAC3L,IAAf,CAAoBgpB,MAAM,CAACpjB,KAAD,CAA1B,CAAJ,EAAwC;MACtCqG,KAAK,IAAI,EAAT;;GAFJ;SAMOA,KAAP;;;;AAKF,AAAO,SAASqd,cAAT,CAAwBrf,IAAxB,EAA8B;MAC/BgC,KAAK,GAAG,CAAZ;MACMiC,QAAQ,GAAGjE,IAAI,CAAC7B,IAAL,EAAjB;MACMI,OAAO,GAAG0F,QAAQ,CAACxK,GAAT,CAAa,CAAb,CAAhB;;MAEI8E,OAAO,IAAIA,OAAO,CAACH,OAAR,CAAgBhH,WAAhB,OAAkC,YAAjD,EAA+D;IAC7D4K,KAAK,IAAI,EAAT;;;MAGEN,gBAAc,CAAC3L,IAAf,CAAoBgpB,MAAM,CAAC9a,QAAD,CAA1B,CAAJ,EAA2C;IACzCjC,KAAK,IAAI,EAAT;;;SAGKA,KAAP;;AAGF,AAAO,SAASsd,iBAAT,CAA2Btf,IAA3B,EAAiC;MAClCgC,KAAK,GAAG,CAAZ;;MAEM9B,KAAK,GAAG,YAAWF,IAAI,CAACnE,IAAL,CAAU,OAAV,CAAX,CAAd;;MACMoE,MAAM,GAAG,YAAWD,IAAI,CAACnE,IAAL,CAAU,QAAV,CAAX,CAAf;;MACM0N,GAAG,GAAGvJ,IAAI,CAACnE,IAAL,CAAU,KAAV,CAAZ,CALsC;;MAQlCqE,KAAK,IAAIA,KAAK,IAAI,EAAtB,EAA0B;IACxB8B,KAAK,IAAI,EAAT;GAToC;;;MAalC/B,MAAM,IAAIA,MAAM,IAAI,EAAxB,EAA4B;IAC1B+B,KAAK,IAAI,EAAT;;;MAGE9B,KAAK,IAAID,MAAT,IAAmB,CAACsJ,GAAG,CAACrR,QAAJ,CAAa,QAAb,CAAxB,EAAgD;QACxCqnB,IAAI,GAAGrf,KAAK,GAAGD,MAArB;;QACIsf,IAAI,GAAG,IAAX,EAAiB;;MAEfvd,KAAK,IAAI,GAAT;KAFF,MAGO;MACLA,KAAK,IAAIQ,IAAI,CAACgd,KAAL,CAAWD,IAAI,GAAG,IAAlB,CAAT;;;;SAIGvd,KAAP;;AAGF,AAAO,SAASyd,eAAT,CAAyBC,KAAzB,EAAgC1oB,KAAhC,EAAuC;SACrC0oB,KAAK,CAACvoB,MAAN,GAAe,CAAf,GAAmBH,KAA1B;;;AC1GF;;;;;;;;AAOA,IAAM2oB,4BAA4B,GAAG;EACnC5C,OADmC,yBACM;QAA/B1hB,CAA+B,QAA/BA,CAA+B;QAA5B3C,OAA4B,QAA5BA,OAA4B;QAAnB8kB,SAAmB,QAAnBA,SAAmB;QAAR3d,IAAQ,QAARA,IAAQ;QACnC+f,QAAJ;;QACI,CAACvkB,CAAC,CAACjC,OAAH,IAAciC,CAAC,CAAC,MAAD,CAAD,CAAUlE,MAAV,KAAqB,CAAvC,EAA0C;MACxCkE,CAAC,CAAC,GAAD,CAAD,CACGqJ,KADH,GAEGyH,OAFH,CAEWtM,IAFX;KAHqC;;;;;;QAYjCggB,QAAQ,GAAG9Y,kBAAe,CAC9B1L,CAD8B,EAE9BkjB,wBAF8B,EAG9Bf,SAH8B,EAI9B,KAJ8B,CAAhC;;QAOIqC,QAAJ,EAAc;MACZD,QAAQ,GAAGpD,OAAU,CAACqD,QAAD,CAArB;UAEID,QAAJ,EAAc,OAAOA,QAAP;KAtBuB;;;;;QA4BjCzZ,QAAQ,GAAG9K,CAAC,CAAC3C,OAAD,CAAlB;QACMonB,IAAI,GAAGzkB,CAAC,CAAC,KAAD,EAAQ8K,QAAR,CAAD,CAAmBsB,OAAnB,EAAb;QACMsY,SAAS,GAAG,EAAlB;IAEAD,IAAI,CAACrc,OAAL,CAAa,UAACnD,GAAD,EAAMtJ,KAAN,EAAgB;UACrBgJ,IAAI,GAAG3E,CAAC,CAACiF,GAAD,CAAd;UACMiJ,GAAG,GAAGvJ,IAAI,CAACnE,IAAL,CAAU,KAAV,CAAZ;UAEI,CAAC0N,GAAL,EAAU;UAENvH,KAAK,GAAGgd,aAAa,CAACzV,GAAD,CAAzB;MACAvH,KAAK,IAAIid,SAAS,CAACjf,IAAD,CAAlB;MACAgC,KAAK,IAAIkd,cAAc,CAAClf,IAAD,CAAvB;MACAgC,KAAK,IAAIqd,cAAc,CAACrf,IAAD,CAAvB;MACAgC,KAAK,IAAIsd,iBAAiB,CAACtf,IAAD,CAA1B;MACAgC,KAAK,IAAIyd,eAAe,CAACK,IAAD,EAAO9oB,KAAP,CAAxB;MAEA+oB,SAAS,CAACxW,GAAD,CAAT,GAAiBvH,KAAjB;KAbF;;gCAgB2B,iBAAgB+d,SAAhB,EAA2BhoB,MAA3B,CACzB,UAACC,GAAD,EAAM4H,GAAN;aAAemgB,SAAS,CAACngB,GAAD,CAAT,GAAiB5H,GAAG,CAAC,CAAD,CAApB,GAA0B,CAAC4H,GAAD,EAAMmgB,SAAS,CAACngB,GAAD,CAAf,CAA1B,GAAkD5H,GAAjE;KADyB,EAEzB,CAAC,IAAD,EAAO,CAAP,CAFyB,CAhDY;;QAgDhCgoB,MAhDgC;QAgDxBlc,QAhDwB;;QAqDnCA,QAAQ,GAAG,CAAf,EAAkB;MAChB8b,QAAQ,GAAGpD,OAAU,CAACwD,MAAD,CAArB;UAEIJ,QAAJ,EAAc,OAAOA,QAAP;KAxDuB;;;;;;;;;;wCA8DhBpB,wBAAvB,4GAAiD;YAAtCtW,QAAsC;YACzCvM,KAAK,GAAGN,CAAC,CAAC6M,QAAD,CAAD,CAAYxD,KAAZ,EAAd;YACM6E,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,KAAX,CAAZ;;YACI0N,GAAJ,EAAS;UACPqW,QAAQ,GAAGpD,OAAU,CAACjT,GAAD,CAArB;cACIqW,QAAJ,EAAc,OAAOA,QAAP;;;YAGVhlB,IAAI,GAAGe,KAAK,CAACE,IAAN,CAAW,MAAX,CAAb;;YACIjB,IAAJ,EAAU;UACRglB,QAAQ,GAAGpD,OAAU,CAAC5hB,IAAD,CAArB;cACIglB,QAAJ,EAAc,OAAOA,QAAP;;;YAGVhkB,KAAK,GAAGD,KAAK,CAACE,IAAN,CAAW,OAAX,CAAd;;YACID,KAAJ,EAAW;UACTgkB,QAAQ,GAAGpD,OAAU,CAAC5gB,KAAD,CAArB;cACIgkB,QAAJ,EAAc,OAAOA,QAAP;;;;;;;;;;;;;;;;;;WAIX,IAAP;;CApFJ;;ACvBe,SAASK,eAAT,CAAyBje,KAAzB,EAAgCke,UAAhC,EAA4CtlB,IAA5C,EAAkD;;;;;;MAM3DoH,KAAK,GAAG,CAAZ,EAAe;QACPme,UAAU,GAAG,IAAIC,OAAO,CAACC,eAAZ,CACjB,IADiB,EAEjBH,UAFiB,EAGjBtlB,IAHiB,EAIjB0lB,KAJiB,EAAnB,CADa;;;;;;;QAYPC,WAAW,GAAG,MAAMJ,UAA1B;QACMK,YAAY,GAAG,EAAE,OAAOD,WAAW,GAAG,GAArB,CAAF,CAArB;WACOve,KAAK,GAAGwe,YAAf;;;SAGK,CAAP;;;ACvBa,SAASC,aAAT,CAAuB5Z,QAAvB,EAAiClQ,OAAjC,EAA0C;;;;;MAKnDqL,KAAK,GAAG,CAAZ;;MAEI3L,WAAW,CAACN,IAAZ,CAAiB8Q,QAAQ,CAACrR,IAAT,EAAjB,CAAJ,EAAuC;QAC/BkrB,aAAa,GAAG,UAAS7Z,QAAT,EAAmB,EAAnB,CAAtB,CADqC;;;;;QAKjC6Z,aAAa,GAAG,CAApB,EAAuB;MACrB1e,KAAK,GAAG,CAAC,EAAT;KADF,MAEO;MACLA,KAAK,GAAGQ,IAAI,CAACE,GAAL,CAAS,CAAT,EAAY,KAAKge,aAAjB,CAAR;KARmC;;;;;QAcjC/pB,OAAO,IAAIA,OAAO,IAAI+pB,aAA1B,EAAyC;MACvC1e,KAAK,IAAI,EAAT;;;;SAIGA,KAAP;;;AC5Ba,SAAS2e,eAAT,CAAyBhqB,OAAzB,EAAkCiqB,IAAlC,EAAwC;;;;MAIjDjqB,OAAO,IAAI,CAACiqB,IAAhB,EAAsB;WACb,EAAP;;;SAGK,CAAP;;;ACRK,IAAMC,UAAQ,GAAG,IAAjB;;;AAIP,AAAO,IAAMC,uBAAqB,GAAG,CACnC,OADmC,EAEnC,SAFmC,EAGnC,SAHmC,EAInC,SAJmC,EAKnC,QALmC,EAMnC,OANmC,EAOnC,OAPmC,EAQnC,OARmC,EASnC,KATmC,EAUnC,OAVmC,EAWnC,MAXmC,EAYnC,QAZmC,EAanC,KAbmC,EAcnC,iBAdmC,CAA9B;AAgBP,AAAO,IAAMC,0BAAwB,GAAG,IAAI7qB,MAAJ,CACtC4qB,uBAAqB,CAACxoB,IAAtB,CAA2B,GAA3B,CADsC,EAEtC,GAFsC,CAAjC;;;;AAQP,AAAO,IAAM0oB,mBAAiB,GAAG,IAAI9qB,MAAJ,CAC/B,4CAD+B,EAE/B,GAF+B,CAA1B;;;AAOP,AAAO,IAAM+qB,kBAAgB,GAAG,IAAI/qB,MAAJ,CAAW,kBAAX,EAA+B,GAA/B,CAAzB;;;AAIP,AAAO,IAAMgrB,mBAAiB,GAAG,IAAIhrB,MAAJ,CAAW,yBAAX,EAAsC,GAAtC,CAA1B;;ACrCQ,SAASirB,oBAAT,CAA8BvmB,IAA9B,EAAoC;;MAE7CmmB,0BAAwB,CAAChrB,IAAzB,CAA8B6E,IAA9B,CAAJ,EAAyC;WAChC,CAAC,EAAR;;;SAGK,CAAP;;;ACAF,SAASwmB,OAAT,CAAiBC,KAAjB,EAAwB;mBACZA,KAAK,CAACxlB,IAAN,CAAW,OAAX,KAAuB,EAAjC,cAAuCwlB,KAAK,CAACxlB,IAAN,CAAW,IAAX,KAAoB,EAA3D;;;AAGF,AAAe,SAASqjB,gBAAT,CAAwBmC,KAAxB,EAA+B;;;;MAIxC/d,OAAO,GAAG+d,KAAK,CAAClgB,MAAN,EAAd;MACImgB,aAAa,GAAG,KAApB;MACIC,aAAa,GAAG,KAApB;MACIvf,KAAK,GAAG,CAAZ;;cAEW4I,KAAK,CAAC,CAAD,EAAI,CAAJ,CAAhB,EAAwBnH,OAAxB,CAAgC,YAAM;QAChCH,OAAO,CAACnM,MAAR,KAAmB,CAAvB,EAA0B;;;;QAIpBqqB,UAAU,GAAGJ,OAAO,CAAC9d,OAAD,EAAU,GAAV,CAA1B,CALoC;;;QAShC,CAACge,aAAD,IAAkBrkB,OAAO,CAAClH,IAAR,CAAayrB,UAAb,CAAtB,EAAgD;MAC9CF,aAAa,GAAG,IAAhB;MACAtf,KAAK,IAAI,EAAT;KAXkC;;;;;QAkBlC,CAACuf,aAAD,IACAxkB,iBAAiB,CAAChH,IAAlB,CAAuByrB,UAAvB,CADA,IAEAT,0BAAwB,CAAChrB,IAAzB,CAA8ByrB,UAA9B,CAHF,EAIE;UACI,CAAC3kB,iBAAiB,CAAC9G,IAAlB,CAAuByrB,UAAvB,CAAL,EAAyC;QACvCD,aAAa,GAAG,IAAhB;QACAvf,KAAK,IAAI,EAAT;;;;IAIJsB,OAAO,GAAGA,OAAO,CAACnC,MAAR,EAAV;GA5BF;;SA+BOa,KAAP;;;AClDa,SAASyf,aAAT,CAAuBC,QAAvB,EAAiC;;;MAG1CR,mBAAiB,CAACnrB,IAAlB,CAAuB2rB,QAAvB,CAAJ,EAAsC;WAC7B,CAAC,GAAR;;;SAGK,CAAP;;;ACLa,SAASC,WAAT,CACb/mB,IADa,EAEbslB,UAFa,EAGbna,OAHa,EAIbxO,SAJa,EAKbsP,QALa,EAMb+a,YANa,EAOb;;MAEIA,YAAY,CAAC/rB,IAAb,CAAkB,UAAAH,GAAG;WAAIkF,IAAI,KAAKlF,GAAb;GAArB,MAA2C6S,SAA/C,EAA0D;WACjD,KAAP;GAHF;;;;MAQI,CAAC3N,IAAD,IAASA,IAAI,KAAKslB,UAAlB,IAAgCtlB,IAAI,KAAKmL,OAA7C,EAAsD;WAC7C,KAAP;;;MAGMrF,QAZR,GAYqBnJ,SAZrB,CAYQmJ,QAZR;;mBAa+BlJ,GAAG,CAACC,KAAJ,CAAUmD,IAAV,CAb/B;MAakBinB,QAblB,cAaQnhB,QAbR;;;MAgBImhB,QAAQ,KAAKnhB,QAAjB,EAA2B;WAClB,KAAP;GAjBF;;;;MAsBMohB,QAAQ,GAAGlnB,IAAI,CAACrF,OAAL,CAAawQ,OAAb,EAAsB,EAAtB,CAAjB;;MACI,CAAC8a,UAAQ,CAAC9qB,IAAT,CAAc+rB,QAAd,CAAL,EAA8B;WACrB,KAAP;GAxBF;;;;MA6BIf,0BAAwB,CAAChrB,IAAzB,CAA8B8Q,QAA9B,CAAJ,EAA6C;WACpC,KAAP;GA9BF;;;MAkCIA,QAAQ,CAAC1P,MAAT,GAAkB,EAAtB,EAA0B;WACjB,KAAP;;;SAGK,IAAP;;;ACjDa,SAAS4qB,YAAT,CAAsBnnB,IAAtB,EAA4BonB,SAA5B,EAAuC;;;;;MAKhD,CAACA,SAAS,CAACjsB,IAAV,CAAe6E,IAAf,CAAL,EAA2B;WAClB,CAAC,EAAR;;;SAGK,CAAP;;;ACPa,SAASqnB,iBAAT,CAA2BP,QAA3B,EAAqC;;MAE9CV,mBAAiB,CAACjrB,IAAlB,CAAuB2rB,QAAvB,CAAJ,EAAsC;WAC7B,EAAP;;;SAGK,CAAP;;;ACNa,SAASQ,aAAT,CAAuBR,QAAvB,EAAiC;;MAE1CT,kBAAgB,CAAClrB,IAAjB,CAAsB2rB,QAAtB,CAAJ,EAAqC;;;;;QAK/BV,mBAAiB,CAACjrB,IAAlB,CAAuB2rB,QAAvB,CAAJ,EAAsC;aAC7B,CAAC,EAAR;;;;SAIG,CAAP;;;ACIK,SAASS,aAAT,CAAuBpc,OAAvB,EAAgC;SAC9B,IAAI7P,MAAJ,YAAe6P,OAAf,GAA0B,GAA1B,CAAP;;;AAGF,SAASqb,SAAT,CAAiBC,KAAjB,EAAwBxa,QAAxB,EAAkC;mBACtBA,QAAQ,IAAIwa,KAAK,CAAC/rB,IAAN,EAAtB,cAAsC+rB,KAAK,CAACxlB,IAAN,CAAW,OAAX,KAAuB,EAA7D,cAAmEwlB,KAAK,CAACxlB,IAAN,CACjE,IADiE,KAE9D,EAFL;;;AAKF,AAAe,SAASumB,UAAT,OAOZ;MANDC,KAMC,QANDA,KAMC;MALDnC,UAKC,QALDA,UAKC;MAJDna,OAIC,QAJDA,OAIC;MAHDxO,SAGC,QAHDA,SAGC;MAFD8D,CAEC,QAFDA,CAEC;+BADDumB,YACC;MADDA,YACC,kCADc,EACd;EACDrqB,SAAS,GAAGA,SAAS,IAAIC,GAAG,CAACC,KAAJ,CAAUyoB,UAAV,CAAzB;MACM8B,SAAS,GAAGG,aAAa,CAACpc,OAAD,CAA/B;MACM6a,IAAI,GAAGnY,WAAW,CAACpN,CAAD,CAAxB,CAHC;;;;;;;;MAYKinB,WAAW,GAAGD,KAAK,CAACtqB,MAAN,CAAa,UAACwqB,aAAD,EAAgBC,IAAhB,EAAyB;;;;QAIlDhjB,KAAK,GAAGC,QAAQ,CAAC+iB,IAAD,CAAtB,CAJwD;;QAOpD,CAAChjB,KAAK,CAAC5E,IAAX,EAAiB,OAAO2nB,aAAP;QAEX3nB,IAAI,GAAGhE,YAAY,CAAC4I,KAAK,CAAC5E,IAAP,CAAzB;QACMymB,KAAK,GAAGhmB,CAAC,CAACmnB,IAAD,CAAf;QACM3b,QAAQ,GAAGwa,KAAK,CAAC/rB,IAAN,EAAjB;;QAGE,CAACqsB,WAAW,CAAC/mB,IAAD,EAAOslB,UAAP,EAAmBna,OAAnB,EAA4BxO,SAA5B,EAAuCsP,QAAvC,EAAiD+a,YAAjD,CADd,EAEE;aACOW,aAAP;KAhBsD;;;QAoBpD,CAACA,aAAa,CAAC3nB,IAAD,CAAlB,EAA0B;MACxB2nB,aAAa,CAAC3nB,IAAD,CAAb,GAAsB;QACpBoH,KAAK,EAAE,CADa;QAEpB6E,QAAQ,EAARA,QAFoB;QAGpBjM,IAAI,EAAJA;OAHF;KADF,MAMO;MACL2nB,aAAa,CAAC3nB,IAAD,CAAb,CAAoBiM,QAApB,aACE0b,aAAa,CAAC3nB,IAAD,CAAb,CAAoBiM,QADtB,cAEIA,QAFJ;;;QAKI4b,YAAY,GAAGF,aAAa,CAAC3nB,IAAD,CAAlC;QACM8mB,QAAQ,GAAGN,SAAO,CAACC,KAAD,EAAQxa,QAAR,CAAxB;QACMlQ,OAAO,GAAGH,cAAc,CAACoE,IAAD,CAA9B;QAEIoH,KAAK,GAAG+f,YAAY,CAACnnB,IAAD,EAAOonB,SAAP,CAAxB;IACAhgB,KAAK,IAAIigB,iBAAiB,CAACP,QAAD,CAA1B;IACA1f,KAAK,IAAIkgB,aAAa,CAACR,QAAD,CAAtB;IACA1f,KAAK,IAAIyf,aAAa,CAACC,QAAD,CAAtB;IACA1f,KAAK,IAAIkd,gBAAc,CAACmC,KAAD,CAAvB;IACArf,KAAK,IAAImf,oBAAoB,CAACvmB,IAAD,CAA7B;IACAoH,KAAK,IAAI2e,eAAe,CAAChqB,OAAD,EAAUiqB,IAAV,CAAxB;IACA5e,KAAK,IAAIye,aAAa,CAAC5Z,QAAD,EAAWlQ,OAAX,CAAtB;IACAqL,KAAK,IAAIie,eAAe,CAACje,KAAD,EAAQke,UAAR,EAAoBtlB,IAApB,CAAxB;IAEA6nB,YAAY,CAACzgB,KAAb,GAAqBA,KAArB;WAEOugB,aAAP;GAhDkB,EAiDjB,EAjDiB,CAApB;SAmDO,iBAAgBD,WAAhB,EAA6BnrB,MAA7B,KAAwC,CAAxC,GAA4C,IAA5C,GAAmDmrB,WAA1D;;;AC5FF;;AACA,IAAMI,2BAA2B,GAAG;EAClC3F,OADkC,yBACgB;QAAxC1hB,CAAwC,QAAxCA,CAAwC;QAArC3F,GAAqC,QAArCA,GAAqC;QAAhC6B,SAAgC,QAAhCA,SAAgC;iCAArBqqB,YAAqB;QAArBA,YAAqB,kCAAN,EAAM;IAChDrqB,SAAS,GAAGA,SAAS,IAAIC,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CAAzB;QAEMwqB,UAAU,GAAGtpB,YAAY,CAAClB,GAAD,CAA/B;QACMqQ,OAAO,GAAG1O,cAAc,CAAC3B,GAAD,EAAM6B,SAAN,CAA9B;QAEM8qB,KAAK,GAAGhnB,CAAC,CAAC,SAAD,CAAD,CAAaoM,OAAb,EAAd;QAEMkb,WAAW,GAAGP,UAAU,CAAC;MAC7BC,KAAK,EAALA,KAD6B;MAE7BnC,UAAU,EAAVA,UAF6B;MAG7Bna,OAAO,EAAPA,OAH6B;MAI7BxO,SAAS,EAATA,SAJ6B;MAK7B8D,CAAC,EAADA,CAL6B;MAM7BumB,YAAY,EAAZA;KAN4B,CAA9B,CARgD;;QAkB5C,CAACe,WAAL,EAAkB,OAAO,IAAP,CAlB8B;;;QAsB1CC,OAAO,GAAG,iBAAgBD,WAAhB,EAA6B5qB,MAA7B,CACd,UAACC,GAAD,EAAMwqB,IAAN,EAAe;UACPK,UAAU,GAAGF,WAAW,CAACH,IAAD,CAA9B;aACOK,UAAU,CAAC7gB,KAAX,GAAmBhK,GAAG,CAACgK,KAAvB,GAA+B6gB,UAA/B,GAA4C7qB,GAAnD;KAHY,EAKd;MAAEgK,KAAK,EAAE,CAAC;KALI,CAAhB,CAtBgD;;;;QAgC5C4gB,OAAO,CAAC5gB,KAAR,IAAiB,EAArB,EAAyB;aAChB4gB,OAAO,CAAChoB,IAAf;;;WAGK,IAAP;;CArCJ;;ACPO,IAAMkoB,wBAAwB,GAAG,CAAC,QAAD,CAAjC;;ACKP,SAASC,WAAT,CAAqBrtB,GAArB,EAA0B;MAClB6B,SAAS,GAAGC,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CAAlB;MACQgL,QAFgB,GAEHnJ,SAFG,CAEhBmJ,QAFgB;SAGjBA,QAAP;;;AAGF,SAASuJ,MAAT,CAAgBvU,GAAhB,EAAqB;SACZ;IACLA,GAAG,EAAHA,GADK;IAELyV,MAAM,EAAE4X,WAAW,CAACrtB,GAAD;GAFrB;;;AAMF,IAAMstB,mBAAmB,GAAG;EAC1BjG,OAD0B,yBACK;QAArB1hB,CAAqB,QAArBA,CAAqB;QAAlB3F,GAAkB,QAAlBA,GAAkB;QAAb8nB,SAAa,QAAbA,SAAa;QACvByF,UAAU,GAAG5nB,CAAC,CAAC,qBAAD,CAApB;;QACI4nB,UAAU,CAAC9rB,MAAX,KAAsB,CAA1B,EAA6B;UACrByD,IAAI,GAAGqoB,UAAU,CAACpnB,IAAX,CAAgB,MAAhB,CAAb;;UACIjB,IAAJ,EAAU;eACDqP,MAAM,CAACrP,IAAD,CAAb;;;;QAIEsoB,OAAO,GAAGnc,kBAAe,CAAC1L,CAAD,EAAIynB,wBAAJ,EAA8BtF,SAA9B,CAA/B;;QACI0F,OAAJ,EAAa;aACJjZ,MAAM,CAACiZ,OAAD,CAAb;;;WAGKjZ,MAAM,CAACvU,GAAD,CAAb;;CAfJ;;AClBO,IAAMytB,sBAAsB,GAAG,CAAC,gBAAD,EAAmB,qBAAnB,CAA/B;;ACMA,SAASvZ,OAAT,CAAelR,OAAf,EAAwB2C,CAAxB,EAA4C;MAAjB+nB,SAAiB,uEAAL,GAAK;EACjD1qB,OAAO,GAAGA,OAAO,CAACnD,OAAR,CAAgB,UAAhB,EAA4B,GAA5B,EAAiCC,IAAjC,EAAV;SACO6tB,SAAS,CAAC3qB,OAAD,EAAU0qB,SAAV,EAAqB;IAAEE,OAAO,EAAE;GAAhC,CAAhB;;AAGF,IAAMC,uBAAuB,GAAG;EAC9BxG,OAD8B,yBACK;QAAzB1hB,CAAyB,QAAzBA,CAAyB;QAAtB3C,OAAsB,QAAtBA,OAAsB;QAAb8kB,SAAa,QAAbA,SAAa;QAC3B7Q,OAAO,GAAG5F,kBAAe,CAAC1L,CAAD,EAAI8nB,sBAAJ,EAA4B3F,SAA5B,CAA/B;;QACI7Q,OAAJ,EAAa;aACJ/C,OAAK,CAACjC,SAAS,CAACgF,OAAD,EAAUtR,CAAV,CAAV,CAAZ;KAH+B;;;QAM3B+nB,SAAS,GAAG,GAAlB;QACMI,YAAY,GAAG9qB,OAAO,CAACE,KAAR,CAAc,CAAd,EAAiBwqB,SAAS,GAAG,CAA7B,CAArB;WACOxZ,OAAK,CAACvO,CAAC,CAACmoB,YAAD,CAAD,CAAgBluB,IAAhB,EAAD,EAAyB+F,CAAzB,EAA4B+nB,SAA5B,CAAZ;;CATJ;;ACPA,IAAMK,YAAY,GAAG,SAAfA,YAAe,CAAA/qB,OAAO,EAAI;MACxB2C,CAAC,GAAGlC,OAAO,CAACmR,IAAR,CAAa5R,OAAb,CAAV;MACMyN,QAAQ,GAAG9K,CAAC,CAAC,KAAD,CAAD,CAASqJ,KAAT,EAAjB;MACMpP,IAAI,GAAGD,eAAe,CAAC8Q,QAAQ,CAAC7Q,IAAT,EAAD,CAA5B;SACOA,IAAI,CAACuB,KAAL,CAAW,IAAX,EAAiBM,MAAxB;CAJF;;AAOA,IAAMusB,eAAe,GAAG,SAAlBA,eAAkB,CAAAhrB,OAAO,EAAI;EACjCA,OAAO,GAAGA,OAAO,CAACnD,OAAR,CAAgB,UAAhB,EAA4B,GAA5B,CAAV;EACAmD,OAAO,GAAGA,OAAO,CAACnD,OAAR,CAAgB,MAAhB,EAAwB,GAAxB,CAAV;EACAmD,OAAO,GAAGA,OAAO,CAAClD,IAAR,EAAV;SACOkD,OAAO,CAAC7B,KAAR,CAAc,GAAd,EAAmBM,MAA1B;CAJF;;AAOA,IAAMwsB,yBAAyB,GAAG;EAChC5G,OADgC,yBACX;QAAXrkB,OAAW,QAAXA,OAAW;QACfkrB,KAAK,GAAGH,YAAY,CAAC/qB,OAAD,CAAxB;QACIkrB,KAAK,KAAK,CAAd,EAAiBA,KAAK,GAAGF,eAAe,CAAChrB,OAAD,CAAvB;WACVkrB,KAAP;;CAJJ;;ACJA,IAAMC,gBAAgB,GAAG;;EAEvB1Y,MAAM,EAAE,GAFe;EAGvB3F,KAAK,EAAE+X,qBAAqB,CAACR,OAHN;EAIvBnR,cAAc,EAAEwS,6BAA6B,CAACrB,OAJvB;EAKvBpR,MAAM,EAAEmS,sBAAsB,CAACf,OALR;EAMvBrkB,OAAO,EAAEmkB,uBAAuB,CAACE,OAAxB,CAAgC+G,IAAhC,CAAqCjH,uBAArC,CANc;EAOvBpQ,cAAc,EAAEkT,4BAA4B,CAAC5C,OAPtB;EAQvB/Q,GAAG,EAAEsS,mBAAmB,CAACvB,OARF;EASvBrQ,aAAa,EAAEgW,2BAA2B,CAAC3F,OATpB;EAUvBgH,cAAc,EAAEf,mBAAmB,CAACjG,OAVb;EAWvBpQ,OAAO,EAAE4W,uBAAuB,CAACxG,OAXV;EAYvBiH,UAAU,EAAEL,yBAAyB,CAAC5G,OAZf;EAavBkH,SAAS,EAAE;QAAGze,KAAH,QAAGA,KAAH;WAAe0e,eAAe,CAACC,YAAhB,CAA6B3e,KAA7B,CAAf;GAbY;EAevBuX,OAfuB,mBAefrjB,OAfe,EAeN;QACPmG,IADO,GACKnG,OADL,CACPmG,IADO;QACDxE,CADC,GACK3B,OADL,CACD2B,CADC;;QAGXwE,IAAI,IAAI,CAACxE,CAAb,EAAgB;UACR+oB,MAAM,GAAGjrB,OAAO,CAACmR,IAAR,CAAazK,IAAb,CAAf;MACAnG,OAAO,CAAC2B,CAAR,GAAY+oB,MAAZ;;;QAGI5e,KAAK,GAAG,KAAKA,KAAL,CAAW9L,OAAX,CAAd;QACMkS,cAAc,GAAG,KAAKA,cAAL,CAAoBlS,OAApB,CAAvB;QACMiS,MAAM,GAAG,KAAKA,MAAL,CAAYjS,OAAZ,CAAf;QACMhB,OAAO,GAAG,KAAKA,OAAL,mBAAkBgB,OAAlB;MAA2B8L,KAAK,EAALA;OAA3C;QACMiH,cAAc,GAAG,KAAKA,cAAL,mBAAyB/S,OAAzB;MAAkChB,OAAO,EAAPA;OAAzD;QACMsT,GAAG,GAAG,KAAKA,GAAL,mBAActS,OAAd;MAAuBhB,OAAO,EAAPA;OAAnC;QACMgU,aAAa,GAAG,KAAKA,aAAL,CAAmBhT,OAAnB,CAAtB;QACMiT,OAAO,GAAG,KAAKA,OAAL,mBAAkBjT,OAAlB;MAA2BhB,OAAO,EAAPA;OAA3C;QACMsrB,UAAU,GAAG,KAAKA,UAAL,mBAAqBtqB,OAArB;MAA8BhB,OAAO,EAAPA;OAAjD;QACMurB,SAAS,GAAG,KAAKA,SAAL,CAAe;MAAEze,KAAK,EAALA;KAAjB,CAAlB;;+BACwB,KAAKue,cAAL,CAAoBrqB,OAApB,CAlBT;QAkBPhE,GAlBO,wBAkBPA,GAlBO;QAkBFyV,MAlBE,wBAkBFA,MAlBE;;WAoBR;MACL3F,KAAK,EAALA,KADK;MAELmG,MAAM,EAANA,MAFK;MAGLC,cAAc,EAAEA,cAAc,IAAI,IAH7B;MAILI,GAAG,EAAHA,GAJK;MAKLS,cAAc,EAAdA,cALK;MAML/T,OAAO,EAAPA,OANK;MAOLgU,aAAa,EAAbA,aAPK;MAQLhX,GAAG,EAAHA,GARK;MASLyV,MAAM,EAANA,MATK;MAULwB,OAAO,EAAPA,OAVK;MAWLqX,UAAU,EAAVA,UAXK;MAYLC,SAAS,EAATA;KAZF;;CAnCJ;;ACZA,IAAMI,SAAS,GAAG;kDACgCvW,eADhC;6CAE2BtC;CAF7C;AAKA,AAAe,SAAS8Y,YAAT,CAAsBjpB,CAAtB,EAAyB;MAChC6M,QAAQ,GAAG,iBAAgBmc,SAAhB,EAA2BxuB,IAA3B,CAAgC,UAAA0W,CAAC;WAAIlR,CAAC,CAACkR,CAAD,CAAD,CAAKpV,MAAL,GAAc,CAAlB;GAAjC,CAAjB;;SAEOktB,SAAS,CAACnc,QAAD,CAAhB;;;ACHa,SAASqc,YAAT,CAAsB7uB,GAAtB,EAA2B6B,SAA3B,EAAsC8D,CAAtC,EAAyC;EACtD9D,SAAS,GAAGA,SAAS,IAAIC,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CAAzB;mBACqB6B,SAFiC;MAE9CmJ,QAF8C,cAE9CA,QAF8C;MAGhD8jB,UAAU,GAAG9jB,QAAQ,CACxB7J,KADgB,CACV,GADU,EAEhB+B,KAFgB,CAEV,CAAC,CAFS,EAGhBN,IAHgB,CAGX,GAHW,CAAnB;SAMEgT,aAAa,CAAC5K,QAAD,CAAb,IACA4K,aAAa,CAACkZ,UAAD,CADb,IAEAC,UAAU,CAAC/jB,QAAD,CAFV,IAGA+jB,UAAU,CAACD,UAAD,CAHV,IAIAF,YAAY,CAACjpB,CAAD,CAJZ,IAKAwoB,gBANF;;;ACVK,SAASa,gBAAT,CAA0Bve,QAA1B,EAAoC9K,CAApC,QAAkD;MAATuO,KAAS,QAATA,KAAS;MACnD,CAACA,KAAL,EAAY,OAAOzD,QAAP;EAEZ9K,CAAC,CAACuO,KAAK,CAACtR,IAAN,CAAW,GAAX,CAAD,EAAkB6N,QAAlB,CAAD,CAA6BtI,MAA7B;SAEOsI,QAAP;;;AAIF,AAAO,SAASwe,iBAAT,CAA2Bxe,QAA3B,EAAqC9K,CAArC,SAAwD;MAAdoQ,UAAc,SAAdA,UAAc;MACzD,CAACA,UAAL,EAAiB,OAAOtF,QAAP;;mBAEDsF,UAAhB,EAA4BhI,OAA5B,CAAoC,UAAA7D,GAAG,EAAI;QACnCglB,QAAQ,GAAGvpB,CAAC,CAACuE,GAAD,EAAMuG,QAAN,CAAlB;QACMvK,KAAK,GAAG6P,UAAU,CAAC7L,GAAD,CAAxB,CAFyC;;QAKrC,OAAOhE,KAAP,KAAiB,QAArB,EAA+B;MAC7BgpB,QAAQ,CAACppB,IAAT,CAAc,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;QAC7BuD,gBAAa,CAAC5D,CAAC,CAACK,IAAD,CAAF,EAAUL,CAAV,EAAaoQ,UAAU,CAAC7L,GAAD,CAAvB,CAAb;OADF;KADF,MAIO,IAAI,OAAOhE,KAAP,KAAiB,UAArB,EAAiC;;MAEtCgpB,QAAQ,CAACppB,IAAT,CAAc,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;YACvBuO,MAAM,GAAGrO,KAAK,CAACP,CAAC,CAACK,IAAD,CAAF,EAAUL,CAAV,CAApB,CAD6B;;YAGzB,OAAO4O,MAAP,KAAkB,QAAtB,EAAgC;UAC9BhL,gBAAa,CAAC5D,CAAC,CAACK,IAAD,CAAF,EAAUL,CAAV,EAAa4O,MAAb,CAAb;;OAJJ;;GAXJ;;SAqBO9D,QAAP;;;AAGF,SAAS0e,oBAAT,CAA8BxpB,CAA9B,EAAiC2M,SAAjC,EAA4C8c,WAA5C,EAAyDC,aAAzD,EAAwE;SAC/D/c,SAAS,CAACnS,IAAV,CAAe,UAAAqS,QAAQ,EAAI;QAC5B,eAAcA,QAAd,CAAJ,EAA6B;UACvB4c,WAAJ,EAAiB;eACR5c,QAAQ,CAACnQ,MAAT,CAAgB,UAACC,GAAD,EAAMuU,CAAN;iBAAYvU,GAAG,IAAIqD,CAAC,CAACkR,CAAD,CAAD,CAAKpV,MAAL,GAAc,CAAjC;SAAhB,EAAoD,IAApD,CAAP;;;qCAGgB+Q,QALS;UAKpBqE,CALoB;UAKjB1Q,IALiB;;aAOzB,CAACkpB,aAAa,IAAK,CAACA,aAAD,IAAkB1pB,CAAC,CAACkR,CAAD,CAAD,CAAKpV,MAAL,KAAgB,CAArD,KACAkE,CAAC,CAACkR,CAAD,CAAD,CAAK1Q,IAAL,CAAUA,IAAV,CADA,IAEAR,CAAC,CAACkR,CAAD,CAAD,CACG1Q,IADH,CACQA,IADR,EAEGrG,IAFH,OAEc,EALhB;;;WAUA,CAACuvB,aAAa,IAAK,CAACA,aAAD,IAAkB1pB,CAAC,CAAC6M,QAAD,CAAD,CAAY/Q,MAAZ,KAAuB,CAA5D,KACAkE,CAAC,CAAC6M,QAAD,CAAD,CACG5S,IADH,GAEGE,IAFH,OAEc,EAJhB;GAhBK,CAAP;;;AAyBF,AAAO,SAASwvB,MAAT,CAAgBrI,IAAhB,EAAsB;MACnBthB,CADmB,GAC8BshB,IAD9B,CACnBthB,CADmB;MAChBiM,IADgB,GAC8BqV,IAD9B,CAChBrV,IADgB;MACV2d,cADU,GAC8BtI,IAD9B,CACVsI,cADU;0BAC8BtI,IAD9B,CACMmI,WADN;MACMA,WADN,kCACoB,KADpB;;MAGvB,CAACG,cAAL,EAAqB,OAAO,IAAP,CAHM;;;MAOvB,OAAOA,cAAP,KAA0B,QAA9B,EAAwC,OAAOA,cAAP;MAEhCjd,SATmB,GASiCid,cATjC,CASnBjd,SATmB;8BASiCid,cATjC,CASR/Y,cATQ;MASRA,cATQ,sCASS,IATT;MASe6Y,aATf,GASiCE,cATjC,CASeF,aATf;MAWrBG,qBAAqB,GAAG5d,IAAI,KAAK,gBAAT,IAA6Byd,aAA3D;MAEMI,gBAAgB,GAAGN,oBAAoB,CAC3CxpB,CAD2C,EAE3C2M,SAF2C,EAG3C8c,WAH2C,EAI3CI,qBAJ2C,CAA7C;MAOI,CAACC,gBAAL,EAAuB,OAAO,IAAP;;WAEdC,iBAAT,CAA2BzpB,KAA3B,EAAkC;IAChCgL,oBAAiB,CAAChL,KAAD,EAAQN,CAAR,EAAWshB,IAAI,CAACjnB,GAAL,IAAY,EAAvB,CAAjB;IACAgvB,gBAAgB,CAAC/oB,KAAD,EAAQN,CAAR,EAAW4pB,cAAX,CAAhB;IACAN,iBAAiB,CAAChpB,KAAD,EAAQN,CAAR,EAAW4pB,cAAX,CAAjB;WACOtpB,KAAP;;;WAGO0pB,UAAT,GAAsB;;;QAGhBlf,QAAJ,CAHoB;;;;;QAShB,eAAcgf,gBAAd,CAAJ,EAAqC;MACnChf,QAAQ,GAAG9K,CAAC,CAAC8pB,gBAAgB,CAAC7sB,IAAjB,CAAsB,GAAtB,CAAD,CAAZ;UACMgtB,QAAQ,GAAGjqB,CAAC,CAAC,aAAD,CAAlB;MACA8K,QAAQ,CAAC3K,IAAT,CAAc,UAACC,CAAD,EAAIuC,OAAJ,EAAgB;QAC5BsnB,QAAQ,CAACnhB,MAAT,CAAgBnG,OAAhB;OADF;MAIAmI,QAAQ,GAAGmf,QAAX;KAPF,MAQO;MACLnf,QAAQ,GAAG9K,CAAC,CAAC8pB,gBAAD,CAAZ;KAlBkB;;;IAsBpBhf,QAAQ,CAACof,IAAT,CAAclqB,CAAC,CAAC,aAAD,CAAf;IACA8K,QAAQ,GAAGA,QAAQ,CAAChF,MAAT,EAAX;IACAgF,QAAQ,GAAGif,iBAAiB,CAACjf,QAAD,CAA5B;;QACIoW,QAAQ,CAACjV,IAAD,CAAZ,EAAoB;MAClBiV,QAAQ,CAACjV,IAAD,CAAR,CAAenB,QAAf,oBAA8BwW,IAA9B;QAAoCzQ,cAAc,EAAdA;;;;QAGlC6Y,aAAJ,EAAmB;aACV5e,QAAQ,CACZnH,QADI,GAEJyI,OAFI,GAGJ9H,GAHI,CAGA,UAAA6lB,EAAE;eAAInqB,CAAC,CAACwE,IAAF,CAAOxE,CAAC,CAACmqB,EAAD,CAAR,CAAJ;OAHF,CAAP;;;WAMKnqB,CAAC,CAACwE,IAAF,CAAOsG,QAAP,CAAP;;;MAGE2e,WAAJ,EAAiB;WACRO,UAAU,CAACF,gBAAD,CAAjB;;;MAGEM,MAAJ;MACIxb,MAAJ,CAzE2B;;;MA4EvB,eAAckb,gBAAd,CAAJ,EAAqC;2CACCA,gBADD;QAC5Bjd,QAD4B;QAClBrM,IADkB;QACZ6pB,SADY;;IAEnCD,MAAM,GAAGpqB,CAAC,CAAC6M,QAAD,CAAV;IACAud,MAAM,GAAGL,iBAAiB,CAACK,MAAD,CAA1B;IACAxb,MAAM,GAAGwb,MAAM,CAAC9lB,GAAP,CAAW,UAAClE,CAAD,EAAI+pB,EAAJ,EAAW;UACvBG,IAAI,GAAGtqB,CAAC,CAACmqB,EAAD,CAAD,CACV3pB,IADU,CACLA,IADK,EAEVrG,IAFU,EAAb;aAGOkwB,SAAS,GAAGA,SAAS,CAACC,IAAD,CAAZ,GAAqBA,IAArC;KAJO,CAAT;GAJF,MAUO;IACLF,MAAM,GAAGpqB,CAAC,CAAC8pB,gBAAD,CAAV;IACAM,MAAM,GAAGL,iBAAiB,CAACK,MAAD,CAA1B;IACAxb,MAAM,GAAGwb,MAAM,CAAC9lB,GAAP,CAAW,UAAClE,CAAD,EAAI+pB,EAAJ;aAClBnqB,CAAC,CAACmqB,EAAD,CAAD,CACGlwB,IADH,GAEGE,IAFH,EADkB;KAAX,CAAT;;;EAOFyU,MAAM,GACJ,eAAcA,MAAM,CAACxC,OAAP,EAAd,KAAmCsd,aAAnC,GACI9a,MAAM,CAACxC,OAAP,EADJ,GAEIwC,MAAM,CAAC,CAAD,CAHZ,CAhG2B;;;MAsGvBiC,cAAc,IAAIqQ,QAAQ,CAACjV,IAAD,CAA9B,EAAsC;WAC7BiV,QAAQ,CAACjV,IAAD,CAAR,CAAe2C,MAAf,oBAA4B0S,IAA5B,EAAqCsI,cAArC,EAAP;;;SAGKhb,MAAP;;AAGF,AAAO,SAAS2b,mBAAT,CAA6BjP,MAA7B,EAAqCgG,IAArC,EAA2C;MAC1CkJ,OAAO,GAAG,EAAhB;;mBACgBlP,MAAhB,EAAwBlT,OAAxB,CAAgC,UAAAqiB,CAAC,EAAI;QAC/B,CAACD,OAAO,CAACC,CAAD,CAAZ,EAAiB;MACfD,OAAO,CAACC,CAAD,CAAP,GAAad,MAAM,mBAAMrI,IAAN;QAAYrV,IAAI,EAAEwe,CAAlB;QAAqBb,cAAc,EAAEtO,MAAM,CAACmP,CAAD;SAA9D;;GAFJ;;SAKOD,OAAP;;;AAGF,SAASE,aAAT,CAAuBpJ,IAAvB,EAA6B;MACnBrV,IADmB,GACkBqV,IADlB,CACnBrV,IADmB;MACb2D,SADa,GACkB0R,IADlB,CACb1R,SADa;uBACkB0R,IADlB,CACFqJ,QADE;MACFA,QADE,+BACS,IADT;MAGrB/b,MAAM,GAAG+a,MAAM,mBAAMrI,IAAN;IAAYsI,cAAc,EAAEha,SAAS,CAAC3D,IAAD;KAA1D,CAH2B;;MAMvB2C,MAAJ,EAAY;WACHA,MAAP;GAPyB;;;;MAYvB+b,QAAJ,EAAc,OAAOnC,gBAAgB,CAACvc,IAAD,CAAhB,CAAuBqV,IAAvB,CAAP;SAEP,IAAP;;;AAGF,IAAMsJ,aAAa,GAAG;EACpBlJ,OADoB,qBACwB;QAApC9R,SAAoC,uEAAxB4Y,gBAAwB;QAANlH,IAAM;gBACFA,IADE;QAClCuJ,WADkC,SAClCA,WADkC;QACrBC,cADqB,SACrBA,cADqB;;QAGtClb,SAAS,CAACE,MAAV,KAAqB,GAAzB,EAA8B,OAAOF,SAAS,CAAC8R,OAAV,CAAkBJ,IAAlB,CAAP;IAE9BA,IAAI,qBACCA,IADD;MAEF1R,SAAS,EAATA;MAFF;;QAKIib,WAAJ,EAAiB;UACTxtB,QAAO,GAAGqtB,aAAa,mBACxBpJ,IADwB;QAE3BrV,IAAI,EAAE,SAFqB;QAG3Bwd,WAAW,EAAE,IAHc;QAI3Btf,KAAK,EAAE2gB;SAJT;;aAMO;QACLztB,OAAO,EAAPA;OADF;;;QAII8M,KAAK,GAAGugB,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE;OAA7C;QACMsE,cAAc,GAAGma,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE;OAAtD;QACMqE,MAAM,GAAGoa,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE;OAA9C;QACMoF,aAAa,GAAGqZ,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE;OAArD;QACM5O,OAAO,GAAGqtB,aAAa,mBACxBpJ,IADwB;MAE3BrV,IAAI,EAAE,SAFqB;MAG3Bwd,WAAW,EAAE,IAHc;MAI3Btf,KAAK,EAALA;OAJF;QAMMiH,cAAc,GAAGsZ,aAAa,mBAC/BpJ,IAD+B;MAElCrV,IAAI,EAAE,gBAF4B;MAGlC5O,OAAO,EAAPA;OAHF;QAKMiU,OAAO,GAAGoZ,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE,SAAlB;MAA6B5O,OAAO,EAAPA;OAA1D;QACMsT,GAAG,GAAG+Z,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE,KAAlB;MAAyB5O,OAAO,EAAPA,OAAzB;MAAkCiU,OAAO,EAAPA;OAA3D;QACMqX,UAAU,GAAG+B,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE,YAAlB;MAAgC5O,OAAO,EAAPA;OAAhE;QACMurB,SAAS,GAAG8B,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE,WAAlB;MAA+B9B,KAAK,EAALA;OAA9D;;gBACwBugB,aAAa,mBAChCpJ,IADgC;MAEnCrV,IAAI,EAAE;OAFgB,IAGlB;MAAE5R,GAAG,EAAE,IAAP;MAAayV,MAAM,EAAE;KA3Ce;QAwClCzV,GAxCkC,SAwClCA,GAxCkC;QAwC7ByV,MAxC6B,SAwC7BA,MAxC6B;;QA6CtCib,eAAe,GAAG,EAAtB;;QACInb,SAAS,CAAC0L,MAAd,EAAsB;MACpByP,eAAe,GAAGR,mBAAmB,CAAC3a,SAAS,CAAC0L,MAAX,EAAmBgG,IAAnB,CAArC;;;;MAIAnX,KAAK,EAALA,KADF;MAEE9M,OAAO,EAAPA,OAFF;MAGEiT,MAAM,EAANA,MAHF;MAIEC,cAAc,EAAdA,cAJF;MAKEa,cAAc,EAAdA,cALF;MAMET,GAAG,EAAHA,GANF;MAOEU,aAAa,EAAbA,aAPF;MAQEhX,GAAG,EAAHA,GARF;MASEyV,MAAM,EAANA,MATF;MAUEwB,OAAO,EAAPA,OAVF;MAWEqX,UAAU,EAAVA,UAXF;MAYEC,SAAS,EAATA;OACGmC,eAbL;;CAnDJ;;SCtM8BC,eAA9B;;;;;;;2BAAe;;;;;;YACb3Z,aADa,QACbA,aADa,EAEb7M,IAFa,QAEbA,IAFa,EAGbxE,CAHa,QAGbA,CAHa,EAIbmiB,SAJa,QAIbA,SAJa,EAKbvT,MALa,QAKbA,MALa,EAMbqc,SANa,QAMbA,SANa,EAOb9gB,KAPa,QAObA,KAPa,EAQb9P,GARa,QAQbA,GARa;;YAWT6wB,KAXS,GAWD,CAXC;YAYP3E,YAZO,GAYQ,CAAChrB,YAAY,CAAClB,GAAD,CAAb,CAZR;;;;kBAeNgX,aAAa,IAAI6Z,KAAK,GAAG,EAfnB;;;;;YAgBXA,KAAK,IAAI,CAAT,CAhBW;;;mBAkBD1c,QAAQ,CAACC,MAAT,CAAgB4C,aAAhB,CAlBC;;;YAkBXrR,CAlBW;YAmBXwE,IAAI,GAAGxE,CAAC,CAACwE,IAAF,EAAP;YAEM2mB,aArBK,GAqBW;cACpB9wB,GAAG,EAAEgX,aADe;cAEpB7M,IAAI,EAAJA,IAFoB;cAGpBxE,CAAC,EAADA,CAHoB;cAIpBmiB,SAAS,EAATA,SAJoB;cAKpB2I,cAAc,EAAE3gB,KALI;cAMpBoc,YAAY,EAAZA;aA3BS;YA8BL6E,cA9BK,GA8BYR,aAAa,CAAClJ,OAAd,CAAsBuJ,SAAtB,EAAiCE,aAAjC,CA9BZ;YAgCX5E,YAAY,CAACvpB,IAAb,CAAkBqU,aAAlB;YACAzC,MAAM,qBACDA,MADC;cAEJvR,OAAO,YAAKuR,MAAM,CAACvR,OAAZ,0BAAmC6tB,KAAnC,kBACLE,cAAc,CAAC/tB,OADV;cAFT,CAjCW;;YAyCXgU,aAAa,GAAG+Z,cAAc,CAAC/Z,aAA/B;;;;;YAGIsX,UA5CO,GA4CMH,gBAAgB,CAACG,UAAjB,CAA4B;cAC7CtrB,OAAO,iBAAUuR,MAAM,CAACvR,OAAjB;aADU,CA5CN;+DAgDRuR,MAhDQ;cAiDXyc,WAAW,EAAEH,KAjDF;cAkDXI,cAAc,EAAEJ,KAlDL;cAmDXvC,UAAU,EAAVA;;;;;;;;;;;;;AC7CJ,IAAM4C,MAAM,GAAG;EACPnvB,KADO;;;8CACD/B,GADC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EACwB,EADxB,EACMmK,IADN,QACMA,IADN,EACe8c,IADf;oCASPA,IATO,CAGTkK,aAHS,EAGTA,aAHS,oCAGO,IAHP,yCASPlK,IATO,CAITqJ,QAJS,EAITA,QAJS,+BAIE,IAJF,uCASPrJ,IATO,CAKTniB,WALS,EAKTA,WALS,kCAKK,MALL,sCASPmiB,IATO,CAMTpiB,OANS,EAMTA,OANS,8BAMC,EAND,kBAOToc,MAPS,GASPgG,IATO,CAOThG,MAPS,EAQTmQ,eARS,GASPnK,IATO,CAQTmK,eARS;;;;kBAcP,CAACpxB,GAAD,IAAQyD,OAAO,CAACC,OAApB,EAA6B;gBAC3B1D,GAAG,GAAGuF,MAAM,CAAC8rB,QAAP,CAAgBnsB,IAAtB,CAD2B;;gBAE3BiF,IAAI,GAAGA,IAAI,IAAI1G,OAAO,CAAC0G,IAAR,EAAf;;;cAGItI,SAnBK,GAmBOC,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CAnBP;;kBAqBNqV,WAAW,CAACxT,SAAD,CArBL;;;;;+CAsBF;gBACL+C,KAAK,EAAE,IADF;gBAELa,OAAO,EACL;eAzBK;;;;qBA6BK0O,QAAQ,CAACC,MAAT,CAAgBpU,GAAhB,EAAqBmK,IAArB,EAA2BtI,SAA3B,EAAsCgD,OAAtC,CA7BL;;;cA6BLc,CA7BK;;mBAgCPA,CAAC,CAAC8O,MAhCK;;;;;+CAiCF9O,CAjCE;;;;kBAqCPyrB,eAAJ,EAAqB;gBACnBE,YAAkB,CAACF,eAAD,CAAlB;;;cAGIR,SAzCK,GAyCO/B,YAAY,CAAC7uB,GAAD,EAAM6B,SAAN,EAAiB8D,CAAjB,CAzCnB;;;;kBA8CP,CAACwE,IAAL,EAAW;gBACTA,IAAI,GAAGxE,CAAC,CAACwE,IAAF,EAAP;eA/CS;;;;cAoDL2d,SApDK,GAoDOniB,CAAC,CAAC,MAAD,CAAD,CACfsE,GADe,CACX,UAAClE,CAAD,EAAIC,IAAJ;uBAAaL,CAAC,CAACK,IAAD,CAAD,CAAQG,IAAR,CAAa,MAAb,CAAb;eADW,EAEf4L,OAFe,EApDP;cAwDPwf,aAxDO,GAwDS,EAxDT;;kBAyDPtQ,MAAJ,EAAY;gBACVsQ,aAAa,GAAGrB,mBAAmB,CAACjP,MAAD,EAAS;kBAAEtb,CAAC,EAADA,CAAF;kBAAK3F,GAAG,EAAHA,GAAL;kBAAUmK,IAAI,EAAJA;iBAAnB,CAAnC;;;cAGEoK,MA7DO,GA6DEgc,aAAa,CAAClJ,OAAd,CAAsBuJ,SAAtB,EAAiC;gBAC5C5wB,GAAG,EAAHA,GAD4C;gBAE5CmK,IAAI,EAAJA,IAF4C;gBAG5CxE,CAAC,EAADA,CAH4C;gBAI5CmiB,SAAS,EAATA,SAJ4C;gBAK5CjmB,SAAS,EAATA,SAL4C;gBAM5CyuB,QAAQ,EAARA,QAN4C;gBAO5CxrB,WAAW,EAAXA;eAPW,CA7DF;wBAuEsByP,MAvEtB,EAuEHzE,KAvEG,WAuEHA,KAvEG,EAuEIkH,aAvEJ,WAuEIA,aAvEJ;;oBA0EPma,aAAa,IAAIna,aA1EV;;;;;;qBA2EM2Z,eAAe,CAAC;gBAC7BC,SAAS,EAATA,SAD6B;gBAE7B5Z,aAAa,EAAbA,aAF6B;gBAG7B7M,IAAI,EAAJA,IAH6B;gBAI7BxE,CAAC,EAADA,CAJ6B;gBAK7BmiB,SAAS,EAATA,SAL6B;gBAM7BvT,MAAM,EAANA,MAN6B;gBAO7BzE,KAAK,EAALA,KAP6B;gBAQ7B9P,GAAG,EAAHA;eAR4B,CA3ErB;;;cA2ETuU,MA3ES;;;;;cAsFTA,MAAM,qBACDA,MADC;gBAEJyc,WAAW,EAAE,CAFT;gBAGJC,cAAc,EAAE;gBAHlB;;;kBAOEnsB,WAAW,KAAK,UAApB,EAAgC;gBACxB0sB,eADwB,GACN,IAAIC,eAAJ,EADM;gBAE9Bld,MAAM,CAACvR,OAAP,GAAiBwuB,eAAe,CAACE,QAAhB,CAAyBnd,MAAM,CAACvR,OAAhC,CAAjB;eAFF,MAGO,IAAI8B,WAAW,KAAK,MAApB,EAA4B;gBACjCyP,MAAM,CAACvR,OAAP,GAAiB2C,CAAC,CAAC/F,IAAF,CAAO+F,CAAC,CAAC4O,MAAM,CAACvR,OAAR,CAAR,CAAjB;;;iEAGUuR,MApGD,EAoGYgd,aApGZ;;;;;;;;;;;;;;;;EAuGb7tB,OAAO,EAAE,CAAC,CAACD,OAAO,CAACC,OAvGN;;;EA2GbsB,aA3Ga,yBA2GChF,GA3GD,EA2GM;WACVmU,QAAQ,CAACC,MAAT,CAAgBpU,GAAhB,CAAP;GA5GW;EA+Gb6V,YA/Ga,2BA+GAN,SA/GA,EA+GW;WACf+b,YAAkB,CAAC/b,SAAD,CAAzB;;CAhHJ;;;;"} \ No newline at end of file +{"version":3,"file":"mercury.js","sources":["../src/utils/text/normalize-spaces.js","../src/utils/text/extract-from-url.js","../src/utils/text/constants.js","../src/utils/text/page-num-from-url.js","../src/utils/text/remove-anchor.js","../src/utils/text/article-base-url.js","../src/utils/text/has-sentence-end.js","../src/utils/text/excerpt-content.js","../src/utils/text/get-encoding.js","../src/resource/utils/constants.js","../src/resource/utils/fetch-resource.js","../src/resource/utils/dom/normalize-meta-tags.js","../src/utils/dom/constants.js","../src/utils/dom/strip-unlikely-candidates.js","../src/utils/dom/brs-to-ps.js","../src/utils/dom/paragraphize.js","../src/utils/dom/convert-to-paragraphs.js","../src/utils/dom/convert-node-to.js","../src/utils/dom/clean-images.js","../src/utils/dom/mark-to-keep.js","../src/utils/dom/strip-junk-tags.js","../src/utils/dom/clean-h-ones.js","../src/utils/dom/clean-attributes.js","../src/utils/dom/remove-empty.js","../src/extractors/generic/content/scoring/constants.js","../src/extractors/generic/content/scoring/get-weight.js","../src/extractors/generic/content/scoring/get-score.js","../src/extractors/generic/content/scoring/score-commas.js","../src/extractors/generic/content/scoring/score-length.js","../src/extractors/generic/content/scoring/score-paragraph.js","../src/extractors/generic/content/scoring/set-score.js","../src/extractors/generic/content/scoring/add-score.js","../src/extractors/generic/content/scoring/add-to-parent.js","../src/extractors/generic/content/scoring/get-or-init-score.js","../src/extractors/generic/content/scoring/score-node.js","../src/extractors/generic/content/scoring/score-content.js","../src/extractors/generic/content/scoring/merge-siblings.js","../src/extractors/generic/content/scoring/find-top-candidate.js","../src/extractors/generic/content/scoring/index.js","../src/utils/dom/clean-tags.js","../src/utils/dom/clean-headers.js","../src/utils/dom/rewrite-top-level.js","../src/utils/dom/make-links-absolute.js","../src/utils/dom/link-density.js","../src/utils/dom/extract-from-meta.js","../src/utils/dom/extract-from-selectors.js","../src/utils/dom/strip-tags.js","../src/utils/dom/within-comment.js","../src/utils/dom/node-is-sufficient.js","../src/utils/dom/is-wordpress.js","../src/utils/dom/get-attrs.js","../src/utils/dom/set-attr.js","../src/utils/dom/set-attrs.js","../src/utils/dom/index.js","../src/resource/utils/dom/constants.js","../src/resource/utils/dom/convert-lazy-loaded-images.js","../src/resource/utils/dom/clean.js","../src/resource/index.js","../src/utils/range.js","../src/utils/validate-url.js","../src/utils/merge-supported-domains.js","../src/extractors/add-extractor.js","../src/extractors/custom/blogspot.com/index.js","../src/extractors/custom/nymag.com/index.js","../src/extractors/custom/wikipedia.org/index.js","../src/extractors/custom/twitter.com/index.js","../src/extractors/custom/www.nytimes.com/index.js","../src/extractors/custom/www.theatlantic.com/index.js","../src/extractors/custom/www.newyorker.com/index.js","../src/extractors/custom/www.wired.com/index.js","../src/extractors/custom/www.msn.com/index.js","../src/extractors/custom/www.yahoo.com/index.js","../src/extractors/custom/www.buzzfeed.com/index.js","../src/extractors/custom/fandom.wikia.com/index.js","../src/extractors/custom/www.littlethings.com/index.js","../src/extractors/custom/www.politico.com/index.js","../src/extractors/custom/deadspin.com/index.js","../src/extractors/custom/www.broadwayworld.com/index.js","../src/extractors/custom/www.apartmenttherapy.com/index.js","../src/extractors/custom/medium.com/index.js","../src/extractors/custom/www.tmz.com/index.js","../src/extractors/custom/www.washingtonpost.com/index.js","../src/extractors/custom/www.huffingtonpost.com/index.js","../src/extractors/custom/newrepublic.com/index.js","../src/extractors/custom/money.cnn.com/index.js","../src/extractors/custom/www.theverge.com/index.js","../src/extractors/custom/www.cnn.com/index.js","../src/extractors/custom/www.aol.com/index.js","../src/extractors/custom/www.youtube.com/index.js","../src/extractors/custom/www.theguardian.com/index.js","../src/extractors/custom/www.sbnation.com/index.js","../src/extractors/custom/www.bloomberg.com/index.js","../src/extractors/custom/www.bustle.com/index.js","../src/extractors/custom/www.npr.org/index.js","../src/extractors/custom/www.recode.net/index.js","../src/extractors/custom/qz.com/index.js","../src/extractors/custom/www.dmagazine.com/index.js","../src/extractors/custom/www.reuters.com/index.js","../src/extractors/custom/mashable.com/index.js","../src/extractors/custom/www.chicagotribune.com/index.js","../src/extractors/custom/www.vox.com/index.js","../src/extractors/custom/news.nationalgeographic.com/index.js","../src/extractors/custom/www.nationalgeographic.com/index.js","../src/extractors/custom/www.latimes.com/index.js","../src/extractors/custom/pagesix.com/index.js","../src/extractors/custom/thefederalistpapers.org/index.js","../src/extractors/custom/www.cbssports.com/index.js","../src/extractors/custom/www.msnbc.com/index.js","../src/extractors/custom/www.thepoliticalinsider.com/index.js","../src/extractors/custom/www.mentalfloss.com/index.js","../src/extractors/custom/abcnews.go.com/index.js","../src/extractors/custom/www.nydailynews.com/index.js","../src/extractors/custom/www.cnbc.com/index.js","../src/extractors/custom/www.popsugar.com/index.js","../src/extractors/custom/observer.com/index.js","../src/extractors/custom/people.com/index.js","../src/extractors/custom/www.usmagazine.com/index.js","../src/extractors/custom/www.rollingstone.com/index.js","../src/extractors/custom/247sports.com/index.js","../src/extractors/custom/uproxx.com/index.js","../src/extractors/custom/www.eonline.com/index.js","../src/extractors/custom/www.miamiherald.com/index.js","../src/extractors/custom/www.refinery29.com/index.js","../src/extractors/custom/www.macrumors.com/index.js","../src/extractors/custom/www.androidcentral.com/index.js","../src/extractors/custom/www.si.com/index.js","../src/extractors/custom/www.rawstory.com/index.js","../src/extractors/custom/www.cnet.com/index.js","../src/extractors/custom/www.today.com/index.js","../src/extractors/custom/www.al.com/index.js","../src/extractors/custom/www.thepennyhoarder.com/index.js","../src/extractors/custom/www.westernjournalism.com/index.js","../src/extractors/custom/www.americanow.com/index.js","../src/extractors/custom/sciencefly.com/index.js","../src/extractors/custom/hellogiggles.com/index.js","../src/extractors/custom/thoughtcatalog.com/index.js","../src/extractors/custom/www.inquisitr.com/index.js","../src/extractors/custom/www.nbcnews.com/index.js","../src/extractors/custom/fortune.com/index.js","../src/extractors/custom/www.linkedin.com/index.js","../src/extractors/custom/obamawhitehouse.archives.gov/index.js","../src/extractors/custom/www.opposingviews.com/index.js","../src/extractors/custom/www.prospectmagazine.co.uk/index.js","../src/extractors/custom/forward.com/index.js","../src/extractors/custom/www.qdaily.com/index.js","../src/extractors/custom/gothamist.com/index.js","../src/extractors/custom/www.fool.com/index.js","../src/extractors/custom/www.slate.com/index.js","../src/extractors/custom/ici.radio-canada.ca/index.js","../src/extractors/custom/www.fortinet.com/index.js","../src/extractors/custom/www.fastcompany.com/index.js","../src/extractors/custom/blisterreview.com/index.js","../src/extractors/custom/news.mynavi.jp/index.js","../src/extractors/custom/clinicaltrials.gov/index.js","../src/extractors/custom/github.com/index.js","../src/extractors/custom/www.reddit.com/index.js","../src/extractors/custom/otrs.com/index.js","../src/extractors/custom/www.ossnews.jp/index.js","../src/extractors/custom/buzzap.jp/index.js","../src/extractors/custom/www.asahi.com/index.js","../src/extractors/custom/www.sanwa.co.jp/index.js","../src/extractors/custom/www.elecom.co.jp/index.js","../src/extractors/custom/scan.netsecurity.ne.jp/index.js","../src/extractors/custom/jvndb.jvn.jp/index.js","../src/extractors/custom/genius.com/index.js","../src/extractors/custom/www.jnsa.org/index.js","../src/extractors/custom/phpspot.org/index.js","../src/extractors/custom/www.infoq.com/index.js","../src/extractors/custom/www.moongift.jp/index.js","../src/extractors/custom/www.itmedia.co.jp/index.js","../src/extractors/custom/www.publickey1.jp/index.js","../src/extractors/custom/takagi-hiromitsu.jp/index.js","../src/extractors/custom/bookwalker.jp/index.js","../src/extractors/custom/www.yomiuri.co.jp/index.js","../src/extractors/custom/japan.cnet.com/index.js","../src/extractors/custom/deadline.com/index.js","../src/extractors/custom/www.gizmodo.jp/index.js","../src/extractors/custom/getnews.jp/index.js","../src/extractors/custom/www.lifehacker.jp/index.js","../src/extractors/custom/sect.iij.ad.jp/index.js","../src/extractors/custom/www.oreilly.co.jp/index.js","../src/extractors/custom/www.ipa.go.jp/index.js","../src/extractors/custom/weekly.ascii.jp/index.js","../src/extractors/custom/techlog.iij.ad.jp/index.js","../src/extractors/custom/wired.jp/index.js","../src/extractors/custom/japan.zdnet.com/index.js","../src/extractors/custom/www.rbbtoday.com/index.js","../src/extractors/custom/www.lemonde.fr/index.js","../src/extractors/custom/www.phoronix.com/index.js","../src/extractors/custom/pitchfork.com/index.js","../src/extractors/custom/biorxiv.org/index.js","../src/extractors/custom/epaper.zeit.de/index.js","../src/extractors/custom/www.ladbible.com/index.js","../src/extractors/custom/timesofindia.indiatimes.com/index.js","../src/extractors/custom/ma.ttias.be/index.js","../src/extractors/custom/pastebin.com/index.js","../src/extractors/custom/www.abendblatt.de/index.js","../src/extractors/custom/www.gruene.de/index.js","../src/extractors/custom/www.engadget.com/index.js","../src/extractors/custom/arstechnica.com/index.js","../src/extractors/custom/www.ndtv.com/index.js","../src/extractors/custom/www.spektrum.de/index.js","../src/extractors/custom/postlight.com/index.js","../src/extractors/custom/www.investmentexecutive.com/index.js","../src/extractors/custom/www.cbc.ca/index.js","../src/extractors/all.js","../src/cleaners/constants.js","../src/cleaners/author.js","../src/cleaners/lead-image-url.js","../src/cleaners/dek.js","../src/cleaners/date-published.js","../src/cleaners/content.js","../src/cleaners/title.js","../src/cleaners/resolve-split-title.js","../src/cleaners/index.js","../src/extractors/generic/content/extract-best-node.js","../src/extractors/generic/content/extractor.js","../src/extractors/generic/title/constants.js","../src/extractors/generic/title/extractor.js","../src/extractors/generic/author/constants.js","../src/extractors/generic/author/extractor.js","../src/extractors/generic/date-published/constants.js","../src/extractors/generic/date-published/extractor.js","../src/extractors/generic/dek/extractor.js","../src/extractors/generic/lead-image-url/constants.js","../src/extractors/generic/lead-image-url/score-image.js","../src/extractors/generic/lead-image-url/extractor.js","../src/extractors/generic/next-page-url/scoring/utils/score-similarity.js","../src/extractors/generic/next-page-url/scoring/utils/score-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-page-in-link.js","../src/extractors/generic/next-page-url/scoring/constants.js","../src/extractors/generic/next-page-url/scoring/utils/score-extraneous-links.js","../src/extractors/generic/next-page-url/scoring/utils/score-by-parents.js","../src/extractors/generic/next-page-url/scoring/utils/score-prev-link.js","../src/extractors/generic/next-page-url/scoring/utils/should-score.js","../src/extractors/generic/next-page-url/scoring/utils/score-base-url.js","../src/extractors/generic/next-page-url/scoring/utils/score-next-link-text.js","../src/extractors/generic/next-page-url/scoring/utils/score-cap-links.js","../src/extractors/generic/next-page-url/scoring/score-links.js","../src/extractors/generic/next-page-url/extractor.js","../src/extractors/generic/url/constants.js","../src/extractors/generic/url/extractor.js","../src/extractors/generic/excerpt/constants.js","../src/extractors/generic/excerpt/extractor.js","../src/extractors/generic/word-count/extractor.js","../src/extractors/generic/index.js","../src/extractors/detect-by-html.js","../src/extractors/get-extractor.js","../src/extractors/root-extractor.js","../src/extractors/collect-all-pages.js","../src/mercury.js"],"sourcesContent":["const NORMALIZE_RE = /\\s{2,}(?![^<>]*<\\/(pre|code|textarea)>)/g;\n\nexport default function normalizeSpaces(text) {\n return text.replace(NORMALIZE_RE, ' ').trim();\n}\n","// Given a node type to search for, and a list of regular expressions,\n// look to see if this extraction can be found in the URL. Expects\n// that each expression in r_list will return group(1) as the proper\n// string to be cleaned.\n// Only used for date_published currently.\nexport default function extractFromUrl(url, regexList) {\n const matchRe = regexList.find(re => re.test(url));\n if (matchRe) {\n return matchRe.exec(url)[1];\n }\n\n return null;\n}\n","// An expression that looks to try to find the page digit within a URL, if\n// it exists.\n// Matches:\n// page=1\n// pg=1\n// p=1\n// paging=12\n// pag=7\n// pagination/1\n// paging/88\n// pa/83\n// p/11\n//\n// Does not match:\n// pg=102\n// page:2\nexport const PAGE_IN_HREF_RE = new RegExp(\n '(page|paging|(p(a|g|ag)?(e|enum|ewanted|ing|ination)))?(=|/)([0-9]{1,3})',\n 'i'\n);\n\nexport const HAS_ALPHA_RE = /[a-z]/i;\n\nexport const IS_ALPHA_RE = /^[a-z]+$/i;\nexport const IS_DIGIT_RE = /^[0-9]+$/i;\n\nexport const ENCODING_RE = /charset=([\\w-]+)\\b/;\nexport const DEFAULT_ENCODING = 'utf-8';\n","import { PAGE_IN_HREF_RE } from './constants';\n\nexport default function pageNumFromUrl(url) {\n const matches = url.match(PAGE_IN_HREF_RE);\n if (!matches) return null;\n\n const pageNum = parseInt(matches[6], 10);\n\n // Return pageNum < 100, otherwise\n // return null\n return pageNum < 100 ? pageNum : null;\n}\n","export default function removeAnchor(url) {\n return url.split('#')[0].replace(/\\/$/, '');\n}\n","import URL from 'url';\n\nimport {\n HAS_ALPHA_RE,\n IS_ALPHA_RE,\n IS_DIGIT_RE,\n PAGE_IN_HREF_RE,\n} from './constants';\n\nfunction isGoodSegment(segment, index, firstSegmentHasLetters) {\n let goodSegment = true;\n\n // If this is purely a number, and it's the first or second\n // url_segment, it's probably a page number. Remove it.\n if (index < 2 && IS_DIGIT_RE.test(segment) && segment.length < 3) {\n goodSegment = true;\n }\n\n // If this is the first url_segment and it's just \"index\",\n // remove it\n if (index === 0 && segment.toLowerCase() === 'index') {\n goodSegment = false;\n }\n\n // If our first or second url_segment is smaller than 3 characters,\n // and the first url_segment had no alphas, remove it.\n if (index < 2 && segment.length < 3 && !firstSegmentHasLetters) {\n goodSegment = false;\n }\n\n return goodSegment;\n}\n\n// Take a URL, and return the article base of said URL. That is, no\n// pagination data exists in it. Useful for comparing to other links\n// that might have pagination data within them.\nexport default function articleBaseUrl(url, parsed) {\n const parsedUrl = parsed || URL.parse(url);\n const { protocol, host, path } = parsedUrl;\n\n let firstSegmentHasLetters = false;\n const cleanedSegments = path\n .split('/')\n .reverse()\n .reduce((acc, rawSegment, index) => {\n let segment = rawSegment;\n\n // Split off and save anything that looks like a file type.\n if (segment.includes('.')) {\n const [possibleSegment, fileExt] = segment.split('.');\n if (IS_ALPHA_RE.test(fileExt)) {\n segment = possibleSegment;\n }\n }\n\n // If our first or second segment has anything looking like a page\n // number, remove it.\n if (PAGE_IN_HREF_RE.test(segment) && index < 2) {\n segment = segment.replace(PAGE_IN_HREF_RE, '');\n }\n\n // If we're on the first segment, check to see if we have any\n // characters in it. The first segment is actually the last bit of\n // the URL, and this will be helpful to determine if we're on a URL\n // segment that looks like \"/2/\" for example.\n if (index === 0) {\n firstSegmentHasLetters = HAS_ALPHA_RE.test(segment);\n }\n\n // If it's not marked for deletion, push it to cleaned_segments.\n if (isGoodSegment(segment, index, firstSegmentHasLetters)) {\n acc.push(segment);\n }\n\n return acc;\n }, []);\n\n return `${protocol}//${host}${cleanedSegments.reverse().join('/')}`;\n}\n","// Given a string, return True if it appears to have an ending sentence\n// within it, false otherwise.\nconst SENTENCE_END_RE = new RegExp('.( |$)');\nexport default function hasSentenceEnd(text) {\n return SENTENCE_END_RE.test(text);\n}\n","export default function excerptContent(content, words = 10) {\n return content\n .trim()\n .split(/\\s+/)\n .slice(0, words)\n .join(' ');\n}\n","import iconv from 'iconv-lite';\nimport { DEFAULT_ENCODING, ENCODING_RE } from './constants';\n\n// check a string for encoding; this is\n// used in our fetchResource function to\n// ensure correctly encoded responses\nexport default function getEncoding(str) {\n let encoding = DEFAULT_ENCODING;\n const matches = ENCODING_RE.exec(str);\n if (matches !== null) {\n [, str] = matches;\n }\n if (iconv.encodingExists(str)) {\n encoding = str;\n }\n return encoding;\n}\n","import cheerio from 'cheerio';\n\n// Browser does not like us setting user agent\nexport const REQUEST_HEADERS = cheerio.browser\n ? {}\n : {\n 'User-Agent':\n 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',\n };\n\n// The number of milliseconds to attempt to fetch a resource before timing out.\nexport const FETCH_TIMEOUT = 10000;\n\n// Content types that we do not extract content from\nconst BAD_CONTENT_TYPES = [\n 'audio/mpeg',\n 'image/gif',\n 'image/jpeg',\n 'image/jpg',\n];\n\nexport const BAD_CONTENT_TYPES_RE = new RegExp(\n `^(${BAD_CONTENT_TYPES.join('|')})$`,\n 'i'\n);\n\n// Use this setting as the maximum size an article can be\n// for us to attempt parsing. Defaults to 5 MB.\nexport const MAX_CONTENT_LENGTH = 5242880;\n\n// Turn the global proxy on or off\n// Proxying is not currently enabled in Python source\n// so not implementing logic in port.\nexport const PROXY_DOMAINS = false;\nexport const REQUESTS_PROXIES = {\n http: 'http://38.98.105.139:33333',\n https: 'http://38.98.105.139:33333',\n};\n\nexport const DOMAINS_TO_PROXY = ['nih.gov', 'gutenberg.org'];\n","import URL from 'url';\nimport request from 'postman-request';\n\nimport {\n REQUEST_HEADERS,\n FETCH_TIMEOUT,\n BAD_CONTENT_TYPES_RE,\n MAX_CONTENT_LENGTH,\n} from './constants';\n\nfunction get(options) {\n return new Promise((resolve, reject) => {\n request(options, (err, response, body) => {\n if (err) {\n reject(err);\n } else {\n resolve({ body, response });\n }\n });\n });\n}\n\n// Evaluate a response to ensure it's something we should be keeping.\n// This does not validate in the sense of a response being 200 or not.\n// Validation here means that we haven't found reason to bail from\n// further processing of this url.\n\nexport function validateResponse(response, parseNon200 = false) {\n // Check if we got a valid status code\n // This isn't great, but I'm requiring a statusMessage to be set\n // before short circuiting b/c nock doesn't set it in tests\n // statusMessage only not set in nock response, in which case\n // I check statusCode, which is currently only 200 for OK responses\n // in tests\n if (\n (response.statusMessage && response.statusMessage !== 'OK') ||\n response.statusCode !== 200\n ) {\n if (!response.statusCode) {\n throw new Error(\n `Unable to fetch content. Original exception was ${response.error}`\n );\n } else if (!parseNon200) {\n throw new Error(\n `Resource returned a response status code of ${\n response.statusCode\n } and resource was instructed to reject non-200 status codes.`\n );\n }\n }\n\n const {\n 'content-type': contentType,\n 'content-length': contentLength,\n } = response.headers;\n\n // Check that the content is not in BAD_CONTENT_TYPES\n if (BAD_CONTENT_TYPES_RE.test(contentType)) {\n throw new Error(\n `Content-type for this resource was ${contentType} and is not allowed.`\n );\n }\n\n // Check that the content length is below maximum\n if (contentLength > MAX_CONTENT_LENGTH) {\n throw new Error(\n `Content for this resource was too large. Maximum content length is ${MAX_CONTENT_LENGTH}.`\n );\n }\n\n return true;\n}\n\n// Grabs the last two pieces of the URL and joins them back together\n// This is to get the 'livejournal.com' from 'erotictrains.livejournal.com'\nexport function baseDomain({ host }) {\n return host\n .split('.')\n .slice(-2)\n .join('.');\n}\n\n// Set our response attribute to the result of fetching our URL.\n// TODO: This should gracefully handle timeouts and raise the\n// proper exceptions on the many failure cases of HTTP.\n// TODO: Ensure we are not fetching something enormous. Always return\n// unicode content for HTML, with charset conversion.\n\nexport default async function fetchResource(url, parsedUrl, headers = {}) {\n parsedUrl = parsedUrl || URL.parse(encodeURI(url));\n const options = {\n url: parsedUrl.href,\n headers: { ...REQUEST_HEADERS, ...headers },\n timeout: FETCH_TIMEOUT,\n // Accept cookies\n jar: true,\n // Set to null so the response returns as binary and body as buffer\n // https://github.com/request/request#requestoptions-callback\n encoding: null,\n // Accept and decode gzip\n gzip: true,\n // Follow any non-GET redirects\n followAllRedirects: true,\n ...(typeof window !== 'undefined'\n ? {}\n : {\n // Follow GET redirects; this option is for Node only\n followRedirect: true,\n }),\n };\n\n const { response, body } = await get(options);\n\n try {\n validateResponse(response);\n return {\n body,\n response,\n };\n } catch (e) {\n return {\n error: true,\n message: e.message,\n };\n }\n}\n","function convertMetaProp($, from, to) {\n $(`meta[${from}]`).each((_, node) => {\n const $node = $(node);\n\n const value = $node.attr(from);\n $node.attr(to, value);\n $node.removeAttr(from);\n });\n\n return $;\n}\n\n// For ease of use in extracting from meta tags,\n// replace the \"content\" attribute on meta tags with the\n// \"value\" attribute.\n//\n// In addition, normalize 'property' attributes to 'name' for ease of\n// querying later. See, e.g., og or twitter meta tags.\n\nexport default function normalizeMetaTags($) {\n $ = convertMetaProp($, 'content', 'value');\n $ = convertMetaProp($, 'property', 'name');\n return $;\n}\n","// Spacer images to be removed\nexport const SPACER_RE = new RegExp('transparent|spacer|blank', 'i');\n\n// The class we will use to mark elements we want to keep\n// but would normally remove\nexport const KEEP_CLASS = 'mercury-parser-keep';\n\nexport const KEEP_SELECTORS = [\n 'iframe[src^=\"https://www.youtube.com\"]',\n 'iframe[src^=\"https://www.youtube-nocookie.com\"]',\n 'iframe[src^=\"http://www.youtube.com\"]',\n 'iframe[src^=\"https://player.vimeo\"]',\n 'iframe[src^=\"http://player.vimeo\"]',\n 'iframe[src^=\"https://www.redditmedia.com\"]',\n];\n\n// A list of tags to strip from the output if we encounter them.\nexport const STRIP_OUTPUT_TAGS = [\n 'title',\n 'script',\n 'noscript',\n 'link',\n 'style',\n 'hr',\n 'embed',\n 'iframe',\n 'object',\n];\n\n// cleanAttributes\nexport const REMOVE_ATTRS = ['style', 'align'];\nexport const REMOVE_ATTR_SELECTORS = REMOVE_ATTRS.map(\n selector => `[${selector}]`\n);\nexport const REMOVE_ATTR_LIST = REMOVE_ATTRS.join(',');\nexport const WHITELIST_ATTRS = [\n 'src',\n 'srcset',\n 'sizes',\n 'type',\n 'href',\n 'class',\n 'id',\n 'alt',\n 'xlink:href',\n 'width',\n 'height',\n];\n\nexport const WHITELIST_ATTRS_RE = new RegExp(\n `^(${WHITELIST_ATTRS.join('|')})$`,\n 'i'\n);\n\n// removeEmpty\nexport const REMOVE_EMPTY_TAGS = ['p'];\nexport const REMOVE_EMPTY_SELECTORS = REMOVE_EMPTY_TAGS.map(\n tag => `${tag}:empty`\n).join(',');\n\n// cleanTags\nexport const CLEAN_CONDITIONALLY_TAGS = [\n 'ul',\n 'ol',\n 'table',\n 'div',\n 'button',\n 'form',\n].join(',');\n\n// cleanHeaders\nconst HEADER_TAGS = ['h2', 'h3', 'h4', 'h5', 'h6'];\nexport const HEADER_TAG_LIST = HEADER_TAGS.join(',');\n\n// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n // 'form', // This is too generic, has too many false positives\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'outbrain',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'taboola',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// XPath to try to determine if a page is wordpress. Not always successful.\nexport const IS_WP_SELECTOR = 'meta[name=generator][value^=WordPress]';\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\n// export const NEXT_LINK_TEXT_RE = new RegExp('(next|weiter|continue|>([^\\|]|$)|»([^\\|]|$))', 'i');\nexport const NEXT_LINK_TEXT_RE = /(next|weiter|continue|>([^|]|$)|»([^|]|$))/i;\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import { CANDIDATES_WHITELIST, CANDIDATES_BLACKLIST } from './constants';\n\nexport default function stripUnlikelyCandidates($) {\n // Loop through the provided document and remove any non-link nodes\n // that are unlikely candidates for article content.\n //\n // Links are ignored because there are very often links to content\n // that are identified as non-body-content, but may be inside\n // article-like content.\n //\n // :param $: a cheerio object to strip nodes from\n // :return $: the cleaned cheerio object\n $('*')\n .not('a')\n .each((index, node) => {\n const $node = $(node);\n const classes = $node.attr('class');\n const id = $node.attr('id');\n if (!id && !classes) return;\n\n const classAndId = `${classes || ''} ${id || ''}`;\n if (CANDIDATES_WHITELIST.test(classAndId)) {\n return;\n }\n if (CANDIDATES_BLACKLIST.test(classAndId)) {\n $node.remove();\n }\n });\n\n return $;\n}\n","import { paragraphize } from './index';\n\n// ## NOTES:\n// Another good candidate for refactoring/optimizing.\n// Very imperative code, I don't love it. - AP\n\n// Given cheerio object, convert consecutive <br /> tags into\n// <p /> tags instead.\n//\n// :param $: A cheerio object\n\nexport default function brsToPs($) {\n let collapsing = false;\n $('br').each((index, element) => {\n const $element = $(element);\n const nextElement = $element.next().get(0);\n\n if (nextElement && nextElement.tagName.toLowerCase() === 'br') {\n collapsing = true;\n $element.remove();\n } else if (collapsing) {\n collapsing = false;\n paragraphize(element, $, true);\n }\n });\n\n return $;\n}\n","import { BLOCK_LEVEL_TAGS_RE } from './constants';\n\n// Given a node, turn it into a P if it is not already a P, and\n// make sure it conforms to the constraints of a P tag (I.E. does\n// not contain any other block tags.)\n//\n// If the node is a <br />, it treats the following inline siblings\n// as if they were its children.\n//\n// :param node: The node to paragraphize; this is a raw node\n// :param $: The cheerio object to handle dom manipulation\n// :param br: Whether or not the passed node is a br\n\nexport default function paragraphize(node, $, br = false) {\n const $node = $(node);\n\n if (br) {\n let sibling = node.nextSibling;\n const p = $('<p></p>');\n\n // while the next node is text or not a block level element\n // append it to a new p node\n while (\n sibling &&\n !(sibling.tagName && BLOCK_LEVEL_TAGS_RE.test(sibling.tagName))\n ) {\n const { nextSibling } = sibling;\n $(sibling).appendTo(p);\n sibling = nextSibling;\n }\n\n $node.replaceWith(p);\n $node.remove();\n return $;\n }\n\n return $;\n}\n","import { brsToPs, convertNodeTo } from 'utils/dom';\n\nimport { DIV_TO_P_BLOCK_TAGS } from './constants';\n\nfunction convertDivs($) {\n $('div').each((index, div) => {\n const $div = $(div);\n const convertible = $div.children(DIV_TO_P_BLOCK_TAGS).length === 0;\n\n if (convertible) {\n convertNodeTo($div, $, 'p');\n }\n });\n\n return $;\n}\n\nfunction convertSpans($) {\n $('span').each((index, span) => {\n const $span = $(span);\n const convertible = $span.parents('p, div, li, figcaption').length === 0;\n if (convertible) {\n convertNodeTo($span, $, 'p');\n }\n });\n\n return $;\n}\n\n// Loop through the provided doc, and convert any p-like elements to\n// actual paragraph tags.\n//\n// Things fitting this criteria:\n// * Multiple consecutive <br /> tags.\n// * <div /> tags without block level elements inside of them\n// * <span /> tags who are not children of <p /> or <div /> tags.\n//\n// :param $: A cheerio object to search\n// :return cheerio object with new p elements\n// (By-reference mutation, though. Returned just for convenience.)\n\nexport default function convertToParagraphs($) {\n $ = brsToPs($);\n $ = convertDivs($);\n $ = convertSpans($);\n\n return $;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function convertNodeTo($node, $, tag = 'p') {\n const node = $node.get(0);\n if (!node) {\n return $;\n }\n const attrs = getAttrs(node) || {};\n\n const attribString = Reflect.ownKeys(attrs)\n .map(key => `${key}=${attrs[key]}`)\n .join(' ');\n let html;\n\n if ($.browser) {\n // In the browser, the contents of noscript tags aren't rendered, therefore\n // transforms on the noscript tag (commonly used for lazy-loading) don't work\n // as expected. This test case handles that\n html =\n node.tagName.toLowerCase() === 'noscript' ? $node.text() : $node.html();\n } else {\n html = $node.contents();\n }\n $node.replaceWith(`<${tag} ${attribString}>${html}</${tag}>`);\n return $;\n}\n","import { SPACER_RE } from './constants';\n\nfunction cleanForHeight($img, $) {\n const height = parseInt($img.attr('height'), 10);\n const width = parseInt($img.attr('width'), 10) || 20;\n\n // Remove images that explicitly have very small heights or\n // widths, because they are most likely shims or icons,\n // which aren't very useful for reading.\n if ((height || 20) < 10 || width < 10) {\n $img.remove();\n } else if (height) {\n // Don't ever specify a height on images, so that we can\n // scale with respect to width without screwing up the\n // aspect ratio.\n $img.removeAttr('height');\n }\n\n return $;\n}\n\n// Cleans out images where the source string matches transparent/spacer/etc\n// TODO This seems very aggressive - AP\nfunction removeSpacers($img, $) {\n if (SPACER_RE.test($img.attr('src'))) {\n $img.remove();\n }\n\n return $;\n}\n\nexport default function cleanImages($article, $) {\n $article.find('img').each((index, img) => {\n const $img = $(img);\n\n cleanForHeight($img, $);\n removeSpacers($img, $);\n });\n\n return $;\n}\n","import URL from 'url';\n\nimport { KEEP_SELECTORS, KEEP_CLASS } from './constants';\n\nexport default function markToKeep(article, $, url, tags = []) {\n if (tags.length === 0) {\n tags = KEEP_SELECTORS;\n }\n\n if (url) {\n const { protocol, hostname } = URL.parse(url);\n tags = [...tags, `iframe[src^=\"${protocol}//${hostname}\"]`];\n }\n\n $(tags.join(','), article).addClass(KEEP_CLASS);\n\n return $;\n}\n","import { STRIP_OUTPUT_TAGS, KEEP_CLASS } from './constants';\n\nexport default function stripJunkTags(article, $, tags = []) {\n if (tags.length === 0) {\n tags = STRIP_OUTPUT_TAGS;\n }\n\n // Remove matching elements, but ignore\n // any element with a class of mercury-parser-keep\n $(tags.join(','), article)\n .not(`.${KEEP_CLASS}`)\n .remove();\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// H1 tags are typically the article title, which should be extracted\n// by the title extractor instead. If there's less than 3 of them (<3),\n// strip them. Otherwise, turn 'em into H2s.\nexport default function cleanHOnes(article, $) {\n const $hOnes = $('h1', article);\n\n if ($hOnes.length < 3) {\n $hOnes.each((index, node) => $(node).remove());\n } else {\n $hOnes.each((index, node) => {\n convertNodeTo($(node), $, 'h2');\n });\n }\n\n return $;\n}\n","import { getAttrs, setAttrs } from 'utils/dom';\n\nimport { WHITELIST_ATTRS_RE, KEEP_CLASS } from './constants';\n\nfunction removeAllButWhitelist($article, $) {\n $article.find('*').each((index, node) => {\n const attrs = getAttrs(node);\n\n setAttrs(\n node,\n Reflect.ownKeys(attrs).reduce((acc, attr) => {\n if (WHITELIST_ATTRS_RE.test(attr)) {\n return { ...acc, [attr]: attrs[attr] };\n }\n\n return acc;\n }, {})\n );\n });\n\n // Remove the mercury-parser-keep class from result\n $(`.${KEEP_CLASS}`, $article).removeClass(KEEP_CLASS);\n\n return $article;\n}\n\n// Remove attributes like style or align\nexport default function cleanAttributes($article, $) {\n // Grabbing the parent because at this point\n // $article will be wrapped in a div which will\n // have a score set on it.\n return removeAllButWhitelist(\n $article.parent().length ? $article.parent() : $article,\n $\n );\n}\n","export default function removeEmpty($article, $) {\n $article.find('p').each((index, p) => {\n const $p = $(p);\n if ($p.find('iframe, img').length === 0 && $p.text().trim() === '')\n $p.remove();\n });\n\n return $;\n}\n","// // CONTENT FETCHING CONSTANTS ////\n\n// A list of strings that can be considered unlikely candidates when\n// extracting content from a resource. These strings are joined together\n// and then tested for existence using re:test, so may contain simple,\n// non-pipe style regular expression queries if necessary.\nexport const UNLIKELY_CANDIDATES_BLACKLIST = [\n 'ad-break',\n 'adbox',\n 'advert',\n 'addthis',\n 'agegate',\n 'aux',\n 'blogger-labels',\n 'combx',\n 'comment',\n 'conversation',\n 'disqus',\n 'entry-unrelated',\n 'extra',\n 'foot',\n 'form',\n 'header',\n 'hidden',\n 'loader',\n 'login', // Note: This can hit 'blogindex'.\n 'menu',\n 'meta',\n 'nav',\n 'pager',\n 'pagination',\n 'predicta', // readwriteweb inline ad box\n 'presence_control_external', // lifehacker.com container full of false positives\n 'popup',\n 'printfriendly',\n 'related',\n 'remove',\n 'remark',\n 'rss',\n 'share',\n 'shoutbox',\n 'sidebar',\n 'sociable',\n 'sponsor',\n 'tools',\n];\n\n// A list of strings that can be considered LIKELY candidates when\n// extracting content from a resource. Essentially, the inverse of the\n// blacklist above - if something matches both blacklist and whitelist,\n// it is kept. This is useful, for example, if something has a className\n// of \"rss-content entry-content\". It matched 'rss', so it would normally\n// be removed, however, it's also the entry content, so it should be left\n// alone.\n//\n// These strings are joined together and then tested for existence using\n// re:test, so may contain simple, non-pipe style regular expression queries\n// if necessary.\nexport const UNLIKELY_CANDIDATES_WHITELIST = [\n 'and',\n 'article',\n 'body',\n 'blogindex',\n 'column',\n 'content',\n 'entry-content-asset',\n 'format', // misuse of form\n 'hfeed',\n 'hentry',\n 'hatom',\n 'main',\n 'page',\n 'posts',\n 'shadow',\n];\n\n// A list of tags which, if found inside, should cause a <div /> to NOT\n// be turned into a paragraph tag. Shallow div tags without these elements\n// should be turned into <p /> tags.\nexport const DIV_TO_P_BLOCK_TAGS = [\n 'a',\n 'blockquote',\n 'dl',\n 'div',\n 'img',\n 'p',\n 'pre',\n 'table',\n].join(',');\n\n// A list of tags that should be ignored when trying to find the top candidate\n// for a document.\nexport const NON_TOP_CANDIDATE_TAGS = [\n 'br',\n 'b',\n 'i',\n 'label',\n 'hr',\n 'area',\n 'base',\n 'basefont',\n 'input',\n 'img',\n 'link',\n 'meta',\n];\n\nexport const NON_TOP_CANDIDATE_TAGS_RE = new RegExp(\n `^(${NON_TOP_CANDIDATE_TAGS.join('|')})$`,\n 'i'\n);\n\n// A list of selectors that specify, very clearly, either hNews or other\n// very content-specific style content, like Blogger templates.\n// More examples here: http://microformats.org/wiki/blog-post-formats\nexport const HNEWS_CONTENT_SELECTORS = [\n ['.hentry', '.entry-content'],\n ['entry', '.entry-content'],\n ['.entry', '.entry_content'],\n ['.post', '.postbody'],\n ['.post', '.post_body'],\n ['.post', '.post-body'],\n];\n\nexport const PHOTO_HINTS = ['figure', 'photo', 'image', 'caption'];\nexport const PHOTO_HINTS_RE = new RegExp(PHOTO_HINTS.join('|'), 'i');\n\n// A list of strings that denote a positive scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const POSITIVE_SCORE_HINTS = [\n 'article',\n 'articlecontent',\n 'instapaper_body',\n 'blog',\n 'body',\n 'content',\n 'entry-content-asset',\n 'entry',\n 'hentry',\n 'main',\n 'Normal',\n 'page',\n 'pagination',\n 'permalink',\n 'post',\n 'story',\n 'text',\n '[-_]copy', // usatoday\n '\\\\Bcopy',\n];\n\n// The above list, joined into a matching regular expression\nexport const POSITIVE_SCORE_RE = new RegExp(\n POSITIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Readability publisher-specific guidelines\nexport const READABILITY_ASSET = new RegExp('entry-content-asset', 'i');\n\n// A list of strings that denote a negative scoring for this content as being\n// an article container. Checked against className and id.\n//\n// TODO: Perhaps have these scale based on their odds of being quality?\nexport const NEGATIVE_SCORE_HINTS = [\n 'adbox',\n 'advert',\n 'author',\n 'bio',\n 'bookmark',\n 'bottom',\n 'byline',\n 'clear',\n 'com-',\n 'combx',\n 'comment',\n 'comment\\\\B',\n 'contact',\n 'copy',\n 'credit',\n 'crumb',\n 'date',\n 'deck',\n 'excerpt',\n 'featured', // tnr.com has a featured_content which throws us off\n 'foot',\n 'footer',\n 'footnote',\n 'graf',\n 'head',\n 'info',\n 'infotext', // newscientist.com copyright\n 'instapaper_ignore',\n 'jump',\n 'linebreak',\n 'link',\n 'masthead',\n 'media',\n 'meta',\n 'modal',\n 'outbrain', // slate.com junk\n 'promo',\n 'pr_', // autoblog - press release\n 'related',\n 'respond',\n 'roundcontent', // lifehacker restricted content warning\n 'scroll',\n 'secondary',\n 'share',\n 'shopping',\n 'shoutbox',\n 'side',\n 'sidebar',\n 'sponsor',\n 'stamp',\n 'sub',\n 'summary',\n 'tags',\n 'tools',\n 'widget',\n];\n// The above list, joined into a matching regular expression\nexport const NEGATIVE_SCORE_RE = new RegExp(\n NEGATIVE_SCORE_HINTS.join('|'),\n 'i'\n);\n\n// Match a digit. Pretty clear.\nexport const DIGIT_RE = new RegExp('[0-9]');\n\n// Match 2 or more consecutive <br> tags\nexport const BR_TAGS_RE = new RegExp('(<br[^>]*>[ \\n\\r\\t]*){2,}', 'i');\n\n// Match 1 BR tag.\nexport const BR_TAG_RE = new RegExp('<br[^>]*>', 'i');\n\n// A list of all of the block level tags known in HTML5 and below. Taken from\n// http://bit.ly/qneNIT\nexport const BLOCK_LEVEL_TAGS = [\n 'article',\n 'aside',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'col',\n 'colgroup',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'embed',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'hr',\n 'li',\n 'map',\n 'object',\n 'ol',\n 'output',\n 'p',\n 'pre',\n 'progress',\n 'section',\n 'table',\n 'tbody',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n 'ul',\n 'video',\n];\nexport const BLOCK_LEVEL_TAGS_RE = new RegExp(\n `^(${BLOCK_LEVEL_TAGS.join('|')})$`,\n 'i'\n);\n\n// The removal is implemented as a blacklist and whitelist, this test finds\n// blacklisted elements that aren't whitelisted. We do this all in one\n// expression-both because it's only one pass, and because this skips the\n// serialization for whitelisted nodes.\nconst candidatesBlacklist = UNLIKELY_CANDIDATES_BLACKLIST.join('|');\nexport const CANDIDATES_BLACKLIST = new RegExp(candidatesBlacklist, 'i');\n\nconst candidatesWhitelist = UNLIKELY_CANDIDATES_WHITELIST.join('|');\nexport const CANDIDATES_WHITELIST = new RegExp(candidatesWhitelist, 'i');\n\nexport const UNLIKELY_RE = new RegExp(\n `!(${candidatesWhitelist})|(${candidatesBlacklist})`,\n 'i'\n);\n\nexport const PARAGRAPH_SCORE_TAGS = new RegExp('^(p|li|span|pre)$', 'i');\nexport const CHILD_CONTENT_TAGS = new RegExp('^(td|blockquote|ol|ul|dl)$', 'i');\nexport const BAD_TAGS = new RegExp('^(address|form)$', 'i');\n\nexport const HTML_OR_BODY_RE = new RegExp('^(html|body)$', 'i');\n","import {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PHOTO_HINTS_RE,\n READABILITY_ASSET,\n} from './constants';\n\n// Get the score of a node based on its className and id.\nexport default function getWeight(node) {\n const classes = node.attr('class');\n const id = node.attr('id');\n let score = 0;\n\n if (id) {\n // if id exists, try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(id)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(id)) {\n score -= 25;\n }\n }\n\n if (classes) {\n if (score === 0) {\n // if classes exist and id did not contribute to score\n // try to score on both positive and negative\n if (POSITIVE_SCORE_RE.test(classes)) {\n score += 25;\n }\n if (NEGATIVE_SCORE_RE.test(classes)) {\n score -= 25;\n }\n }\n\n // even if score has been set by id, add score for\n // possible photo matches\n // \"try to keep photos if we can\"\n if (PHOTO_HINTS_RE.test(classes)) {\n score += 10;\n }\n\n // add 25 if class matches entry-content-asset,\n // a class apparently instructed for use in the\n // Readability publisher guidelines\n // https://www.readability.com/developers/guidelines\n if (READABILITY_ASSET.test(classes)) {\n score += 25;\n }\n }\n\n return score;\n}\n","// returns the score of a node based on\n// the node's score attribute\n// returns null if no score set\nexport default function getScore($node) {\n return parseFloat($node.attr('score')) || null;\n}\n","// return 1 for every comma in text\nexport default function scoreCommas(text) {\n return (text.match(/,/g) || []).length;\n}\n","const idkRe = new RegExp('^(p|pre)$', 'i');\n\nexport default function scoreLength(textLength, tagName = 'p') {\n const chunks = textLength / 50;\n\n if (chunks > 0) {\n let lengthBonus;\n\n // No idea why p or pre are being tamped down here\n // but just following the source for now\n // Not even sure why tagName is included here,\n // since this is only being called from the context\n // of scoreParagraph\n if (idkRe.test(tagName)) {\n lengthBonus = chunks - 2;\n } else {\n lengthBonus = chunks - 1.25;\n }\n\n return Math.min(Math.max(lengthBonus, 0), 3);\n }\n\n return 0;\n}\n","import { scoreCommas, scoreLength } from './index';\n\n// Score a paragraph using various methods. Things like number of\n// commas, etc. Higher is better.\nexport default function scoreParagraph(node) {\n let score = 1;\n const text = node.text().trim();\n const textLength = text.length;\n\n // If this paragraph is less than 25 characters, don't count it.\n if (textLength < 25) {\n return 0;\n }\n\n // Add points for any commas within this paragraph\n score += scoreCommas(text);\n\n // For every 50 characters in this paragraph, add another point. Up\n // to 3 points.\n score += scoreLength(textLength);\n\n // Articles can end with short paragraphs when people are being clever\n // but they can also end with short paragraphs setting up lists of junk\n // that we strip. This negative tweaks junk setup paragraphs just below\n // the cutoff threshold.\n if (text.slice(-1) === ':') {\n score -= 1;\n }\n\n return score;\n}\n","export default function setScore($node, $, score) {\n $node.attr('score', score);\n return $node;\n}\n","import { getOrInitScore, setScore } from './index';\n\nexport default function addScore($node, $, amount) {\n try {\n const score = getOrInitScore($node, $) + amount;\n setScore($node, $, score);\n } catch (e) {\n // Ignoring; error occurs in scoreNode\n }\n\n return $node;\n}\n","import { addScore } from './index';\n\n// Adds 1/4 of a child's score to its parent\nexport default function addToParent(node, $, score) {\n const parent = node.parent();\n if (parent) {\n addScore(parent, $, score * 0.25);\n }\n\n return node;\n}\n","import { getScore, scoreNode, getWeight, addToParent } from './index';\n\n// gets and returns the score if it exists\n// if not, initializes a score based on\n// the node's tag type\nexport default function getOrInitScore($node, $, weightNodes = true) {\n let score = getScore($node);\n\n if (score) {\n return score;\n }\n\n score = scoreNode($node);\n\n if (weightNodes) {\n score += getWeight($node);\n }\n\n addToParent($node, $, score);\n\n return score;\n}\n","import { scoreParagraph } from './index';\nimport {\n PARAGRAPH_SCORE_TAGS,\n CHILD_CONTENT_TAGS,\n BAD_TAGS,\n} from './constants';\n\n// Score an individual node. Has some smarts for paragraphs, otherwise\n// just scores based on tag.\nexport default function scoreNode($node) {\n const { tagName } = $node.get(0);\n\n // TODO: Consider ordering by most likely.\n // E.g., if divs are a more common tag on a page,\n // Could save doing that regex test on every node – AP\n if (PARAGRAPH_SCORE_TAGS.test(tagName)) {\n return scoreParagraph($node);\n }\n if (tagName.toLowerCase() === 'div') {\n return 5;\n }\n if (CHILD_CONTENT_TAGS.test(tagName)) {\n return 3;\n }\n if (BAD_TAGS.test(tagName)) {\n return -3;\n }\n if (tagName.toLowerCase() === 'th') {\n return -5;\n }\n\n return 0;\n}\n","import { convertNodeTo } from 'utils/dom';\n\nimport { HNEWS_CONTENT_SELECTORS } from './constants';\nimport { scoreNode, setScore, getOrInitScore, addScore } from './index';\n\nfunction convertSpans($node, $) {\n if ($node.get(0)) {\n const { tagName } = $node.get(0);\n\n if (tagName === 'span') {\n // convert spans to divs\n convertNodeTo($node, $, 'div');\n }\n }\n}\n\nfunction addScoreTo($node, $, score) {\n if ($node) {\n convertSpans($node, $);\n addScore($node, $, score);\n }\n}\n\nfunction scorePs($, weightNodes) {\n $('p, pre')\n .not('[score]')\n .each((index, node) => {\n // The raw score for this paragraph, before we add any parent/child\n // scores.\n let $node = $(node);\n $node = setScore($node, $, getOrInitScore($node, $, weightNodes));\n\n const $parent = $node.parent();\n const rawScore = scoreNode($node);\n\n addScoreTo($parent, $, rawScore, weightNodes);\n if ($parent) {\n // Add half of the individual content score to the\n // grandparent\n addScoreTo($parent.parent(), $, rawScore / 2, weightNodes);\n }\n });\n\n return $;\n}\n\n// score content. Parents get the full value of their children's\n// content score, grandparents half\nexport default function scoreContent($, weightNodes = true) {\n // First, look for special hNews based selectors and give them a big\n // boost, if they exist\n HNEWS_CONTENT_SELECTORS.forEach(([parentSelector, childSelector]) => {\n $(`${parentSelector} ${childSelector}`).each((index, node) => {\n addScore($(node).parent(parentSelector), $, 80);\n });\n });\n\n // Doubling this again\n // Previous solution caused a bug\n // in which parents weren't retaining\n // scores. This is not ideal, and\n // should be fixed.\n scorePs($, weightNodes);\n scorePs($, weightNodes);\n\n return $;\n}\n","import { textLength, linkDensity } from 'utils/dom';\nimport { hasSentenceEnd } from 'utils/text';\n\nimport { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\n\n// Now that we have a top_candidate, look through the siblings of\n// it to see if any of them are decently scored. If they are, they\n// may be split parts of the content (Like two divs, a preamble and\n// a body.) Example:\n// http://articles.latimes.com/2009/oct/14/business/fi-bigtvs14\nexport default function mergeSiblings($candidate, topScore, $) {\n if (!$candidate.parent().length) {\n return $candidate;\n }\n\n const siblingScoreThreshold = Math.max(10, topScore * 0.25);\n const wrappingDiv = $('<div></div>');\n\n $candidate\n .parent()\n .children()\n .each((index, sibling) => {\n const $sibling = $(sibling);\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(sibling.tagName)) {\n return null;\n }\n\n const siblingScore = getScore($sibling);\n if (siblingScore) {\n if ($sibling.get(0) === $candidate.get(0)) {\n wrappingDiv.append($sibling);\n } else {\n let contentBonus = 0;\n const density = linkDensity($sibling);\n\n // If sibling has a very low link density,\n // give it a small bonus\n if (density < 0.05) {\n contentBonus += 20;\n }\n\n // If sibling has a high link density,\n // give it a penalty\n if (density >= 0.5) {\n contentBonus -= 20;\n }\n\n // If sibling node has the same class as\n // candidate, give it a bonus\n if ($sibling.attr('class') === $candidate.attr('class')) {\n contentBonus += topScore * 0.2;\n }\n\n const newScore = siblingScore + contentBonus;\n\n if (newScore >= siblingScoreThreshold) {\n return wrappingDiv.append($sibling);\n }\n if (sibling.tagName === 'p') {\n const siblingContent = $sibling.text();\n const siblingContentLength = textLength(siblingContent);\n\n if (siblingContentLength > 80 && density < 0.25) {\n return wrappingDiv.append($sibling);\n }\n if (\n siblingContentLength <= 80 &&\n density === 0 &&\n hasSentenceEnd(siblingContent)\n ) {\n return wrappingDiv.append($sibling);\n }\n }\n }\n }\n\n return null;\n });\n\n if (\n wrappingDiv.children().length === 1 &&\n wrappingDiv\n .children()\n .first()\n .get(0) === $candidate.get(0)\n ) {\n return $candidate;\n }\n\n return wrappingDiv;\n}\n","import { NON_TOP_CANDIDATE_TAGS_RE } from './constants';\nimport { getScore } from './index';\nimport mergeSiblings from './merge-siblings';\n\n// After we've calculated scores, loop through all of the possible\n// candidate nodes we found and find the one with the highest score.\nexport default function findTopCandidate($) {\n let $candidate;\n let topScore = 0;\n\n $('[score]').each((index, node) => {\n // Ignore tags like BR, HR, etc\n if (NON_TOP_CANDIDATE_TAGS_RE.test(node.tagName)) {\n return;\n }\n\n const $node = $(node);\n const score = getScore($node);\n\n if (score > topScore) {\n topScore = score;\n $candidate = $node;\n }\n });\n\n // If we don't have a candidate, return the body\n // or whatever the first element is\n if (!$candidate) {\n return $('body') || $('*').first();\n }\n\n $candidate = mergeSiblings($candidate, topScore, $);\n\n return $candidate;\n}\n","// Scoring\nexport { default as getWeight } from './get-weight';\nexport { default as getScore } from './get-score';\nexport { default as scoreCommas } from './score-commas';\nexport { default as scoreLength } from './score-length';\nexport { default as scoreParagraph } from './score-paragraph';\nexport { default as setScore } from './set-score';\nexport { default as addScore } from './add-score';\nexport { default as addToParent } from './add-to-parent';\nexport { default as getOrInitScore } from './get-or-init-score';\nexport { default as scoreNode } from './score-node';\nexport { default as scoreContent } from './score-content';\nexport { default as findTopCandidate } from './find-top-candidate';\n","import {\n getScore,\n setScore,\n getOrInitScore,\n scoreCommas,\n} from 'extractors/generic/content/scoring';\n\nimport { CLEAN_CONDITIONALLY_TAGS, KEEP_CLASS } from './constants';\nimport { normalizeSpaces } from '../text';\nimport { linkDensity } from './index';\n\nfunction removeUnlessContent($node, $, weight) {\n // Explicitly save entry-content-asset tags, which are\n // noted as valuable in the Publisher guidelines. For now\n // this works everywhere. We may want to consider making\n // this less of a sure-thing later.\n if ($node.hasClass('entry-content-asset')) {\n return;\n }\n\n const content = normalizeSpaces($node.text());\n\n if (scoreCommas(content) < 10) {\n const pCount = $('p', $node).length;\n const inputCount = $('input', $node).length;\n\n // Looks like a form, too many inputs.\n if (inputCount > pCount / 3) {\n $node.remove();\n return;\n }\n\n const contentLength = content.length;\n const imgCount = $('img', $node).length;\n\n // Content is too short, and there are no images, so\n // this is probably junk content.\n if (contentLength < 25 && imgCount === 0) {\n $node.remove();\n return;\n }\n\n const density = linkDensity($node);\n\n // Too high of link density, is probably a menu or\n // something similar.\n // console.log(weight, density, contentLength)\n if (weight < 25 && density > 0.2 && contentLength > 75) {\n $node.remove();\n return;\n }\n\n // Too high of a link density, despite the score being\n // high.\n if (weight >= 25 && density > 0.5) {\n // Don't remove the node if it's a list and the\n // previous sibling starts with a colon though. That\n // means it's probably content.\n const tagName = $node.get(0).tagName.toLowerCase();\n const nodeIsList = tagName === 'ol' || tagName === 'ul';\n if (nodeIsList) {\n const previousNode = $node.prev();\n if (\n previousNode &&\n normalizeSpaces(previousNode.text()).slice(-1) === ':'\n ) {\n return;\n }\n }\n\n $node.remove();\n return;\n }\n\n const scriptCount = $('script', $node).length;\n\n // Too many script tags, not enough content.\n if (scriptCount > 0 && contentLength < 150) {\n $node.remove();\n }\n }\n}\n\n// Given an article, clean it of some superfluous content specified by\n// tags. Things like forms, ads, etc.\n//\n// Tags is an array of tag name's to search through. (like div, form,\n// etc)\n//\n// Return this same doc.\nexport default function cleanTags($article, $) {\n $(CLEAN_CONDITIONALLY_TAGS, $article).each((index, node) => {\n const $node = $(node);\n // If marked to keep, skip it\n if ($node.hasClass(KEEP_CLASS) || $node.find(`.${KEEP_CLASS}`).length > 0)\n return;\n\n let weight = getScore($node);\n if (!weight) {\n weight = getOrInitScore($node, $);\n setScore($node, $, weight);\n }\n\n // drop node if its weight is < 0\n if (weight < 0) {\n $node.remove();\n } else {\n // deteremine if node seems like content\n removeUnlessContent($node, $, weight);\n }\n });\n\n return $;\n}\n","import { getWeight } from 'extractors/generic/content/scoring';\n\nimport { HEADER_TAG_LIST } from './constants';\nimport { normalizeSpaces } from '../text';\n\nexport default function cleanHeaders($article, $, title = '') {\n $(HEADER_TAG_LIST, $article).each((index, header) => {\n const $header = $(header);\n // Remove any headers that appear before all other p tags in the\n // document. This probably means that it was part of the title, a\n // subtitle or something else extraneous like a datestamp or byline,\n // all of which should be handled by other metadata handling.\n if ($($header, $article).prevAll('p').length === 0) {\n return $header.remove();\n }\n\n // Remove any headers that match the title exactly.\n if (normalizeSpaces($(header).text()) === title) {\n return $header.remove();\n }\n\n // If this header has a negative weight, it's probably junk.\n // Get rid of it.\n if (getWeight($(header)) < 0) {\n return $header.remove();\n }\n\n return $header;\n });\n\n return $;\n}\n","import { convertNodeTo } from 'utils/dom';\n\n// Rewrite the tag name to div if it's a top level node like body or\n// html to avoid later complications with multiple body tags.\nexport default function rewriteTopLevel(article, $) {\n // I'm not using context here because\n // it's problematic when converting the\n // top-level/root node - AP\n $ = convertNodeTo($('html'), $, 'div');\n $ = convertNodeTo($('body'), $, 'div');\n\n return $;\n}\n","import URL from 'url';\n\nimport { getAttrs, setAttr } from 'utils/dom';\n\nfunction absolutize($, rootUrl, attr) {\n const baseUrl = $('base').attr('href');\n\n $(`[${attr}]`).each((_, node) => {\n const attrs = getAttrs(node);\n const url = attrs[attr];\n if (!url) return;\n const absoluteUrl = URL.resolve(baseUrl || rootUrl, url);\n\n setAttr(node, attr, absoluteUrl);\n });\n}\n\nfunction absolutizeSet($, rootUrl, $content) {\n $('[srcset]', $content).each((_, node) => {\n const attrs = getAttrs(node);\n const urlSet = attrs.srcset;\n\n if (urlSet) {\n // a comma should be considered part of the candidate URL unless preceded by a descriptor\n // descriptors can only contain positive numbers followed immediately by either 'w' or 'x'\n // space characters inside the URL should be encoded (%20 or +)\n const candidates = urlSet.match(\n /(?:\\s*)(\\S+(?:\\s*[\\d.]+[wx])?)(?:\\s*,\\s*)?/g\n );\n if (!candidates) return;\n const absoluteCandidates = candidates.map(candidate => {\n // a candidate URL cannot start or end with a comma\n // descriptors are separated from the URLs by unescaped whitespace\n const parts = candidate\n .trim()\n .replace(/,$/, '')\n .split(/\\s+/);\n parts[0] = URL.resolve(rootUrl, parts[0]);\n return parts.join(' ');\n });\n const absoluteUrlSet = [...new Set(absoluteCandidates)].join(', ');\n setAttr(node, 'srcset', absoluteUrlSet);\n }\n });\n}\n\nexport default function makeLinksAbsolute($content, $, url) {\n ['href', 'src'].forEach(attr => absolutize($, url, attr));\n absolutizeSet($, url, $content);\n\n return $content;\n}\n","export function textLength(text) {\n return text.trim().replace(/\\s+/g, ' ').length;\n}\n\n// Determines what percentage of the text\n// in a node is link text\n// Takes a node, returns a float\nexport function linkDensity($node) {\n const totalTextLength = textLength($node.text());\n\n const linkText = $node.find('a').text();\n const linkLength = textLength(linkText);\n\n if (totalTextLength > 0) {\n return linkLength / totalTextLength;\n }\n if (totalTextLength === 0 && linkLength > 0) {\n return 1;\n }\n\n return 0;\n}\n","import { stripTags } from 'utils/dom';\n\n// Given a node type to search for, and a list of meta tag names to\n// search for, find a meta tag associated.\nexport default function extractFromMeta(\n $,\n metaNames,\n cachedNames,\n cleanTags = true\n) {\n const foundNames = metaNames.filter(name => cachedNames.indexOf(name) !== -1);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const name of foundNames) {\n const type = 'name';\n const value = 'value';\n\n const nodes = $(`meta[${type}=\"${name}\"]`);\n\n // Get the unique value of every matching node, in case there\n // are two meta tags with the same name and value.\n // Remove empty values.\n const values = nodes\n .map((index, node) => $(node).attr(value))\n .toArray()\n .filter(text => text !== '');\n\n // If we have more than one value for the same name, we have a\n // conflict and can't trust any of them. Skip this name. If we have\n // zero, that means our meta tags had no values. Skip this name\n // also.\n if (values.length === 1) {\n let metaValue;\n // Meta values that contain HTML should be stripped, as they\n // weren't subject to cleaning previously.\n if (cleanTags) {\n metaValue = stripTags(values[0], $);\n } else {\n [metaValue] = values;\n }\n\n return metaValue;\n }\n }\n\n // If nothing is found, return null\n return null;\n}\n","import { withinComment } from 'utils/dom';\n\nfunction isGoodNode($node, maxChildren) {\n // If it has a number of children, it's more likely a container\n // element. Skip it.\n if ($node.children().length > maxChildren) {\n return false;\n }\n // If it looks to be within a comment, skip it.\n if (withinComment($node)) {\n return false;\n }\n\n return true;\n}\n\n// Given a a list of selectors find content that may\n// be extractable from the document. This is for flat\n// meta-information, like author, title, date published, etc.\nexport default function extractFromSelectors(\n $,\n selectors,\n maxChildren = 1,\n textOnly = true\n) {\n // eslint-disable-next-line no-restricted-syntax\n for (const selector of selectors) {\n const nodes = $(selector);\n\n // If we didn't get exactly one of this selector, this may be\n // a list of articles or comments. Skip it.\n if (nodes.length === 1) {\n const $node = $(nodes[0]);\n\n if (isGoodNode($node, maxChildren)) {\n let content;\n if (textOnly) {\n content = $node.text();\n } else {\n content = $node.html();\n }\n\n if (content) {\n return content;\n }\n }\n }\n }\n\n return null;\n}\n","// strips all tags from a string of text\nexport default function stripTags(text, $) {\n // Wrapping text in html element prevents errors when text\n // has no html\n const cleanText = $(`<span>${text}</span>`).text();\n return cleanText === '' ? text : cleanText;\n}\n","import { getAttrs } from 'utils/dom';\n\nexport default function withinComment($node) {\n const parents = $node.parents().toArray();\n const commentParent = parents.find(parent => {\n const attrs = getAttrs(parent);\n const { class: nodeClass, id } = attrs;\n const classAndId = `${nodeClass} ${id}`;\n return classAndId.includes('comment');\n });\n\n return commentParent !== undefined;\n}\n","// Given a node, determine if it's article-like enough to return\n// param: node (a cheerio node)\n// return: boolean\n\nexport default function nodeIsSufficient($node) {\n return $node.text().trim().length >= 100;\n}\n","import { IS_WP_SELECTOR } from './constants';\n\nexport default function isWordpress($) {\n return $(IS_WP_SELECTOR).length > 0;\n}\n","export default function getAttrs(node) {\n const { attribs, attributes } = node;\n\n if (!attribs && attributes) {\n const attrs = Reflect.ownKeys(attributes).reduce((acc, index) => {\n const attr = attributes[index];\n\n if (!attr.name || !attr.value) return acc;\n\n acc[attr.name] = attr.value;\n return acc;\n }, {});\n return attrs;\n }\n\n return attribs;\n}\n","export default function setAttr(node, attr, val) {\n if (node.attribs) {\n node.attribs[attr] = val;\n } else if (node.attributes) {\n node.setAttribute(attr, val);\n }\n\n return node;\n}\n","export default function setAttrs(node, attrs) {\n if (node.attribs) {\n node.attribs = attrs;\n } else if (node.attributes) {\n while (node.attributes.length > 0) {\n node.removeAttribute(node.attributes[0].name);\n }\n\n Reflect.ownKeys(attrs).forEach(key => {\n node.setAttribute(key, attrs[key]);\n });\n }\n\n return node;\n}\n","// DOM manipulation\nexport {\n default as stripUnlikelyCandidates,\n} from './strip-unlikely-candidates';\nexport { default as brsToPs } from './brs-to-ps';\nexport { default as paragraphize } from './paragraphize';\nexport { default as convertToParagraphs } from './convert-to-paragraphs';\nexport { default as convertNodeTo } from './convert-node-to';\nexport { default as cleanImages } from './clean-images';\nexport { default as markToKeep } from './mark-to-keep';\nexport { default as stripJunkTags } from './strip-junk-tags';\nexport { default as cleanHOnes } from './clean-h-ones';\nexport { default as cleanAttributes } from './clean-attributes';\nexport { default as removeEmpty } from './remove-empty';\nexport { default as cleanTags } from './clean-tags';\nexport { default as cleanHeaders } from './clean-headers';\nexport { default as rewriteTopLevel } from './rewrite-top-level';\nexport { default as makeLinksAbsolute } from './make-links-absolute';\nexport { textLength, linkDensity } from './link-density';\nexport { default as extractFromMeta } from './extract-from-meta';\nexport { default as extractFromSelectors } from './extract-from-selectors';\nexport { default as stripTags } from './strip-tags';\nexport { default as withinComment } from './within-comment';\nexport { default as nodeIsSufficient } from './node-is-sufficient';\nexport { default as isWordpress } from './is-wordpress';\nexport { default as getAttrs } from './get-attrs';\nexport { default as setAttr } from './set-attr';\nexport { default as setAttrs } from './set-attrs';\n","export const IS_LINK = new RegExp('https?://', 'i');\nconst IMAGE_RE = '.(png|gif|jpe?g)';\nexport const IS_IMAGE = new RegExp(`${IMAGE_RE}`, 'i');\nexport const IS_SRCSET = new RegExp(\n `${IMAGE_RE}(\\\\?\\\\S+)?(\\\\s*[\\\\d.]+[wx])`,\n 'i'\n);\n\nexport const TAGS_TO_REMOVE = ['script', 'style', 'form'].join(',');\n","import { getAttrs } from 'utils/dom';\n\nimport { IS_LINK, IS_IMAGE, IS_SRCSET } from './constants';\n\n// Convert all instances of images with potentially\n// lazy loaded images into normal images.\n// Many sites will have img tags with no source, or an image tag with a src\n// attribute that a is a placeholer. We need to be able to properly fill in\n// the src attribute so the images are no longer lazy loaded.\nexport default function convertLazyLoadedImages($) {\n const extractSrcFromJSON = str => {\n try {\n const { src } = JSON.parse(str);\n if (typeof src === 'string') return src;\n } catch (_) {\n return false;\n }\n\n return false;\n };\n\n $('img').each((_, img) => {\n const attrs = getAttrs(img);\n\n Reflect.ownKeys(attrs).forEach(attr => {\n const value = attrs[attr];\n\n if (attr !== 'srcset' && IS_LINK.test(value) && IS_SRCSET.test(value)) {\n $(img).attr('srcset', value);\n } else if (\n attr !== 'src' &&\n attr !== 'srcset' &&\n IS_LINK.test(value) &&\n IS_IMAGE.test(value)\n ) {\n // Is the value a JSON object? If so, we should attempt to extract the image src from the data.\n const existingSrc = extractSrcFromJSON(value);\n if (existingSrc) {\n $(img).attr('src', existingSrc);\n } else {\n $(img).attr('src', value);\n }\n }\n });\n });\n\n return $;\n}\n","import { TAGS_TO_REMOVE } from './constants';\n\nfunction isComment(index, node) {\n return node.type === 'comment';\n}\n\nfunction cleanComments($) {\n $.root()\n .find('*')\n .contents()\n .filter(isComment)\n .remove();\n\n return $;\n}\n\nexport default function clean($) {\n $(TAGS_TO_REMOVE).remove();\n\n $ = cleanComments($);\n return $;\n}\n","import cheerio from 'cheerio';\nimport iconv from 'iconv-lite';\n\nimport { getEncoding } from 'utils/text';\nimport { fetchResource } from './utils';\nimport { normalizeMetaTags, convertLazyLoadedImages, clean } from './utils/dom';\n\nconst Resource = {\n // Create a Resource.\n //\n // :param url: The URL for the document we should retrieve.\n // :param response: If set, use as the response rather than\n // attempting to fetch it ourselves. Expects a\n // string.\n // :param headers: Custom headers to be included in the request\n async create(url, preparedResponse, parsedUrl, headers = {}) {\n let result;\n\n if (preparedResponse) {\n const validResponse = {\n statusMessage: 'OK',\n statusCode: 200,\n headers: {\n 'content-type': 'text/html',\n 'content-length': 500,\n },\n };\n\n result = {\n body: preparedResponse,\n response: validResponse,\n alreadyDecoded: true,\n };\n } else {\n result = await fetchResource(url, parsedUrl, headers);\n }\n\n if (result.error) {\n result.failed = true;\n return result;\n }\n\n return this.generateDoc(result);\n },\n\n generateDoc({ body: content, response, alreadyDecoded = false }) {\n const { 'content-type': contentType = '' } = response.headers;\n\n // TODO: Implement is_text function from\n // https://github.com/ReadabilityHoldings/readability/blob/8dc89613241d04741ebd42fa9fa7df1b1d746303/readability/utils/text.py#L57\n if (!contentType.includes('html') && !contentType.includes('text')) {\n throw new Error('Content does not appear to be text.');\n }\n\n let $ = this.encodeDoc({ content, contentType, alreadyDecoded });\n\n if ($.root().children().length === 0) {\n throw new Error('No children, likely a bad parse.');\n }\n\n $ = normalizeMetaTags($);\n $ = convertLazyLoadedImages($);\n $ = clean($);\n\n return $;\n },\n\n encodeDoc({ content, contentType, alreadyDecoded = false }) {\n if (alreadyDecoded) {\n return cheerio.load(content);\n }\n\n const encoding = getEncoding(contentType);\n let decodedContent = iconv.decode(content, encoding);\n let $ = cheerio.load(decodedContent);\n // after first cheerio.load, check to see if encoding matches\n const contentTypeSelector = cheerio.browser\n ? 'meta[http-equiv=content-type]'\n : 'meta[http-equiv=content-type i]';\n const metaContentType =\n $(contentTypeSelector).attr('content') ||\n $('meta[charset]').attr('charset');\n const properEncoding = getEncoding(metaContentType);\n\n // if encodings in the header/body dont match, use the one in the body\n if (metaContentType && properEncoding !== encoding) {\n decodedContent = iconv.decode(content, properEncoding);\n $ = cheerio.load(decodedContent);\n }\n\n return $;\n },\n};\n\nexport default Resource;\n","export default function* range(start = 1, end = 1) {\n while (start <= end) {\n yield (start += 1);\n }\n}\n","// extremely simple url validation as a first step\nexport default function validateUrl({ hostname }) {\n // If this isn't a valid url, return an error message\n return !!hostname;\n}\n","const merge = (extractor, domains) =>\n domains.reduce((acc, domain) => {\n acc[domain] = extractor;\n return acc;\n }, {});\n\nexport default function mergeSupportedDomains(extractor) {\n return extractor.supportedDomains\n ? merge(extractor, [extractor.domain, ...extractor.supportedDomains])\n : merge(extractor, [extractor.domain]);\n}\n","import mergeSupportedDomains from '../utils/merge-supported-domains';\n\nexport const apiExtractors = {};\n\nexport default function addExtractor(extractor) {\n if (!extractor || !extractor.domain) {\n return {\n error: true,\n message: 'Unable to add custom extractor. Invalid parameters.',\n };\n }\n\n Object.assign(apiExtractors, mergeSupportedDomains(extractor));\n\n return apiExtractors;\n}\n","export const BloggerExtractor = {\n domain: 'blogspot.com',\n content: {\n // Blogger is insane and does not load its content\n // initially in the page, but it's all there\n // in noscript\n selectors: ['.post-content noscript'],\n\n // Selectors to remove from the extracted content\n clean: [],\n\n // Convert the noscript tag to a div\n transforms: {\n noscript: 'div',\n },\n },\n\n author: {\n selectors: ['.post-author-name'],\n },\n\n title: {\n selectors: ['.post h2.title'],\n },\n\n date_published: {\n selectors: ['span.publishdate'],\n },\n};\n","export const NYMagExtractor = {\n domain: 'nymag.com',\n content: {\n // Order by most likely. Extractor will stop on first occurrence\n selectors: ['div.article-content', 'section.body', 'article.article'],\n\n // Selectors to remove from the extracted content\n clean: ['.ad', '.single-related-story'],\n\n // Object of tranformations to make on matched elements\n // Each key is the selector, each value is the tag to\n // transform to.\n // If a function is given, it should return a string\n // to convert to or nothing (in which case it will not perform\n // the transformation.\n transforms: {\n // Convert h1s to h2s\n h1: 'h2',\n\n // Convert lazy-loaded noscript images to figures\n noscript: ($node, $) => {\n const $children = $.browser ? $($node.text()) : $node.children();\n if (\n $children.length === 1 &&\n $children.get(0) !== undefined &&\n $children.get(0).tagName.toLowerCase() === 'img'\n ) {\n return 'figure';\n }\n\n return null;\n },\n },\n },\n\n title: {\n selectors: ['h1.lede-feature-title', 'h1.headline-primary', 'h1'],\n },\n\n author: {\n selectors: ['.by-authors', '.lede-feature-author'],\n },\n\n dek: {\n selectors: ['.lede-feature-teaser'],\n },\n\n date_published: {\n selectors: [\n ['time.article-timestamp[datetime]', 'datetime'],\n 'time.article-timestamp',\n ],\n },\n};\n","export const WikipediaExtractor = {\n domain: 'wikipedia.org',\n content: {\n selectors: ['#mw-content-text'],\n\n defaultCleaner: false,\n\n // transform top infobox to an image with caption\n transforms: {\n '.infobox img': $node => {\n const $parent = $node.parents('.infobox');\n // Only prepend the first image in .infobox\n if ($parent.children('img').length === 0) {\n $parent.prepend($node);\n }\n },\n '.infobox caption': 'figcaption',\n '.infobox': 'figure',\n },\n\n // Selectors to remove from the extracted content\n clean: [\n '.mw-editsection',\n 'figure tr, figure td, figure tbody',\n '#toc',\n '.navbox',\n ],\n },\n\n author: 'Wikipedia Contributors',\n\n title: {\n selectors: ['h2.title'],\n },\n\n date_published: {\n selectors: ['#footer-info-lastmod'],\n },\n};\n","export const TwitterExtractor = {\n domain: 'twitter.com',\n\n content: {\n transforms: {\n // We're transforming essentially the whole page here.\n // Twitter doesn't have nice selectors, so our initial\n // selector grabs the whole page, then we're re-writing\n // it to fit our needs before we clean it up.\n '.permalink[role=main]': ($node, $) => {\n const tweets = $node.find('.tweet');\n const $tweetContainer = $('<div id=\"TWEETS_GO_HERE\"></div>');\n $tweetContainer.append(tweets);\n $node.replaceWith($tweetContainer);\n },\n\n // Twitter wraps @ with s, which\n // renders as a strikethrough\n s: 'span',\n },\n\n selectors: ['.permalink[role=main]'],\n\n defaultCleaner: false,\n\n clean: ['.stream-item-footer', 'button', '.tweet-details-fixer'],\n },\n\n author: {\n selectors: ['.tweet.permalink-tweet .username'],\n },\n\n date_published: {\n selectors: [['.permalink-tweet ._timestamp[data-time-ms]', 'data-time-ms']],\n },\n};\n","export const NYTimesExtractor = {\n domain: 'www.nytimes.com',\n\n title: {\n selectors: [\n 'h1[data-testid=\"headline\"]',\n 'h1.g-headline',\n 'h1[itemprop=\"headline\"]',\n 'h1.headline',\n 'h1 .balancedHeadline',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.g-byline',\n '.byline',\n ['meta[name=\"byl\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['div.g-blocks', 'section[name=\"articleBody\"]', 'article#story'],\n\n transforms: {\n 'img.g-lazy': $node => {\n let src = $node.attr('src');\n const width = 640;\n\n src = src.replace('{{size}}', width);\n $node.attr('src', src);\n },\n },\n\n clean: [\n '.ad',\n 'header#story-header',\n '.story-body-1 .lede.video',\n '.visually-hidden',\n '#newsletter-promo',\n '.promo',\n '.comments-button',\n '.hidden',\n '.comments',\n '.supplemental',\n '.nocontent',\n '.story-footer-links',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[name=\"article:published\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: null,\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\nexport const TheAtlanticExtractor = {\n domain: 'www.theatlantic.com',\n title: {\n selectors: ['h1', '.c-article-header__hed'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], '.c-byline__author'],\n },\n\n content: {\n selectors: ['article', '.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.partner-box',\n '.callout',\n '.c-article-writer__image',\n '.c-article-writer__content',\n '.c-letters-cta__text',\n '.c-footer__logo',\n '.c-recirculation-link',\n '.twitter-tweet',\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n date_published: {\n selectors: [['time[itemprop=\"datePublished\"]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const NewYorkerExtractor = {\n domain: 'www.newyorker.com',\n title: {\n selectors: [\n 'h1[class^=\"content-header\"]',\n 'h1[class^=\"ArticleHeader__hed\"]',\n 'h1[class*=\"ContentHeaderHed\"]',\n ['meta[name=\"og:title\"]', 'value'],\n ],\n },\n\n author: {\n selectors: [\n 'article header div[class^=\"BylinesWrapper\"]',\n ['meta[name=\"article:author\"]', 'value'],\n 'div[class^=\"ArticleContributors\"] a[rel=\"author\"]',\n 'article header div[class*=\"Byline__multipleContributors\"]',\n ],\n },\n\n content: {\n selectors: [\n '.article__body',\n 'article.article.main-content',\n 'main[class^=\"Layout__content\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption__text': 'figcaption',\n '.caption__credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['footer[class^=\"ArticleFooter__footer\"]', 'aside'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'time.content-header__publish-date',\n ['meta[name=\"pubdate\"]', 'value'],\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n 'div[class^=\"ContentHeaderDek\"]',\n 'div.content-header__dek',\n 'h2[class^=\"ArticleHeader__dek\"]',\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WiredExtractor = {\n domain: 'www.wired.com',\n title: {\n selectors: [\n 'h1[data-testId=\"ContentHeaderHed\"]',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n 'a[rel=\"author\"]',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'article.article.main-content',\n 'article.content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.visually-hidden', 'figcaption img.photo', '.alert-message'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const MSNExtractor = {\n domain: 'www.msn.com',\n title: {\n selectors: [\n 'h1',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.authorname-txt',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n 'div.richtext',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['span.caption'],\n },\n\n date_published: {\n selectors: ['span.time'],\n },\n\n lead_image_url: {\n selectors: [],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const YahooExtractor = {\n domain: 'www.yahoo.com',\n title: {\n selectors: [\n 'header.canvas-header',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'span.provider-name',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n '.content-canvas',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.figure-caption'],\n },\n\n date_published: {\n selectors: [['time.date[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter dek selectors\n ],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BuzzfeedExtractor = {\n domain: 'www.buzzfeed.com',\n\n supportedDomains: ['www.buzzfeednews.com'],\n\n title: {\n selectors: [\n 'h1.embed-headline-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'a[data-action=\"user/username\"]',\n 'byline__author',\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n ['div[class^=\"featureimage_featureImageWrapper\"]', '.js-subbuzz-wrapper'],\n ['.js-subbuzz-wrapper'],\n ],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: 'b',\n\n 'div.longform_custom_header_media': $node => {\n if ($node.has('img') && $node.has('.longform_header_image_source')) {\n return 'figure';\n }\n\n return null;\n },\n\n 'figure.longform_custom_header_media .longform_header_image_source':\n 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.instapaper_ignore',\n '.suplist_list_hide .buzz_superlist_item .buzz_superlist_number_inline',\n '.share-box',\n '.print',\n '.js-inline-share-bar',\n '.js-ad-placement',\n ],\n },\n\n date_published: {\n selectors: [['time[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: ['.embed-headline-description'],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const WikiaExtractor = {\n domain: 'fandom.wikia.com',\n title: {\n selectors: [\n 'h1.entry-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n '.author vcard',\n '.fn',\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n '.grid-content',\n '.entry-content',\n // enter content selectors\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const LittleThingsExtractor = {\n domain: 'www.littlethings.com',\n title: {\n selectors: [\n 'h1[class*=\"PostHeader\"]',\n 'h1.post-title',\n // enter title selectors\n ],\n },\n\n author: {\n selectors: [\n 'div[class^=\"PostHeader__ScAuthorNameSection\"]',\n ['meta[name=\"author\"]', 'value'],\n // enter author selectors\n ],\n },\n\n content: {\n selectors: [\n // enter content selectors\n 'section[class*=\"PostMainArticle\"]',\n '.mainContentIntro',\n '.content-wrapper',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: [],\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n next_page_url: null,\n\n excerpt: null,\n};\n","export const PoliticoExtractor = {\n domain: 'www.politico.com',\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n ['div[itemprop=\"author\"] meta[itemprop=\"name\"]', 'value'],\n '.story-meta__authors .vcard',\n '.story-main-content .byline .vcard',\n ],\n },\n\n content: {\n selectors: [['.story-text'], '.story-main-content', '.story-core'],\n\n transforms: [],\n\n clean: ['figcaption', '.story-meta', '.ad'],\n },\n\n date_published: {\n selectors: [\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ['.story-meta__details time[datetime]', 'datetime'],\n ['.story-main-content .timestamp time[datetime]', 'datetime'],\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n};\n","export const DeadspinExtractor = {\n domain: 'deadspin.com',\n\n supportedDomains: [\n 'jezebel.com',\n 'lifehacker.com',\n 'kotaku.com',\n 'gizmodo.com',\n 'jalopnik.com',\n 'kinja.com',\n 'avclub.com',\n 'clickhole.com',\n 'splinternews.com',\n 'theonion.com',\n 'theroot.com',\n 'thetakeout.com',\n 'theinventory.com',\n ],\n\n title: {\n selectors: ['header h1', 'h1.headline'],\n },\n\n author: {\n selectors: ['a[data-ga*=\"Author\"]', '.author'],\n },\n\n content: {\n selectors: ['.js_post-content', '.post-content', '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'iframe.lazyload[data-recommend-id^=\"youtube://\"]': $node => {\n const youtubeId = $node.attr('id').split('youtube-')[1];\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.magnifier', '.lightbox'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time.updated[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const BroadwayWorldExtractor = {\n domain: 'www.broadwayworld.com',\n title: {\n selectors: ['h1[itemprop=headline]', 'h1.article-title'],\n },\n\n author: {\n selectors: ['span[itemprop=author]'],\n },\n\n content: {\n selectors: ['div[itemprop=articlebody]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['meta[itemprop=datePublished]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","// Rename CustomExtractor\n// to fit your publication\n// (e.g., NYTimesExtractor)\nexport const ApartmentTherapyExtractor = {\n domain: 'www.apartmenttherapy.com',\n title: {\n selectors: ['h1.headline'],\n },\n\n author: {\n selectors: ['.PostByline__name'],\n },\n\n content: {\n selectors: ['div.post__content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[data-render-react-id=\"images/LazyPicture\"]': ($node, $) => {\n const data = JSON.parse($node.attr('data-props'));\n const { src } = data.sources[0];\n const $img = $('<img />').attr('src', src);\n $node.replaceWith($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n\n date_published: {\n selectors: [['.PostByline__timestamp[datetime]', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: [],\n },\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const MediumExtractor = {\n domain: 'medium.com',\n\n title: {\n selectors: ['h1', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n content: {\n selectors: ['article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // Allow drop cap character.\n 'section span:first-of-type': $node => {\n const $text = $node.html();\n if ($text.length === 1 && /^[a-zA-Z()]+$/.test($text)) {\n $node.replaceWith($text);\n }\n },\n // Re-write lazy-loaded youtube videos\n iframe: $node => {\n const ytRe = /https:\\/\\/i.embed.ly\\/.+url=https:\\/\\/i\\.ytimg\\.com\\/vi\\/(\\w+)\\//;\n const thumb = decodeURIComponent($node.attr('data-thumbnail'));\n const $parent = $node.parents('figure');\n\n if (ytRe.test(thumb)) {\n const [_, youtubeId] = thumb.match(ytRe); // eslint-disable-line\n $node.attr('src', `https://www.youtube.com/embed/${youtubeId}`);\n const $caption = $parent.find('figcaption');\n $parent.empty().append([$node, $caption]);\n return;\n }\n\n // If we can't draw the YouTube preview, remove the figure.\n $parent.remove();\n },\n\n // rewrite figures to pull out image and caption, remove rest\n figure: $node => {\n // ignore if figure has an iframe\n if ($node.find('iframe').length > 0) return;\n\n const $img = $node.find('img').slice(-1)[0];\n const $caption = $node.find('figcaption');\n\n $node.empty().append([$img, $caption]);\n },\n\n // Remove any smaller images that did not get caught by the generic image\n // cleaner (author photo 48px, leading sentence images 79px, etc.).\n img: $node => {\n const width = parseInt($node.attr('width'), 10);\n if (width < 100) $node.remove();\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['span a', 'svg'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: null,\n\n next_page_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n excerpt: {\n selectors: [\n // enter selectors\n ],\n },\n};\n","export const WwwTmzComExtractor = {\n domain: 'www.tmz.com',\n\n title: {\n selectors: ['.post-title-breadcrumb', 'h1', '.headline'],\n },\n\n author: 'TMZ STAFF',\n\n date_published: {\n selectors: ['.article__published-at', '.article-posted-date'],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article__blocks', '.article-content', '.all-post-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.lightbox-link'],\n },\n};\n","export const WwwWashingtonpostComExtractor = {\n domain: 'www.washingtonpost.com',\n\n title: {\n selectors: ['h1', '#topper-headline-wrapper'],\n },\n\n author: {\n selectors: ['.pb-author-name'],\n },\n\n date_published: {\n selectors: [['.author-timestamp[itemprop=\"datePublished\"]', 'content']],\n },\n\n dek: {\n selectors: [],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.inline-content': $node => {\n if ($node.has('img,iframe,video').length > 0) {\n return 'figure';\n }\n\n $node.remove();\n return null;\n },\n '.pb-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.interstitial-link', '.newsletter-inline-unit'],\n },\n};\n","export const WwwHuffingtonpostComExtractor = {\n domain: 'www.huffingtonpost.com',\n\n title: {\n selectors: ['h1.headline__title'],\n },\n\n author: {\n selectors: ['span.author-card__details__name'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:modified_time\"]', 'value'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: ['h2.headline__subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry__body'],\n\n defaultCleaner: false,\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.pull-quote',\n '.tag-cloud',\n '.embed-asset',\n '.below-entry',\n '.entry-corrections',\n '#suggested-story',\n ],\n },\n};\n","export const NewrepublicComExtractor = {\n domain: 'newrepublic.com',\n\n title: {\n selectors: ['h1.article-headline'],\n },\n\n author: {\n selectors: ['span.AuthorList'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['h2.article-subhead'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['div.article-body']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['aside'],\n },\n};\n","export const MoneyCnnComExtractor = {\n domain: 'money.cnn.com',\n\n title: {\n selectors: ['.article-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], '.byline a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: ['#storytext h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#storytext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.inStoryHeading'],\n },\n};\n","export const WwwThevergeComExtractor = {\n domain: 'www.theverge.com',\n\n supportedDomains: ['www.polygon.com'],\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n // feature template multi-match\n ['.c-entry-hero .e-image', '.c-entry-intro', '.c-entry-content'],\n // regular post multi-match\n ['.e-image--hero', '.c-entry-content'],\n // feature template fallback\n '.l-wrapper .l-feature',\n // regular post fallback\n 'div.c-entry-content',\n ],\n\n // Transform lazy-loaded images\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'span';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.aside',\n 'img.c-dynamic-image', // images come from noscript transform\n ],\n },\n};\n","export const WwwCnnComExtractor = {\n domain: 'www.cnn.com',\n\n title: {\n selectors: ['h1.pg-headline', 'h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n // a more specific selector to grab the lead image and the body\n ['.media__video--thumbnail', '.zn-body-text'],\n // a fallback for the above\n '.zn-body-text',\n 'div[itemprop=\"articleBody\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.zn-body__paragraph, .el__leafmedia--sourced-paragraph': $node => {\n const $text = $node.html();\n if ($text) {\n return 'p';\n }\n\n return null;\n },\n\n // this transform cleans the short, all-link sections linking\n // to related content but not marked as such in any way.\n '.zn-body__paragraph': $node => {\n if ($node.has('a')) {\n if (\n $node.text().trim() ===\n $node\n .find('a')\n .text()\n .trim()\n ) {\n $node.remove();\n }\n }\n },\n\n '.media__video--thumbnail': 'figure',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwAolComExtractor = {\n domain: 'www.aol.com',\n\n title: {\n selectors: ['h1.p-article__title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['.p-article__byline__date'],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwYoutubeComExtractor = {\n domain: 'www.youtube.com',\n\n title: {\n selectors: [\n ['meta[name=\"title\"]', 'value'],\n '.watch-title',\n 'h1.watch-title-container',\n ],\n },\n\n author: {\n selectors: [['link[itemprop=\"name\"]', 'content'], '.yt-user-info'],\n },\n\n date_published: {\n selectors: [['meta[itemProp=\"datePublished\"]', 'value']],\n\n timezone: 'GMT',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: [\n '#player-container-outer',\n 'ytd-expandable-video-description-body-renderer #description',\n ['#player-api', '#description'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#player-api': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n $node.html(`\n <iframe src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allowfullscreen></iframe>`);\n },\n '#player-container-outer': ($node, $) => {\n const videoId = $('meta[itemProp=\"videoId\"]').attr('value');\n const description = $('meta[itemProp=\"description\"]').attr('value');\n $node.html(`\n <iframe src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allowfullscreen></iframe>\n <div><span>${description}</span></div>`);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwTheguardianComExtractor = {\n domain: 'www.theguardian.com',\n\n title: {\n selectors: ['h1', '.content__headline'],\n },\n\n author: {\n selectors: ['address[data-link-name=\"byline\"]', 'p.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['div[data-gu-name=\"standfirst\"]', '.content__standfirst'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#maincontent', '.content__article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.hide-on-mobile', '.inline-icon'],\n },\n};\n","export const WwwSbnationComExtractor = {\n domain: 'www.sbnation.com',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['p.c-entry-summary.p-dek', 'h2.c-entry-summary.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.c-entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwBloombergComExtractor = {\n domain: 'www.bloomberg.com',\n\n title: {\n selectors: [\n // normal articles\n '.lede-headline',\n\n // /graphics/ template\n 'h1.article-title',\n\n // /news/ template\n 'h1[class^=\"headline\"]',\n 'h1.lede-text-only__hed',\n ],\n },\n\n author: {\n selectors: [\n ['meta[name=\"parsely-author\"]', 'value'],\n '.byline-details__link',\n\n // /graphics/ template\n '.bydek',\n\n // /news/ template\n '.author',\n 'p[class*=\"author\"]',\n ],\n },\n\n date_published: {\n selectors: [\n ['time.published-at', 'datetime'],\n ['time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'value'],\n ['meta[name=\"parsely-pub-date\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"og:image\"]', 'content'],\n ],\n },\n\n content: {\n selectors: [\n '.article-body__content',\n '.body-content',\n\n // /graphics/ template\n ['section.copy-block'],\n\n // /news/ template\n '.body-copy',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.inline-newsletter', '.page-ad'],\n },\n};\n","export const WwwBustleComExtractor = {\n domain: 'www.bustle.com',\n\n title: {\n selectors: ['h1', 'h1.post-page__title'],\n },\n\n author: {\n selectors: ['a[href*=\"profile\"]', 'div.content-meta__author'],\n },\n\n date_published: {\n selectors: [['time', 'datetime']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.post-page__body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwNprOrgExtractor = {\n domain: 'www.npr.org',\n\n title: {\n selectors: ['h1', '.storytitle'],\n },\n\n author: {\n selectors: ['p.byline__name.byline__name--block'],\n },\n\n date_published: {\n selectors: [\n ['.dateblock time[datetime]', 'datetime'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[name=\"twitter:image:src\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['.storytext'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.bucketwrap.image': 'figure',\n '.bucketwrap.image .credit-caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['div.enlarge_measure'],\n },\n};\n","export const WwwRecodeNetExtractor = {\n domain: 'www.recode.net',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.c-entry-summary.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const QzComExtractor = {\n domain: 'qz.com',\n\n title: {\n selectors: ['article header h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time[datetime]', 'datetime'],\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[property=\"og:image\"]', 'content'],\n ['meta[name=\"twitter:image\"]', 'content'],\n ],\n },\n\n content: {\n selectors: ['#article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwDmagazineComExtractor = {\n domain: 'www.dmagazine.com',\n\n title: {\n selectors: ['h1.story__title'],\n },\n\n author: {\n selectors: ['.story__info .story__info__item:first-child'],\n },\n\n date_published: {\n selectors: [\n // enter selectors\n '.story__info',\n ],\n\n timezone: 'America/Chicago',\n format: 'MMMM D, YYYY h:mm a',\n },\n\n dek: {\n selectors: ['.story__subhead'],\n },\n\n lead_image_url: {\n selectors: [['article figure a:first-child', 'href']],\n },\n\n content: {\n selectors: ['.story__content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwReutersComExtractor = {\n domain: 'www.reuters.com',\n\n title: {\n selectors: ['h1[class*=\"ArticleHeader-headline-\"]', 'h1.article-headline'],\n },\n\n author: {\n selectors: [['meta[name=\"og:article:author\"]', 'value'], '.author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"og:article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.ArticleBodyWrapper', '#article-text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.article-subtitle': 'h4',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'div[class^=\"ArticleBody-byline-container-\"]',\n '#article-byline .author',\n ],\n },\n};\n","export const MashableComExtractor = {\n domain: 'mashable.com',\n\n title: {\n selectors: ['header h1', 'h1.title'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value'], 'span.author_name a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#article', 'section.article-content.blueprint'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.image-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwChicagotribuneComExtractor = {\n domain: 'www.chicagotribune.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['div.article_byline span:first-of-type'],\n },\n\n date_published: {\n selectors: ['time'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwVoxComExtractor = {\n domain: 'www.vox.com',\n\n title: {\n selectors: ['h1.c-page-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.p-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['figure.e-image--hero', '.c-entry-content'],\n '.c-entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure .e-image__image noscript': $node => {\n const imgHtml = $node.html();\n $node\n .parents('.e-image__image')\n .find('.c-dynamic-image')\n .replaceWith(imgHtml);\n },\n\n 'figure .e-image__meta': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const NewsNationalgeographicComExtractor = {\n domain: 'news.nationalgeographic.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: ['.byline-component__contributors b span'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n format: 'ddd MMM DD HH:mm:ss zz YYYY',\n timezone: 'EST',\n },\n\n dek: {\n selectors: ['.article__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['.parsys.content', '.__image-lead__'], '.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imgSrc = $node\n .find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(`<img class=\"__image-lead__\" src=\"${$imgSrc}\"/>`));\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote.pull-quote--large'],\n },\n};\n","export const WwwNationalgeographicComExtractor = {\n domain: 'www.nationalgeographic.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: ['.byline-component__contributors b span'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.Article__Headline__Desc', '.article__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'section.Article__Content',\n ['.parsys.content', '.__image-lead__'],\n '.content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.parsys.content': ($node, $) => {\n const $imageParent = $node.children().first();\n if ($imageParent.hasClass('imageGroup')) {\n const $dataAttrContainer = $imageParent\n .find('.media--medium__container')\n .children()\n .first();\n const imgPath1 = $dataAttrContainer.data('platform-image1-path');\n const imgPath2 = $dataAttrContainer.data('platform-image2-path');\n if (imgPath2 && imgPath1) {\n $node.prepend(\n $(`<div class=\"__image-lead__\">\n <img src=\"${imgPath1}\"/>\n <img src=\"${imgPath2}\"/>\n </div>`)\n );\n }\n } else {\n const $imgSrc = $node\n .find('.image.parbase.section')\n .find('.picturefill')\n .first()\n .data('platform-src');\n if ($imgSrc) {\n $node.prepend($(`<img class=\"__image-lead__\" src=\"${$imgSrc}\"/>`));\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pull-quote.pull-quote--small'],\n },\n};\n","export const WwwLatimesComExtractor = {\n domain: 'www.latimes.com',\n\n title: {\n selectors: ['h1.headline', '.trb_ar_hl'],\n },\n\n author: {\n selectors: [\n 'a[data-click=\"standardBylineAuthorName\"]',\n ['meta[name=\"author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.page-article-body', '.trb_ar_main'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.trb_ar_la': $node => {\n const $figure = $node.find('figure');\n $node.replaceWith($figure);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.trb_ar_by', '.trb_ar_cr'],\n },\n};\n","export const PagesixComExtractor = {\n domain: 'pagesix.com',\n\n supportedDomains: ['nypost.com'],\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['#featured-image-wrapper', '.entry-content'],\n '.entry-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '#featured-image-wrapper': 'figure',\n '.wp-caption-text': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.modal-trigger'],\n },\n};\n","export const ThefederalistpapersOrgExtractor = {\n domain: 'thefederalistpapers.org',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['.author-meta-title', 'main span.entry-author-name'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'header',\n '.article-sharing',\n '.after-article',\n '.type-commenting',\n '.more-posts',\n ['p[style]'],\n ],\n },\n};\n","export const WwwCbssportsComExtractor = {\n domain: 'www.cbssports.com',\n\n title: {\n selectors: ['.Article-headline', '.article-headline'],\n },\n\n author: {\n selectors: ['.ArticleAuthor-nameText', '.author-name'],\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']],\n timezone: 'UTC',\n },\n\n dek: {\n selectors: ['.Article-subline', '.article-subline'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMsnbcComExtractor = {\n domain: 'www.msnbc.com',\n\n title: {\n selectors: ['h1', 'h1.is-title-pane'],\n },\n\n author: {\n selectors: ['.byline-name', '.author'],\n },\n\n date_published: {\n selectors: [\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ['meta[name=\"DC.date.issued\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body__content', '.pane-node-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.pane-node-body': ($node, $) => {\n const [\n selector,\n attr,\n ] = WwwMsnbcComExtractor.lead_image_url.selectors[0];\n const src = $(selector).attr(attr);\n if (src) {\n $node.prepend(`<img src=\"${src}\" />`);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwThepoliticalinsiderComExtractor = {\n domain: 'www.thepoliticalinsider.com',\n\n title: {\n selectors: [['meta[name=\"sailthru.title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"sailthru.author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']],\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'], // enter selectors\n ],\n },\n\n content: {\n selectors: ['div#article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMentalflossComExtractor = {\n domain: 'www.mentalfloss.com',\n\n title: {\n selectors: [\n ['meta[name=\"og:title\"]', 'value'],\n 'h1.title',\n '.title-group',\n '.inner',\n ],\n },\n\n author: {\n selectors: [\n 'a[data-vars-label*=\"authors\"]',\n '.field-name-field-enhanced-authors',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n '.date-display-single',\n ],\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article main', 'div.field.field-name-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['small'],\n },\n};\n","export const AbcnewsGoComExtractor = {\n domain: 'abcnews.go.com',\n\n title: {\n selectors: ['div[class*=\"Article_main__body\"] h1', '.article-header h1'],\n },\n\n author: {\n selectors: ['.ShareByline span:nth-child(2)', '.authors'],\n clean: ['.author-overlay', '.by-text'],\n },\n\n date_published: {\n selectors: ['.ShareByline', '.timestamp'],\n format: 'MMMM D, YYYY h:mm a',\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.article-copy'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwNydailynewsComExtractor = {\n domain: 'www.nydailynews.com',\n\n title: {\n selectors: ['h1.headline', 'h1#ra-headline'],\n },\n\n author: {\n selectors: [\n '.article_byline span',\n ['meta[name=\"parsely-author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: ['time', ['meta[name=\"sailthru.date\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', 'article#ra-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['dl#ra-tags', '.ra-related', 'a.ra-editor', 'dl#ra-share-bottom'],\n },\n};\n","export const WwwCnbcComExtractor = {\n domain: 'www.cnbc.com',\n\n title: {\n selectors: ['h1.title', 'h1.ArticleHeader-headline'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div#article_body.content',\n 'div.story',\n 'div.ArticleBody-articleBody',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwPopsugarComExtractor = {\n domain: 'www.popsugar.com',\n\n title: {\n selectors: ['h2.post-title', 'title-text'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.share-copy-title', '.post-tags', '.reactions'],\n },\n};\n","export const ObserverComExtractor = {\n domain: 'observer.com',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['.author', '.vcard'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const PeopleComExtractor = {\n domain: 'people.com',\n\n title: {\n selectors: ['.article-header h1', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"sailthru.author\"]', 'value'], 'a.author.url.fn'],\n },\n\n date_published: {\n selectors: [\n '.mntl-attribution__item-date',\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n dek: {\n selectors: ['.article-header h2'],\n },\n\n content: {\n selectors: ['div[class^=\"loc article-content\"]', 'div.article-body__inner'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwUsmagazineComExtractor = {\n domain: 'www.usmagazine.com',\n\n title: {\n selectors: ['header h1'],\n },\n\n author: {\n selectors: ['a.author', 'a.article-byline.tracked-offpage'],\n },\n\n date_published: {\n timezone: 'America/New_York',\n\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.module-related'],\n },\n};\n","export const WwwRollingstoneComExtractor = {\n domain: 'www.rollingstone.com',\n\n title: {\n selectors: ['h1.l-article-header__row--title', 'h1.content-title'],\n },\n\n author: {\n selectors: ['a.c-byline__link', 'a.content-author.tracked-offpage'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'time.content-published-date',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['h2.l-article-header__row--lead', '.content-description'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.l-article-content',\n ['.lead-container', '.article-content'],\n '.article-content',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.c-related-links-wrapper', '.module-related'],\n },\n};\n","export const twofortysevensportsComExtractor = {\n domain: '247sports.com',\n\n title: {\n selectors: ['title', 'article header h1'],\n },\n\n author: {\n selectors: ['.article-cnt__author', '.author'],\n },\n\n date_published: {\n selectors: [['time[data-published]', 'data-published']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body', 'section.body.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const UproxxComExtractor = {\n domain: 'uproxx.com',\n\n title: {\n selectors: ['div.entry-header h1'],\n },\n\n author: {\n selectors: [['meta[name=\"qc:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image': 'figure',\n 'div.image .wp-media-credit': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwEonlineComExtractor = {\n domain: 'www.eonline.com',\n\n title: {\n selectors: ['h1.article-detail__title', 'h1.article__title'],\n },\n\n author: {\n selectors: ['.article-detail__meta__author', '.entry-meta__author a'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.article-detail__main-content section'],\n ['.post-content section, .post-content div.post-content__image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.post-content__image': 'figure',\n 'div.post-content__image .image__credits': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwMiamiheraldComExtractor = {\n domain: 'www.miamiherald.com',\n\n title: {\n selectors: ['h1.title'],\n },\n\n date_published: {\n selectors: ['p.published-date'],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.dateline-storybody'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwRefinery29ComExtractor = {\n domain: 'www.refinery29.com',\n\n title: {\n selectors: ['h1.title'],\n },\n\n author: {\n selectors: ['.contributor'],\n },\n\n date_published: {\n selectors: [['meta[name=\"sailthru.date\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.full-width-opener', '.article-content'],\n '.article-content',\n '.body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.loading noscript': $node => {\n const imgHtml = $node.html();\n $node.parents('.loading').replaceWith(imgHtml);\n },\n\n '.section-image': 'figure',\n\n '.section-image .content-caption': 'figcaption',\n\n '.section-text': 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.story-share'],\n },\n};\n","export const WwwMacrumorsComExtractor = {\n domain: 'www.macrumors.com',\n\n title: {\n selectors: ['h1', 'h1.title'],\n },\n\n author: {\n selectors: ['article a[rel=\"author\"]', '.author-url'],\n },\n\n date_published: {\n selectors: [['time', 'datetime']],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article', '.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwAndroidcentralComExtractor = {\n domain: 'www.androidcentral.com',\n\n title: {\n selectors: ['h1', 'h1.main-title'],\n },\n\n author: {\n selectors: [['meta[name=\"parsely-author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.intro', 'blockquote'],\n },\n};\n","export const WwwSiComExtractor = {\n domain: 'www.si.com',\n\n title: {\n selectors: ['h1', 'h1.headline'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"published\"]', 'value']],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['.m-detail-header--dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.m-detail--body',\n ['p', '.marquee_large_2x', '.component.image'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n ['.inline-thumb', '.primary-message', '.description', '.instructions'],\n ],\n },\n};\n","export const WwwRawstoryComExtractor = {\n domain: 'www.rawstory.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], '.blog-title'],\n },\n\n author: {\n selectors: [\n 'div.main-post-head .social-author__name',\n '.blog-author a:first-of-type',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n '.blog-author a:last-of-type',\n ],\n\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.post-body', '.blog-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwCnetComExtractor = {\n domain: 'www.cnet.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['span.author', 'a.author'],\n },\n\n date_published: {\n selectors: ['time'],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: ['.c-head_dek', '.article-dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['img.__image-lead__', '.article-main-body'],\n '.article-main-body',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'figure.image': $node => {\n const $img = $node.find('img');\n $img.attr('width', '100%');\n $img.attr('height', '100%');\n $img.addClass('__image-lead__');\n $node.remove('.imgContainer').prepend($img);\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwTodayComExtractor = {\n domain: 'www.today.com',\n\n title: {\n selectors: ['h1.article-hero-headline__htag', 'h1.entry-headline'],\n },\n\n author: {\n selectors: ['span.byline-name', ['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['time[datetime]', ['meta[name=\"DC.date.issued\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body__content', '.entry-container'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.label-comment'],\n },\n};\n","export const WwwAlComExtractor = {\n domain: 'www.al.com',\n\n title: {\n selectors: [['meta[name=\"title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"article_author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article_date_original\"]', 'value']],\n timezone: 'EST',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwThepennyhoarderComExtractor = {\n domain: 'www.thepennyhoarder.com',\n\n title: {\n selectors: [['meta[name=\"dcterms.title\"]', 'value']],\n },\n\n author: {\n selectors: [['link[rel=\"author\"]', 'title']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['.post-img', '.post-text'],\n '.post-text',\n '.single-post-content-inner',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwWesternjournalismComExtractor = {\n domain: 'www.westernjournalism.com',\n\n title: {\n selectors: ['title', 'h1.entry-title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"DC.date.issued\"]', 'value']],\n },\n\n dek: {\n selectors: ['.subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-sharing.top + div'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.ad-notice-small'],\n },\n};\n","export const WwwAmericanowComExtractor = {\n domain: 'www.americanow.com',\n\n title: {\n selectors: ['.title', ['meta[name=\"title\"]', 'value']],\n },\n\n author: {\n selectors: ['.byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"publish_date\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['.article-content', '.image', '.body'], '.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.article-video-wrapper', '.show-for-small-only'],\n },\n};\n","export const ScienceflyComExtractor = {\n domain: 'sciencefly.com',\n\n title: {\n selectors: ['.entry-title', '.cb-entry-title', '.cb-single-title'],\n },\n\n author: {\n selectors: ['div.cb-author', 'div.cb-author-title'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['div.theiaPostSlider_slides img', 'src']],\n },\n\n content: {\n selectors: ['div.theiaPostSlider_slides'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const HellogigglesComExtractor = {\n domain: 'hellogiggles.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], '.title'],\n },\n\n author: {\n selectors: ['.byline-wrapper span.author_name', '.author-link'],\n },\n\n date_published: {\n selectors: [\n ['meta[property=\"article:published_time\"]', 'content'],\n ['meta[name=\"article:published_time\"]', 'value'],\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.main-content', '.entry-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ThoughtcatalogComExtractor = {\n domain: 'thoughtcatalog.com',\n\n title: {\n selectors: ['h1.title', ['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n 'cite a',\n 'div.col-xs-12.article_header div.writer-container.writer-container-inline.writer-no-avatar h4.writer-name',\n 'h1.writer-name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry.post'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.tc_mark', 'figcaption'],\n },\n};\n","export const WwwInquisitrComExtractor = {\n domain: 'www.inquisitr.com',\n\n title: {\n selectors: ['h1.entry-title.story--header--title'],\n },\n\n author: {\n selectors: ['div.story--header--author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"datePublished\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article.story', '.entry-content.'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.post-category',\n '.story--header--socials',\n '.story--header--content',\n ],\n },\n};\n","export const WwwNbcnewsComExtractor = {\n domain: 'www.nbcnews.com',\n\n title: {\n selectors: ['div.article-hero-headline h1', 'div.article-hed h1'],\n },\n\n author: {\n selectors: [\n 'div.article-inline-byline span.byline-name',\n 'span.byline_author',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published\"]', 'value'],\n ['.flag_article-wrapper time.timestamp_article[datetime]', 'datetime'],\n '.flag_article-wrapper time',\n ],\n\n timezone: 'America/New_York',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body__content', 'div.article-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const FortuneComExtractor = {\n domain: 'fortune.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: ['.MblGHNMJ'],\n\n timezone: 'UTC',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['picture', 'article.row'], 'article.row'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwLinkedinComExtractor = {\n domain: 'www.linkedin.com',\n\n title: {\n selectors: ['.article-title', 'h1'],\n },\n\n author: {\n selectors: [\n '.main-author-card h3',\n ['meta[name=\"article:author\"]', 'value'],\n '.entity-name a[rel=author]',\n ],\n },\n\n date_published: {\n selectors: [\n '.base-main-card__metadata',\n ['time[itemprop=\"datePublished\"]', 'datetime'],\n ],\n\n timezone: 'America/Los_Angeles',\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.article-content__body',\n ['header figure', '.prose'],\n '.prose',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.entity-image'],\n },\n};\n","export const ObamawhitehouseArchivesGovExtractor = {\n domain: 'obamawhitehouse.archives.gov',\n\n supportedDomains: ['whitehouse.gov'],\n\n title: {\n selectors: ['h1', '.pane-node-title'],\n },\n\n author: {\n selectors: ['.blog-author-link', '.node-person-name-link'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.field-name-field-forall-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n defaultCleaner: false,\n\n selectors: ['div#content-start', '.pane-node-field-forall-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.pane-node-title', '.pane-custom.pane-1'],\n },\n};\n","export const WwwOpposingviewsComExtractor = {\n domain: 'www.opposingviews.com',\n\n title: {\n selectors: ['h1.m-detail-header--title', 'h1.title'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value'], 'div.date span span a'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"published\"]', 'value'],\n ['meta[name=\"publish_date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.m-detail--body', '.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.show-for-small-only'],\n },\n};\n","export const WwwProspectmagazineCoUkExtractor = {\n domain: 'www.prospectmagazine.co.uk',\n\n title: {\n selectors: ['.blog-header__title', '.page-title'],\n },\n\n author: {\n selectors: ['.blog-header__author-link', '.aside_author .title'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value'], '.post-info'],\n\n timezone: 'Europe/London',\n },\n\n dek: {\n selectors: ['.blog-header__description', '.page-subtitle'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.blog__container', 'article .post_content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ForwardComExtractor = {\n domain: 'forward.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n '.post-author a',\n '.author-name',\n ['meta[name=\"sailthru.author\"]', 'value'],\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['meta[name=\"date\"]', 'value'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n '.content-container article',\n ['.post-item-media-wrap', '.post-item p'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.post-author', '.donate-box', '.message', '.subtitle'],\n },\n};\n","export const WwwQdailyComExtractor = {\n domain: 'www.qdaily.com',\n\n title: {\n selectors: ['h2', 'h2.title'],\n },\n\n author: {\n selectors: ['.name'],\n },\n\n date_published: {\n selectors: [['.date.smart-date', 'data-origindate']],\n },\n\n dek: {\n selectors: ['.excerpt'],\n },\n\n lead_image_url: {\n selectors: [['.article-detail-hd img', 'src']],\n },\n\n content: {\n selectors: ['.detail'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.lazyload', '.lazylad', '.lazylood'],\n },\n};\n","export const GothamistComExtractor = {\n domain: 'gothamist.com',\n\n supportedDomains: [\n 'chicagoist.com',\n 'laist.com',\n 'sfist.com',\n 'shanghaiist.com',\n 'dcist.com',\n ],\n\n title: {\n selectors: ['h1', '.entry-header h1'],\n },\n\n author: {\n // There are multiple article-metadata and byline-author classes, but the main article's is the 3rd child of the l-container class\n selectors: ['.article-metadata:nth-child(3) .byline-author', '.author'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n 'abbr',\n 'abbr.published',\n ],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: [null],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article-body', '.entry-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div.image-none': 'figure',\n '.image-none i': 'figcaption',\n 'div.image-left': 'figure',\n '.image-left i': 'figcaption',\n 'div.image-right': 'figure',\n '.image-right i': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.image-none br',\n '.image-left br',\n '.image-right br',\n '.galleryEase',\n ],\n },\n};\n","export const WwwFoolComExtractor = {\n domain: 'www.fool.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n '.author-inline .author-name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"date\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value'], 'header h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.tailwind-article-body', '.article-content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n '.caption img': $node => {\n const src = $node.attr('src');\n $node.parent().replaceWith(`<figure><img src=\"${src}\"/></figure>`);\n },\n '.caption': 'figcaption',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['#pitch'],\n },\n};\n","export const WwwSlateComExtractor = {\n domain: 'www.slate.com',\n\n title: {\n selectors: ['.hed', 'h1'],\n },\n\n author: {\n selectors: ['a[rel=author]'],\n },\n\n date_published: {\n selectors: ['.pub-date'],\n\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['.dek'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.about-the-author',\n '.pullquote',\n '.newsletter-signup-component',\n '.top-comment',\n ],\n },\n};\n","export const IciRadioCanadaCaExtractor = {\n domain: 'ici.radio-canada.ca',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"dc.creator\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"dc.date.created\"]', 'value']],\n format: 'YYYY-MM-DD|HH[h]mm',\n timezone: 'America/New_York',\n },\n\n dek: {\n selectors: ['div.lead-container', '.bunker-component.lead'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'section.document-content-style',\n ['.main-multimedia-item', '.news-story-content'],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwFortinetComExtractor = {\n domain: 'www.fortinet.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.b15-blog-meta__author'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div.responsivegrid.aem-GridColumn.aem-GridColumn--default--12',\n ],\n\n transforms: {\n noscript: $node => {\n const $children = $node.children();\n if ($children.length === 1 && $children.get(0).tagName === 'img') {\n return 'figure';\n }\n return null;\n },\n },\n },\n};\n","export const WwwFastcompanyComExtractor = {\n domain: 'www.fastcompany.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.post__deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.post__article'],\n },\n};\n","export const BlisterreviewComExtractor = {\n domain: 'blisterreview.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h1.entry-title'],\n },\n\n author: {\n selectors: ['span.author-name'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time.entry-date', 'datetime'],\n ['meta[itemprop=\"datePublished\"]', 'content'],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['meta[property=\"og:image\"]', 'content'],\n ['meta[itemprop=\"image\"]', 'content'],\n ['meta[name=\"twitter:image\"]', 'content'],\n ['img.attachment-large', 'src'],\n ],\n },\n\n content: {\n selectors: [\n [\n '.elementor-section-wrap',\n '.elementor-text-editor > p, .elementor-text-editor > ul > li, .attachment-large, .wp-caption-text',\n ],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n figcaption: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.comments-area'],\n },\n};\n","export const NewsMynaviJpExtractor = {\n domain: 'news.mynavi.jp',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n 'a.articleHeader_name',\n 'main div.article-author a.article-author__name',\n ],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article-body', 'main article div'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n img: $node => {\n const src = $node.attr('data-original');\n if (src !== '') {\n $node.attr('src', src);\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ClinicaltrialsGovExtractor = {\n domain: 'clinicaltrials.gov',\n\n title: {\n selectors: ['h1.tr-solo_record'],\n },\n\n author: {\n selectors: ['div#sponsor.tr-info-text'],\n },\n\n date_published: {\n // selectors: ['span.term[data-term=\"Last Update Posted\"]'],\n selectors: ['div:has(> span.term[data-term=\"Last Update Posted\"])'],\n },\n\n content: {\n selectors: ['div#tab-body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['.usa-alert> img'],\n },\n};\n","export const GithubComExtractor = {\n domain: 'github.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [\n // enter author selectors\n ],\n },\n\n date_published: {\n selectors: [\n ['relative-time[datetime]', 'datetime'],\n ['span[itemprop=\"dateModified\"] relative-time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"description\"]', 'value'],\n 'span[itemprop=\"about\"]',\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [['#readme article']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwRedditComExtractor = {\n domain: 'www.reddit.com',\n\n title: {\n selectors: [\n 'div[data-test-id=\"post-content\"] h1',\n 'div[data-test-id=\"post-content\"] h2',\n ],\n },\n\n author: {\n selectors: ['div[data-test-id=\"post-content\"] a[href*=\"user/\"]'],\n },\n\n date_published: {\n selectors: [\n 'div[data-test-id=\"post-content\"] span[data-click-id=\"timestamp\"]',\n 'div[data-test-id=\"post-content\"] a[data-click-id=\"timestamp\"]',\n ],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n ['div[data-test-id=\"post-content\"] p'], // text post\n [\n 'div[data-test-id=\"post-content\"] a[target=\"_blank\"]:not([data-click-id=\"timestamp\"])', // external link\n 'div[data-test-id=\"post-content\"] div[data-click-id=\"media\"]', // embedded media\n ], // external link with media preview (YouTube, imgur album, etc...)\n ['div[data-test-id=\"post-content\"] div[data-click-id=\"media\"]'], // Embedded media (Reddit video)\n ['div[data-test-id=\"post-content\"] a'], // external link\n 'div[data-test-id=\"post-content\"]',\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'div[role=\"img\"]': $node => {\n // External link image preview\n const $img = $node.find('img');\n const bgImg = $node.css('background-image');\n if ($img.length === 1 && bgImg) {\n $img.attr('src', bgImg.match(/\\((.*?)\\)/)[1].replace(/('|\")/g, ''));\n return $img;\n }\n return $node;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.icon',\n 'span[id^=\"PostAwardBadges\"]',\n 'div a[data-test-id=\"comments-page-link-num-comments\"]',\n ],\n },\n};\n","export const OtrsComExtractor = {\n domain: 'otrs.com',\n\n title: {\n selectors: ['#main article h1'],\n },\n\n author: {\n selectors: ['div.dateplusauthor a'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main article'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [\n 'div.dateplusauthor',\n 'div.gr-12.push-6.footershare',\n '#atftbx',\n 'div.category-modul',\n ],\n },\n};\n","export const WwwOssnewsJpExtractor = {\n domain: 'www.ossnews.jp',\n\n title: {\n selectors: ['#alpha-block h1.hxnewstitle'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.fs12'],\n format: 'YYYY年MM月DD日 HH:mm',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#alpha-block .section:has(h1.hxnewstitle)'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const BuzzapJpExtractor = {\n domain: 'buzzap.jp',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['time.entry-date', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.ctiframe'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwAsahiComExtractor = {\n domain: 'www.asahi.com',\n\n title: {\n selectors: ['main h1', '.ArticleTitle h1'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"pubdate\"]', 'value']],\n },\n\n dek: null,\n\n excerpt: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['main'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['div.AdMod', 'div.LoginSelectArea', 'time', 'div.notPrint'],\n },\n};\n","export const WwwSanwaCoJpExtractor = {\n domain: 'www.sanwa.co.jp',\n\n title: {\n selectors: ['#newsContent h1'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['dl.date'],\n format: 'YYYY.MM.DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#newsContent'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#smartphone', 'div.sns_box', 'div.contentFoot'],\n },\n};\n","export const WwwElecomCoJpExtractor = {\n domain: 'www.elecom.co.jp',\n\n title: {\n selectors: ['title'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.section-last'],\n format: 'YYYY.MM.DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['td.TableMain2'],\n\n defaultCleaner: false,\n\n transforms: {\n table: $node => {\n $node.attr('width', 'auto');\n },\n },\n\n clean: [],\n },\n};\n","export const ScanNetsecurityNeJpExtractor = {\n domain: 'scan.netsecurity.ne.jp',\n\n title: {\n selectors: ['header.arti-header h1.head'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['meta[name=\"article:modified_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['header.arti-header p.arti-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.arti-content.arti-content--thumbnail'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['aside.arti-giga'],\n },\n};\n","export const JvndbJvnJpExtractor = {\n domain: 'jvndb.jvn.jp',\n\n title: {\n selectors: ['title'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['div.modifytxt:nth-child(2)'],\n format: 'YYYY/MM/DD',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['#news-list'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const GeniusComExtractor = {\n domain: 'genius.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['h2 a'],\n },\n\n date_published: {\n selectors: [\n [\n 'meta[itemprop=page_data]',\n 'value',\n res => {\n const json = JSON.parse(res);\n return json.song.release_date;\n },\n ],\n ],\n },\n\n dek: {\n selectors: [\n // enter selectors\n ],\n },\n\n lead_image_url: {\n selectors: [\n [\n 'meta[itemprop=page_data]',\n 'value',\n res => {\n const json = JSON.parse(res);\n return json.song.album.cover_art_url;\n },\n ],\n ],\n },\n\n content: {\n selectors: ['.lyrics'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwJnsaOrgExtractor = {\n domain: 'www.jnsa.org',\n\n title: {\n selectors: ['#wgtitle h2'],\n },\n\n author: null,\n\n date_published: null,\n\n dek: null,\n\n excerpt: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main_area'],\n\n transforms: {},\n\n clean: ['#pankuzu', '#side'],\n },\n};\n","export const PhpspotOrgExtractor = {\n domain: 'phpspot.org',\n\n title: {\n selectors: ['h3.hl'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['h4.hl'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['div.entrybody'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwInfoqComExtractor = {\n domain: 'www.infoq.com',\n\n title: {\n selectors: ['h1.heading'],\n },\n\n author: {\n selectors: ['div.widget.article__authors'],\n },\n\n date_published: {\n selectors: ['.article__readTime.date'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article__data'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwMoongiftJpExtractor = {\n domain: 'www.moongift.jp',\n\n title: {\n selectors: ['h1.title a'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['ul.meta li:not(.social):first-of-type'],\n timezone: 'Asia/Tokyo',\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#main'],\n\n transforms: {},\n\n clean: ['ul.mg_service.cf'],\n },\n};\n","export const WwwItmediaCoJpExtractor = {\n domain: 'www.itmedia.co.jp',\n\n supportedDomains: [\n 'www.atmarkit.co.jp',\n 'techtarget.itmedia.co.jp',\n 'nlab.itmedia.co.jp',\n ],\n\n title: {\n selectors: ['#cmsTitle h1'],\n },\n\n author: {\n selectors: ['#byline'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:modified_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['#cmsAbstract h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#cmsBody'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#snsSharebox'],\n },\n};\n","export const WwwPublickey1JpExtractor = {\n domain: 'www.publickey1.jp',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.bloggerinchief p:first-of-type', '#subcol p:has(img)'],\n },\n\n date_published: {\n selectors: ['div.pubdate'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['#maincol'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['#breadcrumbs', 'div.sbm', 'div.ad_footer'],\n },\n};\n","export const TakagihiromitsuJpExtractor = {\n domain: 'takagi-hiromitsu.jp',\n\n title: {\n selectors: ['h3'],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[http-equiv=\"Last-Modified\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['div.body'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const BookwalkerJpExtractor = {\n domain: 'bookwalker.jp',\n\n title: {\n selectors: ['h1.p-main__title', 'h1.main-heading'],\n },\n\n author: {\n selectors: ['div.p-author__list', 'div.authors'],\n },\n\n date_published: {\n selectors: [\n 'dl.p-information__data dd:nth-of-type(7)',\n '.work-info .work-detail:first-of-type .work-detail-contents:last-of-type',\n ],\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div.p-main__information',\n ['div.main-info', 'div.main-cover-inner'],\n ],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: [\n 'span.label.label--trial',\n 'dt.info-head.info-head--coin',\n 'dd.info-contents.info-contents--coin',\n 'div.info-notice.fn-toggleClass',\n ],\n },\n};\n","export const WwwYomiuriCoJpExtractor = {\n domain: 'www.yomiuri.co.jp',\n\n title: {\n selectors: ['h1.title-article.c-article-title'],\n },\n\n author: null,\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.p-main-contents'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const JapanCnetComExtractor = {\n domain: 'japan.cnet.com',\n\n title: {\n selectors: ['.leaf-headline-ttl'],\n },\n\n author: {\n selectors: ['.writer'],\n },\n\n date_published: {\n selectors: ['.date'],\n format: 'YYYY年MM月DD日 HH時mm分',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article_body'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const DeadlineComExtractor = {\n domain: 'deadline.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['section.author h2'],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.a-article-grid__main.pmc-a-grid article.pmc-a-grid-item'],\n\n transforms: {\n '.embed-twitter': $node => {\n const innerHtml = $node.html();\n $node.replaceWith(innerHtml);\n },\n },\n\n clean: ['figcaption'],\n },\n};\n","export const WwwGizmodoJpExtractor = {\n domain: 'www.gizmodo.jp',\n\n title: {\n selectors: ['h1.p-post-title'],\n },\n\n author: {\n selectors: ['li.p-post-AssistAuthor'],\n },\n\n date_published: {\n selectors: [['li.p-post-AssistTime time', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['article.p-post'],\n\n transforms: {\n 'img.p-post-thumbnailImage': $node => {\n const src = $node.attr('src');\n $node.attr('src', src.replace(/^.*=%27/, '').replace(/%27;$/, ''));\n },\n },\n\n clean: ['h1.p-post-title', 'ul.p-post-Assist'],\n },\n};\n","export const GetnewsJpExtractor = {\n domain: 'getnews.jp',\n\n title: {\n selectors: ['article h1'],\n },\n\n author: {\n selectors: [['meta[name=\"article:author\"]', 'value'], 'span.prof'],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['ul.cattag-top time', 'datetime'],\n ],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.post-bodycopy'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwLifehackerJpExtractor = {\n domain: 'www.lifehacker.jp',\n\n title: {\n selectors: ['h1[class^=\"article_pArticle_Title\"]', 'h1.lh-summary-title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"author\"]', 'value'],\n 'p.lh-entryDetailInner--credit',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['div.lh-entryDetail-header time', 'datetime'],\n ],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div[class^=\"article_pArticle_Body__\"]',\n 'div.lh-entryDetail-body',\n ],\n\n transforms: {\n 'img.lazyload': $node => {\n const src = $node.attr('src');\n $node.attr('src', src.replace(/^.*=%27/, '').replace(/%27;$/, ''));\n },\n },\n\n clean: ['p.lh-entryDetailInner--credit'],\n },\n};\n","export const SectIijAdJpExtractor = {\n domain: 'sect.iij.ad.jp',\n\n title: {\n selectors: ['div.title-box-inner h1', 'h3'],\n },\n\n author: {\n selectors: ['p.post-author a', 'dl.entrydate dd'],\n },\n\n date_published: {\n selectors: ['time'],\n format: 'YYYY年MM月DD日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.entry-inner', '#article'],\n\n transforms: {},\n\n clean: ['dl.entrydate'],\n },\n};\n","export const WwwOreillyCoJpExtractor = {\n domain: 'www.oreilly.co.jp',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h3'],\n },\n\n author: {\n selectors: ['span[itemprop=\"author\"]', 'li[itemprop=\"author\"]'],\n },\n\n date_published: {\n selectors: [\n ['dd[itemprop=\"datePublished\"]', 'content'],\n ['meta[itemprop=\"datePublished\"]', 'value'],\n ],\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image:secure_url\"]', 'value'],\n ['meta[name=\"og:image\"]', 'value'],\n ],\n },\n\n content: {\n selectors: ['section.detail', '#content'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['.social-tools'],\n },\n};\n","export const WwwIpaGoJpExtractor = {\n domain: 'www.ipa.go.jp',\n\n title: {\n selectors: ['h1'],\n },\n\n author: null,\n\n date_published: {\n selectors: ['p.ipar_text_right'],\n format: 'YYYY年M月D日',\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['#ipar_main'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['p.ipar_text_right'],\n },\n};\n","export const WeeklyAsciiJpExtractor = {\n domain: 'weekly.ascii.jp',\n\n title: {\n selectors: ['article h1', 'h1[itemprop=\"headline\"]'],\n },\n\n author: {\n selectors: ['p.author'],\n },\n\n date_published: {\n selectors: ['p.date', ['meta[name=\"odate\"]', 'value']],\n\n format: 'YYYY年MM月DD日 HH:mm',\n\n timezone: 'Asia/Tokyo',\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div#contents_detail', 'div.article'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const TechlogIijAdJpExtractor = {\n domain: 'techlog.iij.ad.jp',\n\n title: {\n selectors: ['h1.entry-title'],\n },\n\n author: {\n selectors: ['a[rel=\"author\"]'],\n },\n\n date_published: {\n selectors: [['time.entry-date', 'datetime']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.entry-content'],\n\n defaultCleaner: false,\n\n transforms: {},\n\n clean: ['.wp_social_bookmarking_light'],\n },\n};\n","import URL from 'url';\n\nexport const WiredJpExtractor = {\n domain: 'wired.jp',\n\n title: {\n selectors: ['h1[data-testid=\"ContentHeaderHed\"]', 'h1.post-title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n 'p[itemprop=\"author\"]',\n ],\n },\n\n date_published: {\n selectors: [\n ['meta[name=\"article:published_time\"]', 'value'],\n ['time', 'datetime'],\n ],\n },\n\n dek: {\n selectors: ['div[class^=\"ContentHeaderDek\"]', '.post-intro'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: [\n 'div[data-attribute-verso-pattern=\"article-body\"]',\n 'article.article-detail',\n ],\n\n transforms: {\n 'img[data-original]': $node => {\n const dataOriginal = $node.attr('data-original');\n const src = $node.attr('src');\n const url = URL.resolve(src, dataOriginal);\n $node.attr('src', url);\n },\n },\n\n clean: ['.post-category', 'time', 'h1.post-title', '.social-area-syncer'],\n },\n};\n","export const JapanZdnetComExtractor = {\n domain: 'japan.zdnet.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: [['meta[name=\"cXenseParse:author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article_body'],\n\n transforms: {},\n\n clean: [],\n },\n};\n","export const WwwRbbtodayComExtractor = {\n domain: 'www.rbbtoday.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.writer.writer-name'],\n },\n\n date_published: {\n selectors: [['header time', 'datetime']],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value'], '.arti-summary'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.arti-content'],\n\n transforms: {},\n\n clean: ['.arti-giga'],\n },\n};\n","export const WwwLemondeFrExtractor = {\n domain: 'www.lemonde.fr',\n\n title: {\n selectors: ['h1.article__title'],\n },\n\n author: {\n selectors: ['.author__name'],\n },\n\n date_published: {\n selectors: [['meta[name=\"og:article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['.article__desc'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.article__content'],\n\n transforms: {},\n\n clean: ['figcaption'],\n },\n};\n","export const WwwPhoronixComExtractor = {\n domain: 'www.phoronix.com',\n\n title: {\n selectors: ['article h1', 'article header'],\n },\n\n author: {\n selectors: ['.author a:first-child'],\n },\n\n date_published: {\n selectors: ['.author'],\n // 1 June 2019 at 08:34 PM EDT\n format: 'D MMMM YYYY at hh:mm',\n timezone: 'America/New_York',\n },\n\n dek: null,\n\n lead_image_url: null,\n\n content: {\n selectors: ['.content'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const PitchforkComExtractor = {\n domain: 'pitchfork.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'title'],\n },\n\n author: {\n selectors: [\n ['meta[name=\"article:author\"]', 'value'],\n '.authors-detail__display-name',\n ],\n },\n\n date_published: {\n selectors: ['div[class^=\"InfoSliceWrapper-\"]', ['.pub-date', 'datetime']],\n },\n\n dek: {\n selectors: [\n ['meta[name=\"og:description\"]', 'value'],\n '.review-detail__abstract',\n ],\n },\n\n lead_image_url: {\n selectors: [\n ['meta[name=\"og:image\"]', 'value'],\n ['.single-album-tombstone__art img', 'src'],\n ],\n },\n\n content: {\n selectors: ['div.body__inner-container', '.review-detail__text'],\n },\n\n extend: {\n score: {\n selectors: ['p[class*=\"Rating\"]', '.score'],\n },\n },\n};\n","export const BiorxivOrgExtractor = {\n domain: 'biorxiv.org',\n\n title: {\n selectors: ['h1#page-title'],\n },\n\n author: {\n selectors: [\n 'div.highwire-citation-biorxiv-article-top > div.highwire-cite-authors',\n ],\n },\n\n content: {\n selectors: ['div#abstract-1'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const EpaperZeitDeExtractor = {\n domain: 'epaper.zeit.de',\n\n title: {\n selectors: ['p.title'],\n },\n\n author: {\n selectors: ['.article__author'],\n },\n\n date_published: null,\n\n excerpt: {\n selectors: ['subtitle'],\n },\n\n lead_image_url: null,\n\n content: {\n selectors: ['.article'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n 'p.title': 'h1',\n '.article__author': 'p',\n byline: 'p',\n linkbox: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['image-credits', 'box[type=citation]'],\n },\n};\n","export const WwwLadbibleComExtractor = {\n domain: 'www.ladbible.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['[class*=Byline]'],\n },\n\n date_published: {\n selectors: ['time'],\n timezone: 'Europe/London',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['[class*=ArticleContainer]'],\n clean: [\n 'time',\n 'source',\n 'a[href^=\"https://www.ladbible.com/\"]',\n 'picture',\n '[class*=StyledCardBlock]',\n ],\n },\n};\n","export const TimesofindiaIndiatimesComExtractor = {\n domain: 'timesofindia.indiatimes.com',\n\n title: {\n selectors: ['h1'],\n },\n\n extend: {\n reporter: {\n selectors: ['div.byline'],\n transforms: {},\n },\n },\n\n date_published: {\n selectors: ['.byline'],\n format: 'MMM D, YYYY, HH:mm z',\n timezone: 'Asia/Kolkata',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.contentwrapper:has(section)'],\n defaultCleaner: false,\n\n clean: [\n 'section',\n 'h1',\n '.byline',\n '.img_cptn',\n '.icon_share_wrap',\n 'ul[itemtype=\"https://schema.org/BreadcrumbList\"]',\n ],\n },\n};\n","export const MaTtiasBeExtractor = {\n domain: 'ma.ttias.be',\n\n title: {\n selectors: [['meta[name=\"twitter:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n content: {\n selectors: [['.content']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: $node => {\n // The \"id\" attribute values would result in low scores and the element being\n // removed.\n $node.attr('id', null);\n\n // h1 elements will be demoted to h2, so demote h2 elements to h3.\n return 'h3';\n },\n h1: $node => {\n // The \"id\" attribute values would result in low scores and the element being\n // removed.\n $node.attr('id', null);\n\n // A subsequent h2 will be removed if there is not a paragraph before it, so\n // add a paragraph here. It will be removed anyway because it is empty.\n $node.after('<p></p>');\n },\n ul: $node => {\n // Articles contain lists of links which look like, but are not, navigation\n // elements. Adding this class attribute avoids them being incorrectly removed.\n $node.attr('class', 'entry-content-asset');\n },\n },\n },\n};\n","export const PastebinComExtractor = {\n domain: 'pastebin.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.username', '.paste_box_line2 .t_us + a'],\n },\n\n date_published: {\n selectors: ['.date', '.paste_box_line2 .t_da + span'],\n timezone: 'America/New_York',\n format: 'MMMM D, YYYY',\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.source', '#selectable .text'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n ol: 'div',\n li: 'p',\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","/* eslint-disable no-nested-ternary */\n/* eslint-disable no-unused-expressions */\nexport const WwwAbendblattDeExtractor = {\n domain: 'www.abendblatt.de',\n\n title: {\n selectors: ['h2.article__header__headline'],\n },\n\n author: {\n selectors: ['span.author-info__name-text'],\n },\n\n date_published: {\n selectors: [\n ['time.teaser-stream-time', 'datetime'],\n ['time.article__header__date', 'datetime'],\n ],\n },\n\n dek: {\n selectors: [['meta[name=\"description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div.article__body'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n p: $node => {\n if (!$node.hasClass('obfuscated')) return null;\n let o = '';\n let n = 0;\n for (let i = $node.text(); n < i.length; n += 1) {\n const r = i.charCodeAt(n);\n r === 177\n ? (o += '%')\n : r === 178\n ? (o += '!')\n : r === 180\n ? (o += ';')\n : r === 181\n ? (o += '=')\n : r === 32\n ? (o += ' ')\n : r === 10\n ? (o += '\\n')\n : r > 33 && (o += String.fromCharCode(r - 1));\n }\n\n $node.html(o);\n $node.removeClass('obfuscated');\n $node.addClass('deobfuscated');\n return null;\n },\n div: $node => {\n if (!$node.hasClass('obfuscated')) return null;\n let o = '';\n let n = 0;\n for (let i = $node.text(); n < i.length; n += 1) {\n const r = i.charCodeAt(n);\n r === 177\n ? (o += '%')\n : r === 178\n ? (o += '!')\n : r === 180\n ? (o += ';')\n : r === 181\n ? (o += '=')\n : r === 32\n ? (o += ' ')\n : r === 10\n ? (o += '\\n')\n : r > 33 && (o += String.fromCharCode(r - 1));\n }\n\n $node.html(o);\n $node.removeClass('obfuscated');\n $node.addClass('deobfuscated');\n return null;\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const WwwGrueneDeExtractor = {\n domain: 'www.gruene.de',\n\n title: {\n selectors: ['header h1'],\n },\n\n author: null,\n\n date_published: null,\n\n dek: null,\n\n lead_image_url: {\n selectors: [['meta[property=\"og:image\"]', 'content']],\n },\n\n content: {\n // selectors: ['section'],\n selectors: [['section header', 'section h2', 'section p', 'section ol']],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: ['figcaption', 'p[class]'],\n },\n};\n","export const WwwEngadgetComExtractor = {\n domain: 'www.engadget.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: ['a.th-meta[data-ylk*=\"subsec:author\"]'],\n },\n\n // Engadget stories have publish dates, but the only representation of them on the page\n // is in a format like \"2h ago\". There are also these tags with blank values:\n // <meta class=\"swiftype\" name=\"published_at\" data-type=\"date\" value=\"\">\n date_published: {\n selectors: [\n // enter selectors\n ],\n },\n\n dek: {\n selectors: ['div[class*=\"o-title_mark\"] div'],\n },\n\n // Engadget stories do have lead images specified by an og:image meta tag, but selecting\n // the value attribute of that tag fails. I believe the \"ℑ\" sequence of characters\n // is triggering this inability to select the attribute value.\n lead_image_url: {\n selectors: [\n // enter selectors\n ],\n },\n\n content: {\n selectors: [\n [\n // Some figures will be inside div.article-text, but some header figures/images\n // will not.\n '#page_body figure:not(div.article-text figure)',\n 'div.article-text',\n ],\n ],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","export const ArstechnicaComExtractor = {\n domain: 'arstechnica.com',\n\n // Articles from this site are often paginated, but I was unable to write a CSS\n // selector to find the next page. On the last page, there will be a link with a CSS\n // selector indicating that the previous page is next. But the parser appears to find\n // the next page without this extractor finding it, as long as the fallback option is\n // left at its default value of true.\n\n title: {\n selectors: ['title'],\n },\n\n author: {\n selectors: ['*[rel=\"author\"] *[itemprop=\"name\"]'],\n },\n\n date_published: {\n selectors: [['.byline time', 'datetime']],\n },\n\n dek: {\n selectors: ['h2[itemprop=\"description\"]'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div[itemprop=\"articleBody\"]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n h2: $node => {\n // Some pages have an element h2 that is significant, and that the parser will\n // remove if not following a paragraph. Adding this empty paragraph fixes it, and\n // the empty paragraph will be removed anyway.\n $node.before('<p></p>');\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result.\n clean: [\n // Remove enlarge links and separators inside image captions.\n 'figcaption .enlarge-link',\n 'figcaption .sep',\n\n // I could not transform the video into usable elements, so I\n // removed them.\n 'figure.video',\n\n // Image galleries that do not work.\n '.gallery',\n\n 'aside',\n '.sidebar',\n ],\n },\n};\n","export const WwwNdtvComExtractor = {\n domain: 'www.ndtv.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value'], 'h1.entry-title'],\n },\n\n author: {\n selectors: ['span[itemprop=\"author\"] span[itemprop=\"name\"]'],\n },\n\n date_published: {\n selectors: [['span[itemprop=\"dateModified\"]', 'content']],\n },\n\n dek: {\n selectors: ['h2'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['div[itemprop=\"articleBody\"]'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {\n // This site puts a dateline in a 'b' above the first paragraph, and then somehow\n // blends it into the first paragraph with CSS. This transform moves the dateline\n // to the first paragraph.\n '.place_cont': $node => {\n if (!$node.parents('p').length) {\n const nextSibling = $node.next('p');\n if (nextSibling) {\n $node.remove();\n nextSibling.prepend($node);\n }\n }\n },\n },\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n '.highlghts_Wdgt',\n '.ins_instory_dv_caption',\n 'input',\n '._world-wrapper .mt20',\n ],\n },\n};\n","export const SpektrumExtractor = {\n domain: 'www.spektrum.de',\n\n title: {\n selectors: ['.content__title'],\n },\n\n author: {\n selectors: ['.content__author__info__name'],\n },\n\n date_published: {\n selectors: ['.content__meta__date'],\n timezone: 'Europe/Berlin',\n },\n\n dek: {\n selectors: ['.content__intro'],\n },\n\n lead_image_url: {\n selectors: [\n // This is how the meta tag appears in the original source code.\n ['meta[name=\"og:image\"]', 'value'],\n // This is how the meta tag appears in the DOM in Chrome.\n // The selector is included here to make the code work within the browser as well.\n ['meta[property=\"og:image\"]', 'content'],\n // This is the image that is shown on the page.\n // It can be slightly cropped compared to the original in the meta tag.\n '.image__article__top img',\n ],\n },\n\n content: {\n selectors: ['article.content'],\n clean: [\n '.breadcrumbs',\n '.hide-for-print',\n 'aside',\n 'header h2',\n '.image__article__top',\n '.content__author',\n '.copyright',\n '.callout-box',\n ],\n },\n};\n","export const PostlightComExtractor = {\n domain: 'postlight.com',\n\n title: {\n selectors: [['meta[name=\"og:title\"]', 'value']],\n },\n\n author: {\n selectors: [['meta[name=\"parsely-author\"]', 'value']],\n },\n\n date_published: {\n selectors: [['meta[name=\"article:published_time\"]', 'value']],\n },\n\n dek: {\n selectors: ['h2.single-hero__abstract'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['main.post'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [\n 'section.pl-post-link',\n 'aside',\n 'section.insights_featured_case_studies',\n ],\n },\n};\n","export const WwwInvestmentexecutiveComExtractor = {\n domain: 'www.investmentexecutive.com',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['div[itemprop=\"author\"]'],\n },\n\n date_published: {\n selectors: [['meta[itemprop=\"datePublished\"]', 'value']],\n },\n\n dek: {\n selectors: [['meta[name=\"og:description\"]', 'value']],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['section.article-body'],\n\n clean: ['.hidden'],\n },\n};\n","export const WwwCbcCaExtractor = {\n domain: 'www.cbc.ca',\n\n title: {\n selectors: ['h1'],\n },\n\n author: {\n selectors: ['.authorText', '.bylineDetails'],\n },\n\n date_published: {\n selectors: [['.timeStamp[datetime]', 'datetime']],\n },\n\n dek: {\n selectors: ['.deck'],\n },\n\n lead_image_url: {\n selectors: [['meta[name=\"og:image\"]', 'value']],\n },\n\n content: {\n selectors: ['.story'],\n\n // Is there anything in the content you selected that needs transformed\n // before it's consumable content? E.g., unusual lazy loaded images\n transforms: {},\n\n // Is there anything that is in the result that shouldn't be?\n // The clean selectors will remove anything that matches from\n // the result\n clean: [],\n },\n};\n","import mergeSupportedDomains from 'utils/merge-supported-domains';\nimport * as CustomExtractors from './custom/index';\n\nexport default Object.keys(CustomExtractors).reduce((acc, key) => {\n const extractor = CustomExtractors[key];\n return {\n ...acc,\n ...mergeSupportedDomains(extractor),\n };\n}, {});\n","// CLEAN AUTHOR CONSTANTS\nexport const CLEAN_AUTHOR_RE = /^\\s*(posted |written )?by\\s*:?\\s*(.*)/i;\n\n// CLEAN DEK CONSTANTS\nexport const TEXT_LINK_RE = new RegExp('http(s)?://', 'i');\n// An ordered list of meta tag names that denote likely article deks.\n// From most distinct to least distinct.\n//\n// NOTE: There are currently no meta tags that seem to provide the right\n// content consistenty enough. Two options were:\n// - og:description\n// - dc.description\n// However, these tags often have SEO-specific junk in them that's not\n// header-worthy like a dek is. Excerpt material at best.\nexport const DEK_META_TAGS = [];\n\n// An ordered list of Selectors to find likely article deks. From\n// most explicit to least explicit.\n//\n// Should be more restrictive than not, as a failed dek can be pretty\n// detrimental to the aesthetics of an article.\nexport const DEK_SELECTORS = ['.entry-summary'];\n\n// CLEAN DATE PUBLISHED CONSTANTS\nexport const MS_DATE_STRING = /^\\d{13}$/i;\nexport const SEC_DATE_STRING = /^\\d{10}$/i;\nexport const CLEAN_DATE_STRING_RE = /^\\s*published\\s*:?\\s*(.*)/i;\nexport const TIME_MERIDIAN_SPACE_RE = /(.*\\d)(am|pm)(.*)/i;\nexport const TIME_MERIDIAN_DOTS_RE = /\\.m\\./i;\nexport const TIME_NOW_STRING = /^\\s*(just|right)?\\s*now\\s*/i;\nconst timeUnits = [\n 'seconds?',\n 'minutes?',\n 'hours?',\n 'days?',\n 'weeks?',\n 'months?',\n 'years?',\n];\nconst allTimeUnits = timeUnits.join('|');\nexport const TIME_AGO_STRING = new RegExp(\n `(\\\\d+)\\\\s+(${allTimeUnits})\\\\s+ago`,\n 'i'\n);\nconst months = [\n 'jan',\n 'feb',\n 'mar',\n 'apr',\n 'may',\n 'jun',\n 'jul',\n 'aug',\n 'sep',\n 'oct',\n 'nov',\n 'dec',\n];\nconst allMonths = months.join('|');\nconst timestamp1 = '[0-9]{1,2}:[0-9]{2,2}( ?[ap].?m.?)?';\nconst timestamp2 = '[0-9]{1,2}[/-][0-9]{1,2}[/-][0-9]{2,4}';\nconst timestamp3 = '-[0-9]{3,4}$';\nexport const SPLIT_DATE_STRING = new RegExp(\n `(${timestamp1})|(${timestamp2})|(${timestamp3})|([0-9]{1,4})|(${allMonths})`,\n 'ig'\n);\n\n// 2016-11-22T08:57-500\n// Check if datetime string has an offset at the end\nexport const TIME_WITH_OFFSET_RE = /-\\d{3,4}$/;\n\n// CLEAN TITLE CONSTANTS\n// A regular expression that will match separating characters on a\n// title, that usually denote breadcrumbs or something similar.\nexport const TITLE_SPLITTERS_RE = /(: | - | \\| )/g;\n\nexport const DOMAIN_ENDINGS_RE = new RegExp('.com$|.net$|.org$|.co.uk$', 'g');\n","import { normalizeSpaces } from 'utils/text';\nimport { CLEAN_AUTHOR_RE } from './constants';\n\n// Take an author string (like 'By David Smith ') and clean it to\n// just the name(s): 'David Smith'.\nexport default function cleanAuthor(author) {\n return normalizeSpaces(author.replace(CLEAN_AUTHOR_RE, '$2').trim());\n}\n","import validUrl from 'valid-url';\n\nexport default function clean(leadImageUrl) {\n leadImageUrl = leadImageUrl.trim();\n if (validUrl.isWebUri(leadImageUrl)) {\n return leadImageUrl;\n }\n\n return null;\n}\n","import { stripTags } from 'utils/dom';\nimport { excerptContent, normalizeSpaces } from 'utils/text';\n\nimport { TEXT_LINK_RE } from './constants';\n\n// Take a dek HTML fragment, and return the cleaned version of it.\n// Return None if the dek wasn't good enough.\nexport default function cleanDek(dek, { $, excerpt }) {\n // Sanity check that we didn't get too short or long of a dek.\n if (dek.length > 1000 || dek.length < 5) return null;\n\n // Check that dek isn't the same as excerpt\n if (excerpt && excerptContent(excerpt, 10) === excerptContent(dek, 10))\n return null;\n\n const dekText = stripTags(dek, $);\n\n // Plain text links shouldn't exist in the dek. If we have some, it's\n // not a good dek - bail.\n if (TEXT_LINK_RE.test(dekText)) return null;\n\n return normalizeSpaces(dekText.trim());\n}\n","import moment from 'moment-timezone';\nimport parseFormat from 'moment-parseformat';\n// Is there a compelling reason to use moment here?\n// Mostly only being used for the isValid() method,\n// but could just check for 'Invalid Date' string.\n\nimport {\n MS_DATE_STRING,\n SEC_DATE_STRING,\n CLEAN_DATE_STRING_RE,\n SPLIT_DATE_STRING,\n TIME_AGO_STRING,\n TIME_NOW_STRING,\n TIME_MERIDIAN_SPACE_RE,\n TIME_MERIDIAN_DOTS_RE,\n TIME_WITH_OFFSET_RE,\n} from './constants';\n\nexport function cleanDateString(dateString) {\n return (dateString.match(SPLIT_DATE_STRING) || [])\n .join(' ')\n .replace(TIME_MERIDIAN_DOTS_RE, 'm')\n .replace(TIME_MERIDIAN_SPACE_RE, '$1 $2 $3')\n .replace(CLEAN_DATE_STRING_RE, '$1')\n .trim();\n}\n\nexport function createDate(dateString, timezone, format) {\n if (TIME_WITH_OFFSET_RE.test(dateString)) {\n return moment(new Date(dateString));\n }\n\n if (TIME_AGO_STRING.test(dateString)) {\n const fragments = TIME_AGO_STRING.exec(dateString);\n return moment().subtract(fragments[1], fragments[2]);\n }\n\n if (TIME_NOW_STRING.test(dateString)) {\n return moment();\n }\n\n return timezone\n ? moment.tz(dateString, format || parseFormat(dateString), timezone)\n : moment(dateString, format || parseFormat(dateString));\n}\n\n// Take a date published string, and hopefully return a date out of\n// it. Return none if we fail.\nexport default function cleanDatePublished(\n dateString,\n { timezone, format } = {}\n) {\n // If string is in milliseconds or seconds, convert to int and return\n if (MS_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10)).toISOString();\n }\n if (SEC_DATE_STRING.test(dateString)) {\n return new Date(parseInt(dateString, 10) * 1000).toISOString();\n }\n\n let date = createDate(dateString, timezone, format);\n\n if (!date.isValid()) {\n dateString = cleanDateString(dateString);\n date = createDate(dateString, timezone, format);\n }\n\n return date.isValid() ? date.toISOString() : null;\n}\n","import {\n cleanAttributes,\n cleanHeaders,\n cleanHOnes,\n cleanImages,\n cleanTags,\n removeEmpty,\n rewriteTopLevel,\n markToKeep,\n stripJunkTags,\n makeLinksAbsolute,\n} from 'utils/dom';\n\n// Clean our article content, returning a new, cleaned node.\nexport default function extractCleanNode(\n article,\n { $, cleanConditionally = true, title = '', url = '', defaultCleaner = true }\n) {\n // Rewrite the tag name to div if it's a top level node like body or\n // html to avoid later complications with multiple body tags.\n rewriteTopLevel(article, $);\n\n // Drop small images and spacer images\n // Only do this is defaultCleaner is set to true;\n // this can sometimes be too aggressive.\n if (defaultCleaner) cleanImages(article, $);\n\n // Make links absolute\n makeLinksAbsolute(article, $, url);\n\n // Mark elements to keep that would normally be removed.\n // E.g., stripJunkTags will remove iframes, so we're going to mark\n // YouTube/Vimeo videos as elements we want to keep.\n markToKeep(article, $, url);\n\n // Drop certain tags like <title>, etc\n // This is -mostly- for cleanliness, not security.\n stripJunkTags(article, $);\n\n // H1 tags are typically the article title, which should be extracted\n // by the title extractor instead. If there's less than 3 of them (<3),\n // strip them. Otherwise, turn 'em into H2s.\n cleanHOnes(article, $);\n\n // Clean headers\n cleanHeaders(article, $, title);\n\n // We used to clean UL's and OL's here, but it was leading to\n // too many in-article lists being removed. Consider a better\n // way to detect menus particularly and remove them.\n // Also optionally running, since it can be overly aggressive.\n if (defaultCleaner) cleanTags(article, $, cleanConditionally);\n\n // Remove empty paragraph nodes\n removeEmpty(article, $);\n\n // Remove unnecessary attributes\n cleanAttributes(article, $);\n\n return article;\n}\n","import { stripTags } from 'utils/dom';\nimport { normalizeSpaces } from 'utils/text';\n\nimport { TITLE_SPLITTERS_RE } from './constants';\nimport { resolveSplitTitle } from './index';\n\nexport default function cleanTitle(title, { url, $ }) {\n // If title has |, :, or - in it, see if\n // we can clean it up.\n if (TITLE_SPLITTERS_RE.test(title)) {\n title = resolveSplitTitle(title, url);\n }\n\n // Final sanity check that we didn't get a crazy title.\n // if (title.length > 150 || title.length < 15) {\n if (title.length > 150) {\n // If we did, return h1 from the document if it exists\n const h1 = $('h1');\n if (h1.length === 1) {\n title = h1.text();\n }\n }\n\n // strip any html tags in the title text\n return normalizeSpaces(stripTags(title, $).trim());\n}\n","import URL from 'url';\nimport wuzzy from 'wuzzy';\n\nimport { TITLE_SPLITTERS_RE, DOMAIN_ENDINGS_RE } from './constants';\n\nfunction extractBreadcrumbTitle(splitTitle, text) {\n // This must be a very breadcrumbed title, like:\n // The Best Gadgets on Earth : Bits : Blogs : NYTimes.com\n // NYTimes - Blogs - Bits - The Best Gadgets on Earth\n if (splitTitle.length >= 6) {\n // Look to see if we can find a breadcrumb splitter that happens\n // more than once. If we can, we'll be able to better pull out\n // the title.\n const termCounts = splitTitle.reduce((acc, titleText) => {\n acc[titleText] = acc[titleText] ? acc[titleText] + 1 : 1;\n return acc;\n }, {});\n\n const [maxTerm, termCount] = Reflect.ownKeys(termCounts).reduce(\n (acc, key) => {\n if (acc[1] < termCounts[key]) {\n return [key, termCounts[key]];\n }\n\n return acc;\n },\n [0, 0]\n );\n\n // We found a splitter that was used more than once, so it\n // is probably the breadcrumber. Split our title on that instead.\n // Note: max_term should be <= 4 characters, so that \" >> \"\n // will match, but nothing longer than that.\n if (termCount >= 2 && maxTerm.length <= 4) {\n splitTitle = text.split(maxTerm);\n }\n\n const splitEnds = [splitTitle[0], splitTitle.slice(-1)];\n const longestEnd = splitEnds.reduce(\n (acc, end) => (acc.length > end.length ? acc : end),\n ''\n );\n\n if (longestEnd.length > 10) {\n return longestEnd;\n }\n\n return text;\n }\n\n return null;\n}\n\nfunction cleanDomainFromTitle(splitTitle, url) {\n // Search the ends of the title, looking for bits that fuzzy match\n // the URL too closely. If one is found, discard it and return the\n // rest.\n //\n // Strip out the big TLDs - it just makes the matching a bit more\n // accurate. Not the end of the world if it doesn't strip right.\n const { host } = URL.parse(url);\n const nakedDomain = host.replace(DOMAIN_ENDINGS_RE, '');\n\n const startSlug = splitTitle[0].toLowerCase().replace(' ', '');\n const startSlugRatio = wuzzy.levenshtein(startSlug, nakedDomain);\n\n if (startSlugRatio > 0.4 && startSlug.length > 5) {\n return splitTitle.slice(2).join('');\n }\n\n const endSlug = splitTitle\n .slice(-1)[0]\n .toLowerCase()\n .replace(' ', '');\n const endSlugRatio = wuzzy.levenshtein(endSlug, nakedDomain);\n\n if (endSlugRatio > 0.4 && endSlug.length >= 5) {\n return splitTitle.slice(0, -2).join('');\n }\n\n return null;\n}\n\n// Given a title with separators in it (colons, dashes, etc),\n// resolve whether any of the segments should be removed.\nexport default function resolveSplitTitle(title, url = '') {\n // Splits while preserving splitters, like:\n // ['The New New York', ' - ', 'The Washington Post']\n const splitTitle = title.split(TITLE_SPLITTERS_RE);\n if (splitTitle.length === 1) {\n return title;\n }\n\n let newTitle = extractBreadcrumbTitle(splitTitle, title);\n if (newTitle) return newTitle;\n\n newTitle = cleanDomainFromTitle(splitTitle, url);\n if (newTitle) return newTitle;\n\n // Fuzzy ratio didn't find anything, so this title is probably legit.\n // Just return it all.\n return title;\n}\n","import cleanAuthor from './author';\nimport cleanImage from './lead-image-url';\nimport cleanDek from './dek';\nimport cleanDatePublished from './date-published';\nimport cleanContent from './content';\nimport cleanTitle from './title';\n\nconst Cleaners = {\n author: cleanAuthor,\n lead_image_url: cleanImage,\n dek: cleanDek,\n date_published: cleanDatePublished,\n content: cleanContent,\n title: cleanTitle,\n};\n\nexport default Cleaners;\n\nexport { cleanAuthor };\nexport { cleanImage };\nexport { cleanDek };\nexport { cleanDatePublished };\nexport { cleanContent };\nexport { cleanTitle };\nexport { default as resolveSplitTitle } from './resolve-split-title';\n","import { stripUnlikelyCandidates, convertToParagraphs } from 'utils/dom';\n\nimport { scoreContent, findTopCandidate } from './scoring';\n\n// Using a variety of scoring techniques, extract the content most\n// likely to be article text.\n//\n// If strip_unlikely_candidates is True, remove any elements that\n// match certain criteria first. (Like, does this element have a\n// classname of \"comment\")\n//\n// If weight_nodes is True, use classNames and IDs to determine the\n// worthiness of nodes.\n//\n// Returns a cheerio object $\nexport default function extractBestNode($, opts) {\n if (opts.stripUnlikelyCandidates) {\n $ = stripUnlikelyCandidates($);\n }\n\n $ = convertToParagraphs($);\n $ = scoreContent($, opts.weightNodes);\n const $topCandidate = findTopCandidate($);\n\n return $topCandidate;\n}\n","import cheerio from 'cheerio';\n\nimport { nodeIsSufficient } from 'utils/dom';\nimport { cleanContent } from 'cleaners';\nimport { normalizeSpaces } from 'utils/text';\n\nimport extractBestNode from './extract-best-node';\n\nconst GenericContentExtractor = {\n defaultOpts: {\n stripUnlikelyCandidates: true,\n weightNodes: true,\n cleanConditionally: true,\n },\n\n // Extract the content for this resource - initially, pass in our\n // most restrictive opts which will return the highest quality\n // content. On each failure, retry with slightly more lax opts.\n //\n // :param return_type: string. If \"node\", should return the content\n // as a cheerio node rather than as an HTML string.\n //\n // Opts:\n // stripUnlikelyCandidates: Remove any elements that match\n // non-article-like criteria first.(Like, does this element\n // have a classname of \"comment\")\n //\n // weightNodes: Modify an elements score based on whether it has\n // certain classNames or IDs. Examples: Subtract if a node has\n // a className of 'comment', Add if a node has an ID of\n // 'entry-content'.\n //\n // cleanConditionally: Clean the node to return of some\n // superfluous content. Things like forms, ads, etc.\n extract({ $, html, title, url }, opts) {\n opts = { ...this.defaultOpts, ...opts };\n\n $ = $ || cheerio.load(html);\n\n // Cascade through our extraction-specific opts in an ordered fashion,\n // turning them off as we try to extract content.\n let node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n return this.cleanAndReturnNode(node, $);\n }\n\n // We didn't succeed on first pass, one by one disable our\n // extraction opts and try again.\n // eslint-disable-next-line no-restricted-syntax\n for (const key of Reflect.ownKeys(opts).filter(k => opts[k] === true)) {\n opts[key] = false;\n $ = cheerio.load(html);\n\n node = this.getContentNode($, title, url, opts);\n\n if (nodeIsSufficient(node)) {\n break;\n }\n }\n\n return this.cleanAndReturnNode(node, $);\n },\n\n // Get node given current options\n getContentNode($, title, url, opts) {\n return cleanContent(extractBestNode($, opts), {\n $,\n cleanConditionally: opts.cleanConditionally,\n title,\n url,\n });\n },\n\n // Once we got here, either we're at our last-resort node, or\n // we broke early. Make sure we at least have -something- before we\n // move forward.\n cleanAndReturnNode(node, $) {\n if (!node) {\n return null;\n }\n\n return normalizeSpaces($.html(node));\n },\n};\n\nexport default GenericContentExtractor;\n","// TODO: It would be great if we could merge the meta and selector lists into\n// a list of objects, because we could then rank them better. For example,\n// .hentry .entry-title is far better suited than <meta title>.\n\n// An ordered list of meta tag names that denote likely article titles. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\nexport const STRONG_TITLE_META_TAGS = [\n 'tweetmeme-title',\n 'dc.title',\n 'rbtitle',\n 'headline',\n 'title',\n];\n\n// og:title is weak because it typically contains context that we don't like,\n// for example the source site's name. Gotta get that brand into facebook!\nexport const WEAK_TITLE_META_TAGS = ['og:title'];\n\n// An ordered list of XPath Selectors to find likely article titles. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const STRONG_TITLE_SELECTORS = [\n '.hentry .entry-title',\n 'h1#articleHeader',\n 'h1.articleHeader',\n 'h1.article',\n '.instapaper_title',\n '#meebo-title',\n];\n\nexport const WEAK_TITLE_SELECTORS = [\n 'article h1',\n '#entry-title',\n '.entry-title',\n '#entryTitle',\n '#entrytitle',\n '.entryTitle',\n '.entrytitle',\n '#articleTitle',\n '.articleTitle',\n 'post post-title',\n 'h1.title',\n 'h2.article',\n 'h1',\n 'html head title',\n 'title',\n];\n","import { cleanTitle } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\n\nimport {\n STRONG_TITLE_META_TAGS,\n WEAK_TITLE_META_TAGS,\n STRONG_TITLE_SELECTORS,\n WEAK_TITLE_SELECTORS,\n} from './constants';\n\nconst GenericTitleExtractor = {\n extract({ $, url, metaCache }) {\n // First, check to see if we have a matching meta tag that we can make\n // use of that is strongly associated with the headline.\n let title;\n\n title = extractFromMeta($, STRONG_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Second, look through our content selectors for the most likely\n // article title that is strongly associated with the headline.\n title = extractFromSelectors($, STRONG_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // Third, check for weaker meta tags that may match.\n title = extractFromMeta($, WEAK_TITLE_META_TAGS, metaCache);\n if (title) return cleanTitle(title, { url, $ });\n\n // Last, look for weaker selector tags that may match.\n title = extractFromSelectors($, WEAK_TITLE_SELECTORS);\n if (title) return cleanTitle(title, { url, $ });\n\n // If no matches, return an empty string\n return '';\n },\n};\n\nexport default GenericTitleExtractor;\n","// An ordered list of meta tag names that denote likely article authors. All\n// attributes should be lowercase for faster case-insensitive matching. From\n// most distinct to least distinct.\n//\n// Note: \"author\" is too often the -developer- of the page, so it is not\n// added here.\nexport const AUTHOR_META_TAGS = [\n 'byl',\n 'clmst',\n 'dc.author',\n 'dcsext.author',\n 'dc.creator',\n 'rbauthors',\n 'authors',\n];\n\nexport const AUTHOR_MAX_LENGTH = 300;\n\n// An ordered list of XPath Selectors to find likely article authors. From\n// most explicit to least explicit.\n//\n// Note - this does not use classes like CSS. This checks to see if the string\n// exists in the className, which is not as accurate as .className (which\n// splits on spaces/endlines), but for our purposes it's close enough. The\n// speed tradeoff is worth the accuracy hit.\nexport const AUTHOR_SELECTORS = [\n '.entry .entry-author',\n '.author.vcard .fn',\n '.author .vcard .fn',\n '.byline.vcard .fn',\n '.byline .vcard .fn',\n '.byline .by .author',\n '.byline .by',\n '.byline .author',\n '.post-author.vcard',\n '.post-author .vcard',\n 'a[rel=author]',\n '#by_author',\n '.by_author',\n '#entryAuthor',\n '.entryAuthor',\n '.byline a[href*=author]',\n '#author .authorname',\n '.author .authorname',\n '#author',\n '.author',\n '.articleauthor',\n '.ArticleAuthor',\n '.byline',\n];\n\n// An ordered list of Selectors to find likely article authors, with\n// regular expression for content.\nconst bylineRe = /^[\\n\\s]*By/i;\nexport const BYLINE_SELECTORS_RE = [\n ['#byline', bylineRe],\n ['.byline', bylineRe],\n];\n","import { cleanAuthor } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\n\nimport {\n AUTHOR_META_TAGS,\n AUTHOR_MAX_LENGTH,\n AUTHOR_SELECTORS,\n BYLINE_SELECTORS_RE,\n} from './constants';\n\nconst GenericAuthorExtractor = {\n extract({ $, metaCache }) {\n let author;\n\n // First, check to see if we have a matching\n // meta tag that we can make use of.\n author = extractFromMeta($, AUTHOR_META_TAGS, metaCache);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Second, look through our selectors looking for potential authors.\n author = extractFromSelectors($, AUTHOR_SELECTORS, 2);\n if (author && author.length < AUTHOR_MAX_LENGTH) {\n return cleanAuthor(author);\n }\n\n // Last, use our looser regular-expression based selectors for\n // potential authors.\n // eslint-disable-next-line no-restricted-syntax\n for (const [selector, regex] of BYLINE_SELECTORS_RE) {\n const node = $(selector);\n if (node.length === 1) {\n const text = node.text();\n if (regex.test(text)) {\n return cleanAuthor(text);\n }\n }\n }\n\n return null;\n },\n};\n\nexport default GenericAuthorExtractor;\n","// An ordered list of meta tag names that denote\n// likely date published dates. All attributes\n// should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const DATE_PUBLISHED_META_TAGS = [\n 'article:published_time',\n 'displaydate',\n 'dc.date',\n 'dc.date.issued',\n 'rbpubdate',\n 'publish_date',\n 'pub_date',\n 'pagedate',\n 'pubdate',\n 'revision_date',\n 'doc_date',\n 'date_created',\n 'content_create_date',\n 'lastmodified',\n 'created',\n 'date',\n];\n\n// An ordered list of XPath Selectors to find\n// likely date published dates. From most explicit\n// to least explicit.\nexport const DATE_PUBLISHED_SELECTORS = [\n '.hentry .dtstamp.published',\n '.hentry .published',\n '.hentry .dtstamp.updated',\n '.hentry .updated',\n '.single .published',\n '.meta .published',\n '.meta .postDate',\n '.entry-date',\n '.byline .date',\n '.postmetadata .date',\n '.article_datetime',\n '.date-header',\n '.story-date',\n '.dateStamp',\n '#story .datetime',\n '.dateline',\n '.pubdate',\n];\n\n// An ordered list of compiled regular expressions to find likely date\n// published dates from the URL. These should always have the first\n// reference be a date string that is parseable by dateutil.parser.parse\nconst abbrevMonthsStr = '(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)';\nexport const DATE_PUBLISHED_URL_RES = [\n new RegExp('/(20\\\\d{2}/\\\\d{2}/\\\\d{2})/', 'i'),\n new RegExp('(20\\\\d{2}-[01]\\\\d-[0-3]\\\\d)', 'i'),\n new RegExp(`/(20\\\\d{2}/${abbrevMonthsStr}/[0-3]\\\\d)/`, 'i'),\n];\n","import { cleanDatePublished } from 'cleaners';\nimport { extractFromMeta, extractFromSelectors } from 'utils/dom';\nimport { extractFromUrl } from 'utils/text';\n\nimport {\n DATE_PUBLISHED_META_TAGS,\n DATE_PUBLISHED_SELECTORS,\n DATE_PUBLISHED_URL_RES,\n} from './constants';\n\nconst GenericDatePublishedExtractor = {\n extract({ $, url, metaCache }) {\n let datePublished;\n // First, check to see if we have a matching meta tag\n // that we can make use of.\n // Don't try cleaning tags from this string\n datePublished = extractFromMeta(\n $,\n DATE_PUBLISHED_META_TAGS,\n metaCache,\n false\n );\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Second, look through our selectors looking for potential\n // date_published's.\n datePublished = extractFromSelectors($, DATE_PUBLISHED_SELECTORS);\n if (datePublished) return cleanDatePublished(datePublished);\n\n // Lastly, look to see if a dately string exists in the URL\n datePublished = extractFromUrl(url, DATE_PUBLISHED_URL_RES);\n if (datePublished) return cleanDatePublished(datePublished);\n\n return null;\n },\n};\n\nexport default GenericDatePublishedExtractor;\n","// Currently there is only one selector for\n// deks. We should simply return null here\n// until we have a more robust generic option.\n// Below is the original source for this, for reference.\nconst GenericDekExtractor = {\n extract() {\n return null;\n },\n};\n\nexport default GenericDekExtractor;\n","// An ordered list of meta tag names that denote likely article leading images.\n// All attributes should be lowercase for faster case-insensitive matching.\n// From most distinct to least distinct.\nexport const LEAD_IMAGE_URL_META_TAGS = [\n 'og:image',\n 'twitter:image',\n 'image_src',\n];\n\nexport const LEAD_IMAGE_URL_SELECTORS = ['link[rel=image_src]'];\n\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS = [\n 'upload',\n 'wp-content',\n 'large',\n 'photo',\n 'wp-image',\n];\nexport const POSITIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(\n POSITIVE_LEAD_IMAGE_URL_HINTS.join('|'),\n 'i'\n);\n\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS = [\n 'spacer',\n 'sprite',\n 'blank',\n 'throbber',\n 'gradient',\n 'tile',\n 'bg',\n 'background',\n 'icon',\n 'social',\n 'header',\n 'hdr',\n 'advert',\n 'spinner',\n 'loader',\n 'loading',\n 'default',\n 'rating',\n 'share',\n 'facebook',\n 'twitter',\n 'theme',\n 'promo',\n 'ads',\n 'wp-includes',\n];\nexport const NEGATIVE_LEAD_IMAGE_URL_HINTS_RE = new RegExp(\n NEGATIVE_LEAD_IMAGE_URL_HINTS.join('|'),\n 'i'\n);\n\nexport const GIF_RE = /\\.gif(\\?.*)?$/i;\nexport const JPG_RE = /\\.jpe?g(\\?.*)?$/i;\n","import {\n POSITIVE_LEAD_IMAGE_URL_HINTS_RE,\n NEGATIVE_LEAD_IMAGE_URL_HINTS_RE,\n GIF_RE,\n JPG_RE,\n} from './constants';\n\nimport { PHOTO_HINTS_RE } from '../content/scoring/constants';\n\nfunction getSig($node) {\n return `${$node.attr('class') || ''} ${$node.attr('id') || ''}`;\n}\n\n// Scores image urls based on a variety of heuristics.\nexport function scoreImageUrl(url) {\n url = url.trim();\n let score = 0;\n\n if (POSITIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score += 20;\n }\n\n if (NEGATIVE_LEAD_IMAGE_URL_HINTS_RE.test(url)) {\n score -= 20;\n }\n\n // TODO: We might want to consider removing this as\n // gifs are much more common/popular than they once were\n if (GIF_RE.test(url)) {\n score -= 10;\n }\n\n if (JPG_RE.test(url)) {\n score += 10;\n }\n\n // PNGs are neutral.\n\n return score;\n}\n\n// Alt attribute usually means non-presentational image.\nexport function scoreAttr($img) {\n if ($img.attr('alt')) {\n return 5;\n }\n\n return 0;\n}\n\n// Look through our parent and grandparent for figure-like\n// container elements, give a bonus if we find them\nexport function scoreByParents($img) {\n let score = 0;\n const $figParent = $img.parents('figure').first();\n\n if ($figParent.length === 1) {\n score += 25;\n }\n\n const $parent = $img.parent();\n let $gParent;\n if ($parent.length === 1) {\n $gParent = $parent.parent();\n }\n\n [$parent, $gParent].forEach($node => {\n if (PHOTO_HINTS_RE.test(getSig($node))) {\n score += 15;\n }\n });\n\n return score;\n}\n\n// Look at our immediate sibling and see if it looks like it's a\n// caption. Bonus if so.\nexport function scoreBySibling($img) {\n let score = 0;\n const $sibling = $img.next();\n const sibling = $sibling.get(0);\n\n if (sibling && sibling.tagName.toLowerCase() === 'figcaption') {\n score += 25;\n }\n\n if (PHOTO_HINTS_RE.test(getSig($sibling))) {\n score += 15;\n }\n\n return score;\n}\n\nexport function scoreByDimensions($img) {\n let score = 0;\n\n const width = parseFloat($img.attr('width'));\n const height = parseFloat($img.attr('height'));\n const src = $img.attr('src');\n\n // Penalty for skinny images\n if (width && width <= 50) {\n score -= 50;\n }\n\n // Penalty for short images\n if (height && height <= 50) {\n score -= 50;\n }\n\n if (width && height && !src.includes('sprite')) {\n const area = width * height;\n if (area < 5000) {\n // Smaller than 50 x 100\n score -= 100;\n } else {\n score += Math.round(area / 1000);\n }\n }\n\n return score;\n}\n\nexport function scoreByPosition($imgs, index) {\n return $imgs.length / 2 - index;\n}\n","import { extractFromMeta } from 'utils/dom';\nimport { cleanImage } from 'cleaners';\n\nimport {\n LEAD_IMAGE_URL_META_TAGS,\n LEAD_IMAGE_URL_SELECTORS,\n} from './constants';\n\nimport {\n scoreImageUrl,\n scoreAttr,\n scoreByParents,\n scoreBySibling,\n scoreByDimensions,\n scoreByPosition,\n} from './score-image';\n\n// Given a resource, try to find the lead image URL from within\n// it. Like content and next page extraction, uses a scoring system\n// to determine what the most likely image may be. Short circuits\n// on really probable things like og:image meta tags.\n//\n// Potential signals to still take advantage of:\n// * domain\n// * weird aspect ratio\nconst GenericLeadImageUrlExtractor = {\n extract({ $, content, metaCache, html }) {\n let cleanUrl;\n if (!$.browser && $('head').length === 0) {\n $('*')\n .first()\n .prepend(html);\n }\n\n // Check to see if we have a matching meta tag that we can make use of.\n // Moving this higher because common practice is now to use large\n // images on things like Open Graph or Twitter cards.\n // images usually have for things like Open Graph.\n const imageUrl = extractFromMeta(\n $,\n LEAD_IMAGE_URL_META_TAGS,\n metaCache,\n false\n );\n\n if (imageUrl) {\n cleanUrl = cleanImage(imageUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // Next, try to find the \"best\" image via the content.\n // We'd rather not have to fetch each image and check dimensions,\n // so try to do some analysis and determine them instead.\n const $content = $(content);\n const imgs = $('img', $content).toArray();\n const imgScores = {};\n\n imgs.forEach((img, index) => {\n const $img = $(img);\n const src = $img.attr('src');\n\n if (!src) return;\n\n let score = scoreImageUrl(src);\n score += scoreAttr($img);\n score += scoreByParents($img);\n score += scoreBySibling($img);\n score += scoreByDimensions($img);\n score += scoreByPosition(imgs, index);\n\n imgScores[src] = score;\n });\n\n const [topUrl, topScore] = Reflect.ownKeys(imgScores).reduce(\n (acc, key) => (imgScores[key] > acc[1] ? [key, imgScores[key]] : acc),\n [null, 0]\n );\n\n if (topScore > 0) {\n cleanUrl = cleanImage(topUrl);\n\n if (cleanUrl) return cleanUrl;\n }\n\n // If nothing else worked, check to see if there are any really\n // probable nodes in the doc, like <link rel=\"image_src\" />.\n // eslint-disable-next-line no-restricted-syntax\n for (const selector of LEAD_IMAGE_URL_SELECTORS) {\n const $node = $(selector).first();\n const src = $node.attr('src');\n if (src) {\n cleanUrl = cleanImage(src);\n if (cleanUrl) return cleanUrl;\n }\n\n const href = $node.attr('href');\n if (href) {\n cleanUrl = cleanImage(href);\n if (cleanUrl) return cleanUrl;\n }\n\n const value = $node.attr('value');\n if (value) {\n cleanUrl = cleanImage(value);\n if (cleanUrl) return cleanUrl;\n }\n }\n\n return null;\n },\n};\n\nexport default GenericLeadImageUrlExtractor;\n","import difflib from 'difflib';\n\nexport default function scoreSimilarity(score, articleUrl, href) {\n // Do this last and only if we have a real candidate, because it's\n // potentially expensive computationally. Compare the link to this\n // URL using difflib to get the % similarity of these URLs. On a\n // sliding scale, subtract points from this link based on\n // similarity.\n if (score > 0) {\n const similarity = new difflib.SequenceMatcher(\n null,\n articleUrl,\n href\n ).ratio();\n // Subtract .1 from diff_percent when calculating modifier,\n // which means that if it's less than 10% different, we give a\n // bonus instead. Ex:\n // 3% different = +17.5 points\n // 10% different = 0 points\n // 20% different = -25 points\n const diffPercent = 1.0 - similarity;\n const diffModifier = -(250 * (diffPercent - 0.2));\n return score + diffModifier;\n }\n\n return 0;\n}\n","import { IS_DIGIT_RE } from 'utils/text/constants';\n\nexport default function scoreLinkText(linkText, pageNum) {\n // If the link text can be parsed as a number, give it a minor\n // bonus, with a slight bias towards lower numbered pages. This is\n // so that pages that might not have 'next' in their text can still\n // get scored, and sorted properly by score.\n let score = 0;\n\n if (IS_DIGIT_RE.test(linkText.trim())) {\n const linkTextAsNum = parseInt(linkText, 10);\n // If it's the first page, we already got it on the first call.\n // Give it a negative score. Otherwise, up to page 10, give a\n // small bonus.\n if (linkTextAsNum < 2) {\n score = -30;\n } else {\n score = Math.max(0, 10 - linkTextAsNum);\n }\n\n // If it appears that the current page number is greater than\n // this links page number, it's a very bad sign. Give it a big\n // penalty.\n if (pageNum && pageNum >= linkTextAsNum) {\n score -= 50;\n }\n }\n\n return score;\n}\n","export default function scorePageInLink(pageNum, isWp) {\n // page in the link = bonus. Intentionally ignore wordpress because\n // their ?p=123 link style gets caught by this even though it means\n // separate documents entirely.\n if (pageNum && !isWp) {\n return 50;\n }\n\n return 0;\n}\n","export const DIGIT_RE = /\\d/;\n\n// A list of words that, if found in link text or URLs, likely mean that\n// this link is not a next page link.\nexport const EXTRANEOUS_LINK_HINTS = [\n 'print',\n 'archive',\n 'comment',\n 'discuss',\n 'e-mail',\n 'email',\n 'share',\n 'reply',\n 'all',\n 'login',\n 'sign',\n 'single',\n 'adx',\n 'entry-unrelated',\n];\nexport const EXTRANEOUS_LINK_HINTS_RE = new RegExp(\n EXTRANEOUS_LINK_HINTS.join('|'),\n 'i'\n);\n\n// Match any link text/classname/id that looks like it could mean the next\n// page. Things like: next, continue, >, >>, » but not >|, »| as those can\n// mean last page.\nexport const NEXT_LINK_TEXT_RE = new RegExp(\n '(next|weiter|continue|>([^|]|$)|»([^|]|$))',\n 'i'\n);\n\n// Match any link text/classname/id that looks like it is an end link: things\n// like \"first\", \"last\", \"end\", etc.\nexport const CAP_LINK_TEXT_RE = new RegExp('(first|last|end)', 'i');\n\n// Match any link text/classname/id that looks like it means the previous\n// page.\nexport const PREV_LINK_TEXT_RE = new RegExp('(prev|earl|old|new|<|«)', 'i');\n\n// Match any phrase that looks like it could be page, or paging, or pagination\nexport const PAGE_RE = new RegExp('pag(e|ing|inat)', 'i');\n","import { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function scoreExtraneousLinks(href) {\n // If the URL itself contains extraneous values, give a penalty.\n if (EXTRANEOUS_LINK_HINTS_RE.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { range } from 'utils';\nimport {\n NEGATIVE_SCORE_RE,\n POSITIVE_SCORE_RE,\n PAGE_RE,\n} from 'utils/dom/constants';\nimport { EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nfunction makeSig($link) {\n return `${$link.attr('class') || ''} ${$link.attr('id') || ''}`;\n}\n\nexport default function scoreByParents($link) {\n // If a parent node contains paging-like classname or id, give a\n // bonus. Additionally, if a parent_node contains bad content\n // (like 'sponsor'), give a penalty.\n let $parent = $link.parent();\n let positiveMatch = false;\n let negativeMatch = false;\n let score = 0;\n\n Array.from(range(0, 4)).forEach(() => {\n if ($parent.length === 0) {\n return;\n }\n\n const parentData = makeSig($parent, ' ');\n\n // If we have 'page' or 'paging' in our data, that's a good\n // sign. Add a bonus.\n if (!positiveMatch && PAGE_RE.test(parentData)) {\n positiveMatch = true;\n score += 25;\n }\n\n // If we have 'comment' or something in our data, and\n // we don't have something like 'content' as well, that's\n // a bad sign. Give a penalty.\n if (\n !negativeMatch &&\n NEGATIVE_SCORE_RE.test(parentData) &&\n EXTRANEOUS_LINK_HINTS_RE.test(parentData)\n ) {\n if (!POSITIVE_SCORE_RE.test(parentData)) {\n negativeMatch = true;\n score -= 25;\n }\n }\n\n $parent = $parent.parent();\n });\n\n return score;\n}\n","import { PREV_LINK_TEXT_RE } from '../constants';\n\nexport default function scorePrevLink(linkData) {\n // If the link has something like \"previous\", its definitely\n // an old link, skip it.\n if (PREV_LINK_TEXT_RE.test(linkData)) {\n return -200;\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport { DIGIT_RE, EXTRANEOUS_LINK_HINTS_RE } from '../constants';\n\nexport default function shouldScore(\n href,\n articleUrl,\n baseUrl,\n parsedUrl,\n linkText,\n previousUrls\n) {\n // skip if we've already fetched this url\n if (previousUrls.find(url => href === url) !== undefined) {\n return false;\n }\n\n // If we've already parsed this URL, or the URL matches the base\n // URL, or is empty, skip it.\n if (!href || href === articleUrl || href === baseUrl) {\n return false;\n }\n\n const { hostname } = parsedUrl;\n const { hostname: linkHost } = URL.parse(href);\n\n // Domain mismatch.\n if (linkHost !== hostname) {\n return false;\n }\n\n // If href doesn't contain a digit after removing the base URL,\n // it's certainly not the next page.\n const fragment = href.replace(baseUrl, '');\n if (!DIGIT_RE.test(fragment)) {\n return false;\n }\n\n // This link has extraneous content (like \"comment\") in its link\n // text, so we skip it.\n if (EXTRANEOUS_LINK_HINTS_RE.test(linkText)) {\n return false;\n }\n\n // Next page link text is never long, skip if it is too long.\n if (linkText.length > 25) {\n return false;\n }\n\n return true;\n}\n","export default function scoreBaseUrl(href, baseRegex) {\n // If the baseUrl isn't part of this URL, penalize this\n // link. It could still be the link, but the odds are lower.\n // Example:\n // http://www.actionscript.org/resources/articles/745/1/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page1.html\n if (!baseRegex.test(href)) {\n return -25;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreNextLinkText(linkData) {\n // Things like \"next\", \">>\", etc.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return 50;\n }\n\n return 0;\n}\n","import { NEXT_LINK_TEXT_RE, CAP_LINK_TEXT_RE } from '../constants';\n\nexport default function scoreCapLinks(linkData) {\n // Cap links are links like \"last\", etc.\n if (CAP_LINK_TEXT_RE.test(linkData)) {\n // If we found a link like \"last\", but we've already seen that\n // this link is also \"next\", it's fine. If it's not been\n // previously marked as \"next\", then it's probably bad.\n // Penalize.\n if (NEXT_LINK_TEXT_RE.test(linkData)) {\n return -65;\n }\n }\n\n return 0;\n}\n","import URL from 'url';\n\nimport { getAttrs, isWordpress } from 'utils/dom';\nimport { removeAnchor, pageNumFromUrl } from 'utils/text';\n\nimport {\n scoreSimilarity,\n scoreLinkText,\n scorePageInLink,\n scoreExtraneousLinks,\n scoreByParents,\n scorePrevLink,\n shouldScore,\n scoreBaseUrl,\n scoreCapLinks,\n scoreNextLinkText,\n} from './utils';\n\nexport function makeBaseRegex(baseUrl) {\n return new RegExp(`^${baseUrl}`, 'i');\n}\n\nfunction makeSig($link, linkText) {\n return `${linkText || $link.text()} ${$link.attr('class') || ''} ${$link.attr(\n 'id'\n ) || ''}`;\n}\n\nexport default function scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls = [],\n}) {\n parsedUrl = parsedUrl || URL.parse(articleUrl);\n const baseRegex = makeBaseRegex(baseUrl);\n const isWp = isWordpress($);\n\n // Loop through all links, looking for hints that they may be next-page\n // links. Things like having \"page\" in their textContent, className or\n // id, or being a child of a node with a page-y className or id.\n //\n // After we do that, assign each page a score, and pick the one that\n // looks most like the next page link, as long as its score is strong\n // enough to have decent confidence.\n const scoredPages = links.reduce((possiblePages, link) => {\n // Remove any anchor data since we don't do a good job\n // standardizing URLs (it's hard), we're going to do\n // some checking with and without a trailing slash\n const attrs = getAttrs(link);\n\n // if href is undefined, return\n if (!attrs.href) return possiblePages;\n\n const href = removeAnchor(attrs.href);\n const $link = $(link);\n const linkText = $link.text();\n\n if (\n !shouldScore(href, articleUrl, baseUrl, parsedUrl, linkText, previousUrls)\n ) {\n return possiblePages;\n }\n\n // ## PASSED THE FIRST-PASS TESTS. Start scoring. ##\n if (!possiblePages[href]) {\n possiblePages[href] = {\n score: 0,\n linkText,\n href,\n };\n } else {\n possiblePages[href].linkText = `${\n possiblePages[href].linkText\n }|${linkText}`;\n }\n\n const possiblePage = possiblePages[href];\n const linkData = makeSig($link, linkText);\n const pageNum = pageNumFromUrl(href);\n\n let score = scoreBaseUrl(href, baseRegex);\n score += scoreNextLinkText(linkData);\n score += scoreCapLinks(linkData);\n score += scorePrevLink(linkData);\n score += scoreByParents($link);\n score += scoreExtraneousLinks(href);\n score += scorePageInLink(pageNum, isWp);\n score += scoreLinkText(linkText, pageNum);\n score += scoreSimilarity(score, articleUrl, href);\n\n possiblePage.score = score;\n\n return possiblePages;\n }, {});\n\n return Reflect.ownKeys(scoredPages).length === 0 ? null : scoredPages;\n}\n","import URL from 'url';\n\nimport { articleBaseUrl, removeAnchor } from 'utils/text';\nimport scoreLinks from './scoring/score-links';\n\n// Looks for and returns next page url\n// for multi-page articles\nconst GenericNextPageUrlExtractor = {\n extract({ $, url, parsedUrl, previousUrls = [] }) {\n parsedUrl = parsedUrl || URL.parse(url);\n\n const articleUrl = removeAnchor(url);\n const baseUrl = articleBaseUrl(url, parsedUrl);\n\n const links = $('a[href]').toArray();\n\n const scoredLinks = scoreLinks({\n links,\n articleUrl,\n baseUrl,\n parsedUrl,\n $,\n previousUrls,\n });\n\n // If no links were scored, return null\n if (!scoredLinks) return null;\n\n // now that we've scored all possible pages,\n // find the biggest one.\n const topPage = Reflect.ownKeys(scoredLinks).reduce(\n (acc, link) => {\n const scoredLink = scoredLinks[link];\n return scoredLink.score > acc.score ? scoredLink : acc;\n },\n { score: -100 }\n );\n\n // If the score is less than 50, we're not confident enough to use it,\n // so we fail.\n if (topPage.score >= 50) {\n return topPage.href;\n }\n\n return null;\n },\n};\n\nexport default GenericNextPageUrlExtractor;\n","export const CANONICAL_META_SELECTORS = ['og:url'];\n","import URL from 'url';\nimport { extractFromMeta } from 'utils/dom';\n\nimport { CANONICAL_META_SELECTORS } from './constants';\n\nfunction parseDomain(url) {\n const parsedUrl = URL.parse(url);\n const { hostname } = parsedUrl;\n return hostname;\n}\n\nfunction result(url) {\n return {\n url,\n domain: parseDomain(url),\n };\n}\n\nconst GenericUrlExtractor = {\n extract({ $, url, metaCache }) {\n const $canonical = $('link[rel=canonical]');\n if ($canonical.length !== 0) {\n const href = $canonical.attr('href');\n if (href) {\n return result(href);\n }\n }\n\n const metaUrl = extractFromMeta($, CANONICAL_META_SELECTORS, metaCache);\n if (metaUrl) {\n return result(metaUrl);\n }\n\n return result(url);\n },\n};\n\nexport default GenericUrlExtractor;\n","export const EXCERPT_META_SELECTORS = ['og:description', 'twitter:description'];\n","import ellipsize from 'ellipsize';\n\nimport { extractFromMeta, stripTags } from 'utils/dom';\n\nimport { EXCERPT_META_SELECTORS } from './constants';\n\nexport function clean(content, $, maxLength = 200) {\n content = content.replace(/[\\s\\n]+/g, ' ').trim();\n return ellipsize(content, maxLength, { ellipse: '…' });\n}\n\nconst GenericExcerptExtractor = {\n extract({ $, content, metaCache }) {\n const excerpt = extractFromMeta($, EXCERPT_META_SELECTORS, metaCache);\n if (excerpt) {\n return clean(stripTags(excerpt, $));\n }\n // Fall back to excerpting from the extracted content\n const maxLength = 200;\n const shortContent = content.slice(0, maxLength * 5);\n return clean($(shortContent).text(), $, maxLength);\n },\n};\n\nexport default GenericExcerptExtractor;\n","import cheerio from 'cheerio';\n\nimport { normalizeSpaces } from 'utils/text';\n\nconst getWordCount = content => {\n const $ = cheerio.load(content);\n const $content = $('div').first();\n const text = normalizeSpaces($content.text());\n return text.split(/\\s/).length;\n};\n\nconst getWordCountAlt = content => {\n content = content.replace(/<[^>]*>/g, ' ');\n content = content.replace(/\\s+/g, ' ');\n content = content.trim();\n return content.split(' ').length;\n};\n\nconst GenericWordCountExtractor = {\n extract({ content }) {\n let count = getWordCount(content);\n if (count === 1) count = getWordCountAlt(content);\n return count;\n },\n};\n\nexport default GenericWordCountExtractor;\n","import cheerio from 'cheerio';\nimport stringDirection from 'string-direction';\n\nimport GenericContentExtractor from './content/extractor';\nimport GenericTitleExtractor from './title/extractor';\nimport GenericAuthorExtractor from './author/extractor';\nimport GenericDatePublishedExtractor from './date-published/extractor';\nimport GenericDekExtractor from './dek/extractor';\nimport GenericLeadImageUrlExtractor from './lead-image-url/extractor';\nimport GenericNextPageUrlExtractor from './next-page-url/extractor';\nimport GenericUrlExtractor from './url/extractor';\nimport GenericExcerptExtractor from './excerpt/extractor';\nimport GenericWordCountExtractor from './word-count/extractor';\n\nconst GenericExtractor = {\n // This extractor is the default for all domains\n domain: '*',\n title: GenericTitleExtractor.extract,\n date_published: GenericDatePublishedExtractor.extract,\n author: GenericAuthorExtractor.extract,\n content: GenericContentExtractor.extract.bind(GenericContentExtractor),\n lead_image_url: GenericLeadImageUrlExtractor.extract,\n dek: GenericDekExtractor.extract,\n next_page_url: GenericNextPageUrlExtractor.extract,\n url_and_domain: GenericUrlExtractor.extract,\n excerpt: GenericExcerptExtractor.extract,\n word_count: GenericWordCountExtractor.extract,\n direction: ({ title }) => stringDirection.getDirection(title),\n\n extract(options) {\n const { html, $ } = options;\n\n if (html && !$) {\n const loaded = cheerio.load(html);\n options.$ = loaded;\n }\n\n const title = this.title(options);\n const date_published = this.date_published(options);\n const author = this.author(options);\n const content = this.content({ ...options, title });\n const lead_image_url = this.lead_image_url({ ...options, content });\n const dek = this.dek({ ...options, content });\n const next_page_url = this.next_page_url(options);\n const excerpt = this.excerpt({ ...options, content });\n const word_count = this.word_count({ ...options, content });\n const direction = this.direction({ title });\n const { url, domain } = this.url_and_domain(options);\n\n return {\n title,\n author,\n date_published: date_published || null,\n dek,\n lead_image_url,\n content,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n };\n },\n};\n\nexport default GenericExtractor;\n","import { MediumExtractor, BloggerExtractor } from './custom';\n\nconst Detectors = {\n 'meta[name=\"al:ios:app_name\"][value=\"Medium\"]': MediumExtractor,\n 'meta[name=\"generator\"][value=\"blogger\"]': BloggerExtractor,\n};\n\nexport default function detectByHtml($) {\n const selector = Reflect.ownKeys(Detectors).find(s => $(s).length > 0);\n\n return Detectors[selector];\n}\n","import URL from 'url';\n\nimport Extractors from './all';\nimport GenericExtractor from './generic';\nimport detectByHtml from './detect-by-html';\nimport { apiExtractors } from './add-extractor';\n\nexport default function getExtractor(url, parsedUrl, $) {\n parsedUrl = parsedUrl || URL.parse(url);\n const { hostname } = parsedUrl;\n const baseDomain = hostname\n .split('.')\n .slice(-2)\n .join('.');\n\n return (\n apiExtractors[hostname] ||\n apiExtractors[baseDomain] ||\n Extractors[hostname] ||\n Extractors[baseDomain] ||\n detectByHtml($) ||\n GenericExtractor\n );\n}\n","import Cleaners from 'cleaners';\nimport { convertNodeTo, makeLinksAbsolute } from 'utils/dom';\nimport GenericExtractor from './generic';\n\n// Remove elements by an array of selectors\nexport function cleanBySelectors($content, $, { clean }) {\n if (!clean) return $content;\n\n $(clean.join(','), $content).remove();\n\n return $content;\n}\n\n// Transform matching elements\nexport function transformElements($content, $, { transforms }) {\n if (!transforms) return $content;\n\n Reflect.ownKeys(transforms).forEach(key => {\n const $matches = $(key, $content);\n const value = transforms[key];\n\n // If value is a string, convert directly\n if (typeof value === 'string') {\n $matches.each((index, node) => {\n convertNodeTo($(node), $, transforms[key]);\n });\n } else if (typeof value === 'function') {\n // If value is function, apply function to node\n $matches.each((index, node) => {\n const result = value($(node), $);\n // If function returns a string, convert node to that value\n if (typeof result === 'string') {\n convertNodeTo($(node), $, result);\n }\n });\n }\n });\n\n return $content;\n}\n\nfunction findMatchingSelector($, selectors, extractHtml, allowMultiple) {\n return selectors.find(selector => {\n if (Array.isArray(selector)) {\n if (extractHtml) {\n return selector.reduce((acc, s) => acc && $(s).length > 0, true);\n }\n\n const [s, attr] = selector;\n return (\n (allowMultiple || (!allowMultiple && $(s).length === 1)) &&\n $(s).attr(attr) &&\n $(s)\n .attr(attr)\n .trim() !== ''\n );\n }\n\n return (\n (allowMultiple || (!allowMultiple && $(selector).length === 1)) &&\n $(selector)\n .text()\n .trim() !== ''\n );\n });\n}\n\nexport function select(opts) {\n const { $, type, extractionOpts, extractHtml = false } = opts;\n // Skip if there's not extraction for this type\n if (!extractionOpts) return null;\n\n // If a string is hardcoded for a type (e.g., Wikipedia\n // contributors), return the string\n if (typeof extractionOpts === 'string') return extractionOpts;\n\n const { selectors, defaultCleaner = true, allowMultiple } = extractionOpts;\n\n const overrideAllowMultiple = type === 'lead_image_url' || allowMultiple;\n\n const matchingSelector = findMatchingSelector(\n $,\n selectors,\n extractHtml,\n overrideAllowMultiple\n );\n\n if (!matchingSelector) return null;\n\n function transformAndClean($node) {\n makeLinksAbsolute($node, $, opts.url || '');\n cleanBySelectors($node, $, extractionOpts);\n transformElements($node, $, extractionOpts);\n return $node;\n }\n\n function selectHtml() {\n // If the selector type requests html as its return type\n // transform and clean the element with provided selectors\n let $content;\n\n // If matching selector is an array, we're considering this a\n // multi-match selection, which allows the parser to choose several\n // selectors to include in the result. Note that all selectors in the\n // array must match in order for this selector to trigger\n if (Array.isArray(matchingSelector)) {\n $content = $(matchingSelector.join(','));\n const $wrapper = $('<div></div>');\n $content.each((_, element) => {\n $wrapper.append(element);\n });\n\n $content = $wrapper;\n } else {\n $content = $(matchingSelector);\n }\n\n // Wrap in div so transformation can take place on root element\n $content.wrap($('<div></div>'));\n $content = $content.parent();\n $content = transformAndClean($content);\n if (Cleaners[type]) {\n Cleaners[type]($content, { ...opts, defaultCleaner });\n }\n\n if (allowMultiple) {\n return $content\n .children()\n .toArray()\n .map(el => $.html($(el)));\n }\n\n return $.html($content);\n }\n\n if (extractHtml) {\n return selectHtml(matchingSelector);\n }\n\n let $match;\n let result;\n // if selector is an array (e.g., ['img', 'src']),\n // extract the attr\n if (Array.isArray(matchingSelector)) {\n const [selector, attr, transform] = matchingSelector;\n $match = $(selector);\n $match = transformAndClean($match);\n result = $match.map((_, el) => {\n const item = $(el)\n .attr(attr)\n .trim();\n return transform ? transform(item) : item;\n });\n } else {\n $match = $(matchingSelector);\n $match = transformAndClean($match);\n result = $match.map((_, el) =>\n $(el)\n .text()\n .trim()\n );\n }\n\n result =\n Array.isArray(result.toArray()) && allowMultiple\n ? result.toArray()\n : result[0];\n // Allow custom extractor to skip default cleaner\n // for this type; defaults to true\n if (defaultCleaner && Cleaners[type]) {\n return Cleaners[type](result, { ...opts, ...extractionOpts });\n }\n\n return result;\n}\n\nexport function selectExtendedTypes(extend, opts) {\n const results = {};\n Reflect.ownKeys(extend).forEach(t => {\n if (!results[t]) {\n results[t] = select({ ...opts, type: t, extractionOpts: extend[t] });\n }\n });\n return results;\n}\n\nfunction extractResult(opts) {\n const { type, extractor, fallback = true } = opts;\n\n const result = select({ ...opts, extractionOpts: extractor[type] });\n\n // If custom parser succeeds, return the result\n if (result) {\n return result;\n }\n\n // If nothing matches the selector, and fallback is enabled,\n // run the Generic extraction\n if (fallback) return GenericExtractor[type](opts);\n\n return null;\n}\n\nconst RootExtractor = {\n extract(extractor = GenericExtractor, opts) {\n const { contentOnly, extractedTitle } = opts;\n // This is the generic extractor. Run its extract method\n if (extractor.domain === '*') return extractor.extract(opts);\n\n opts = {\n ...opts,\n extractor,\n };\n\n if (contentOnly) {\n const content = extractResult({\n ...opts,\n type: 'content',\n extractHtml: true,\n title: extractedTitle,\n });\n return {\n content,\n };\n }\n let extendedResults = {};\n if (extractor.extend) {\n extendedResults = selectExtendedTypes(extractor.extend, opts);\n }\n const title = extractResult({ ...opts, type: 'title' });\n const date_published = extractResult({ ...opts, type: 'date_published' });\n const author = extractResult({ ...opts, type: 'author' });\n const next_page_url = extractResult({ ...opts, type: 'next_page_url' });\n const content = extractResult({\n ...opts,\n type: 'content',\n extractHtml: true,\n title,\n });\n const lead_image_url = extractResult({\n ...opts,\n type: 'lead_image_url',\n content,\n });\n const excerpt = extractResult({ ...opts, type: 'excerpt', content });\n const dek = extractResult({ ...opts, type: 'dek', content, excerpt });\n const word_count = extractResult({ ...opts, type: 'word_count', content });\n const direction = extractResult({ ...opts, type: 'direction', title });\n const { url, domain } = extractResult({\n ...opts,\n type: 'url_and_domain',\n }) || { url: null, domain: null };\n\n return {\n title,\n content,\n author,\n date_published,\n lead_image_url,\n dek,\n next_page_url,\n url,\n domain,\n excerpt,\n word_count,\n direction,\n ...extendedResults,\n };\n },\n};\n\nexport default RootExtractor;\n","import { removeAnchor } from 'utils/text';\nimport RootExtractor from 'extractors/root-extractor';\nimport GenericExtractor from 'extractors/generic';\nimport Resource from 'resource';\n\nexport default async function collectAllPages({\n next_page_url,\n html,\n $,\n metaCache,\n result,\n Extractor,\n title,\n url,\n}) {\n // At this point, we've fetched just the first page\n let pages = 1;\n const previousUrls = [removeAnchor(url)];\n // If we've gone over 26 pages, something has\n // likely gone wrong.\n while (next_page_url && pages < 26) {\n pages += 1;\n // eslint-disable-next-line no-await-in-loop\n $ = await Resource.create(next_page_url);\n html = $.html();\n\n const extractorOpts = {\n url: next_page_url,\n html,\n $,\n metaCache,\n extractedTitle: title,\n previousUrls,\n };\n\n const nextPageResult = RootExtractor.extract(Extractor, extractorOpts);\n\n previousUrls.push(next_page_url);\n result = {\n ...result,\n content: `${result.content}<hr><h4>Page ${pages}</h4>${\n nextPageResult.content\n }`,\n };\n\n // eslint-disable-next-line prefer-destructuring\n next_page_url = nextPageResult.next_page_url;\n }\n\n const word_count = GenericExtractor.word_count({\n content: `<div>${result.content}</div>`,\n });\n return {\n ...result,\n total_pages: pages,\n rendered_pages: pages,\n word_count,\n };\n}\n","import URL from 'url';\nimport cheerio from 'cheerio';\nimport TurndownService from 'turndown';\n\nimport Resource from 'resource';\nimport { validateUrl } from 'utils';\nimport addCustomExtractor from 'extractors/add-extractor';\nimport getExtractor from 'extractors/get-extractor';\nimport RootExtractor, { selectExtendedTypes } from 'extractors/root-extractor';\nimport collectAllPages from 'extractors/collect-all-pages';\n\nconst Parser = {\n async parse(url, { html, ...opts } = {}) {\n const {\n fetchAllPages = true,\n fallback = true,\n contentType = 'html',\n headers = {},\n extend,\n customExtractor,\n } = opts;\n\n // if no url was passed and this is the browser version,\n // set url to window.location.href and load the html\n // from the current page\n if (!url && cheerio.browser) {\n url = window.location.href; // eslint-disable-line no-undef\n html = html || cheerio.html();\n }\n\n const parsedUrl = URL.parse(url);\n\n if (!validateUrl(parsedUrl)) {\n return {\n error: true,\n message:\n 'The url parameter passed does not look like a valid URL. Please check your URL and try again.',\n };\n }\n\n const $ = await Resource.create(url, html, parsedUrl, headers);\n\n // If we found an error creating the resource, return that error\n if ($.failed) {\n return $;\n }\n\n // Add custom extractor via cli.\n if (customExtractor) {\n addCustomExtractor(customExtractor);\n }\n\n const Extractor = getExtractor(url, parsedUrl, $);\n // console.log(`Using extractor for ${Extractor.domain}`);\n\n // if html still has not been set (i.e., url passed to Parser.parse),\n // set html from the response of Resource.create\n if (!html) {\n html = $.html();\n }\n\n // Cached value of every meta name in our document.\n // Used when extracting title/author/date_published/dek\n const metaCache = $('meta')\n .map((_, node) => $(node).attr('name'))\n .toArray();\n\n let extendedTypes = {};\n if (extend) {\n extendedTypes = selectExtendedTypes(extend, { $, url, html });\n }\n\n let result = RootExtractor.extract(Extractor, {\n url,\n html,\n $,\n metaCache,\n parsedUrl,\n fallback,\n contentType,\n });\n\n const { title, next_page_url } = result;\n\n // Fetch more pages if next_page_url found\n if (fetchAllPages && next_page_url) {\n result = await collectAllPages({\n Extractor,\n next_page_url,\n html,\n $,\n metaCache,\n result,\n title,\n url,\n });\n } else {\n result = {\n ...result,\n total_pages: 1,\n rendered_pages: 1,\n };\n }\n\n if (contentType === 'markdown') {\n const turndownService = new TurndownService();\n result.content = turndownService.turndown(result.content);\n } else if (contentType === 'text') {\n result.content = $.text($(result.content));\n }\n\n return { ...result, ...extendedTypes };\n },\n\n browser: !!cheerio.browser,\n\n // A convenience method for getting a resource\n // to work with, e.g., for custom extractor generator\n fetchResource(url) {\n return Resource.create(url);\n },\n\n addExtractor(extractor) {\n return addCustomExtractor(extractor);\n },\n};\n\nexport default Parser;\n"],"names":["NORMALIZE_RE","normalizeSpaces","text","replace","trim","extractFromUrl","url","regexList","matchRe","find","re","test","exec","PAGE_IN_HREF_RE","RegExp","HAS_ALPHA_RE","IS_ALPHA_RE","IS_DIGIT_RE","ENCODING_RE","DEFAULT_ENCODING","pageNumFromUrl","matches","match","pageNum","removeAnchor","split","isGoodSegment","segment","index","firstSegmentHasLetters","goodSegment","length","toLowerCase","articleBaseUrl","parsed","parsedUrl","URL","parse","protocol","host","path","cleanedSegments","reverse","reduce","acc","rawSegment","includes","possibleSegment","fileExt","push","join","SENTENCE_END_RE","hasSentenceEnd","excerptContent","content","words","slice","getEncoding","str","encoding","iconv","encodingExists","REQUEST_HEADERS","cheerio","browser","FETCH_TIMEOUT","BAD_CONTENT_TYPES","BAD_CONTENT_TYPES_RE","MAX_CONTENT_LENGTH","get","options","resolve","reject","request","err","response","body","validateResponse","parseNon200","statusMessage","statusCode","Error","error","headers","contentType","contentLength","fetchResource","encodeURI","href","timeout","jar","gzip","followAllRedirects","window","followRedirect","message","convertMetaProp","$","from","to","each","_","node","$node","value","attr","removeAttr","normalizeMetaTags","SPACER_RE","KEEP_CLASS","KEEP_SELECTORS","STRIP_OUTPUT_TAGS","WHITELIST_ATTRS","WHITELIST_ATTRS_RE","CLEAN_CONDITIONALLY_TAGS","HEADER_TAGS","HEADER_TAG_LIST","UNLIKELY_CANDIDATES_BLACKLIST","UNLIKELY_CANDIDATES_WHITELIST","DIV_TO_P_BLOCK_TAGS","POSITIVE_SCORE_HINTS","POSITIVE_SCORE_RE","NEGATIVE_SCORE_HINTS","NEGATIVE_SCORE_RE","IS_WP_SELECTOR","PAGE_RE","BLOCK_LEVEL_TAGS","BLOCK_LEVEL_TAGS_RE","candidatesBlacklist","CANDIDATES_BLACKLIST","candidatesWhitelist","CANDIDATES_WHITELIST","stripUnlikelyCandidates","not","classes","id","classAndId","remove","brsToPs","collapsing","element","$element","nextElement","next","tagName","paragraphize","br","sibling","nextSibling","p","appendTo","replaceWith","convertDivs","div","$div","convertible","children","convertNodeTo","convertSpans","span","$span","parents","convertToParagraphs","tag","attrs","getAttrs","attribString","map","key","html","contents","cleanForHeight","$img","height","width","removeSpacers","cleanImages","$article","img","markToKeep","article","tags","hostname","addClass","stripJunkTags","cleanHOnes","$hOnes","removeAllButWhitelist","setAttrs","removeClass","cleanAttributes","parent","removeEmpty","$p","NON_TOP_CANDIDATE_TAGS","NON_TOP_CANDIDATE_TAGS_RE","HNEWS_CONTENT_SELECTORS","PHOTO_HINTS","PHOTO_HINTS_RE","READABILITY_ASSET","PARAGRAPH_SCORE_TAGS","CHILD_CONTENT_TAGS","BAD_TAGS","getWeight","score","getScore","scoreCommas","idkRe","scoreLength","textLength","chunks","lengthBonus","Math","min","max","scoreParagraph","setScore","addScore","amount","getOrInitScore","e","addToParent","weightNodes","scoreNode","addScoreTo","scorePs","$parent","rawScore","scoreContent","forEach","parentSelector","childSelector","mergeSiblings","$candidate","topScore","siblingScoreThreshold","wrappingDiv","$sibling","siblingScore","append","contentBonus","density","linkDensity","newScore","siblingContent","siblingContentLength","first","findTopCandidate","removeUnlessContent","weight","hasClass","pCount","inputCount","imgCount","nodeIsList","previousNode","prev","scriptCount","cleanTags","cleanHeaders","title","header","$header","prevAll","rewriteTopLevel","absolutize","rootUrl","baseUrl","absoluteUrl","setAttr","absolutizeSet","$content","urlSet","srcset","candidates","absoluteCandidates","candidate","parts","absoluteUrlSet","makeLinksAbsolute","totalTextLength","linkText","linkLength","extractFromMeta","metaNames","cachedNames","foundNames","filter","name","indexOf","type","nodes","values","toArray","metaValue","stripTags","isGoodNode","maxChildren","withinComment","extractFromSelectors","selectors","textOnly","selector","cleanText","commentParent","nodeClass","class","undefined","nodeIsSufficient","isWordpress","attribs","attributes","val","setAttribute","removeAttribute","IS_LINK","IMAGE_RE","IS_IMAGE","IS_SRCSET","TAGS_TO_REMOVE","convertLazyLoadedImages","extractSrcFromJSON","JSON","src","existingSrc","isComment","cleanComments","root","clean","Resource","create","preparedResponse","validResponse","result","alreadyDecoded","failed","generateDoc","encodeDoc","load","decodedContent","decode","contentTypeSelector","metaContentType","properEncoding","range","start","end","validateUrl","merge","extractor","domains","domain","mergeSupportedDomains","supportedDomains","apiExtractors","addExtractor","BloggerExtractor","transforms","noscript","author","date_published","NYMagExtractor","h1","$children","dek","WikipediaExtractor","defaultCleaner","prepend","TwitterExtractor","tweets","$tweetContainer","s","NYTimesExtractor","lead_image_url","next_page_url","excerpt","TheAtlanticExtractor","NewYorkerExtractor","timezone","WiredExtractor","MSNExtractor","YahooExtractor","BuzzfeedExtractor","h2","has","WikiaExtractor","LittleThingsExtractor","PoliticoExtractor","DeadspinExtractor","youtubeId","BroadwayWorldExtractor","ApartmentTherapyExtractor","data","sources","MediumExtractor","$text","iframe","ytRe","thumb","decodeURIComponent","$caption","empty","figure","WwwTmzComExtractor","WwwWashingtonpostComExtractor","WwwHuffingtonpostComExtractor","NewrepublicComExtractor","MoneyCnnComExtractor","WwwThevergeComExtractor","WwwCnnComExtractor","WwwAolComExtractor","WwwYoutubeComExtractor","videoId","description","WwwTheguardianComExtractor","WwwSbnationComExtractor","WwwBloombergComExtractor","WwwBustleComExtractor","WwwNprOrgExtractor","WwwRecodeNetExtractor","QzComExtractor","WwwDmagazineComExtractor","format","WwwReutersComExtractor","MashableComExtractor","WwwChicagotribuneComExtractor","WwwVoxComExtractor","imgHtml","NewsNationalgeographicComExtractor","$imgSrc","WwwNationalgeographicComExtractor","$imageParent","$dataAttrContainer","imgPath1","imgPath2","WwwLatimesComExtractor","$figure","PagesixComExtractor","ThefederalistpapersOrgExtractor","WwwCbssportsComExtractor","WwwMsnbcComExtractor","WwwThepoliticalinsiderComExtractor","WwwMentalflossComExtractor","AbcnewsGoComExtractor","WwwNydailynewsComExtractor","WwwCnbcComExtractor","WwwPopsugarComExtractor","ObserverComExtractor","PeopleComExtractor","WwwUsmagazineComExtractor","WwwRollingstoneComExtractor","twofortysevensportsComExtractor","UproxxComExtractor","WwwEonlineComExtractor","WwwMiamiheraldComExtractor","WwwRefinery29ComExtractor","WwwMacrumorsComExtractor","WwwAndroidcentralComExtractor","WwwSiComExtractor","WwwRawstoryComExtractor","WwwCnetComExtractor","WwwTodayComExtractor","WwwAlComExtractor","WwwThepennyhoarderComExtractor","WwwWesternjournalismComExtractor","WwwAmericanowComExtractor","ScienceflyComExtractor","HellogigglesComExtractor","ThoughtcatalogComExtractor","WwwInquisitrComExtractor","WwwNbcnewsComExtractor","FortuneComExtractor","WwwLinkedinComExtractor","ObamawhitehouseArchivesGovExtractor","WwwOpposingviewsComExtractor","WwwProspectmagazineCoUkExtractor","ForwardComExtractor","WwwQdailyComExtractor","GothamistComExtractor","WwwFoolComExtractor","WwwSlateComExtractor","IciRadioCanadaCaExtractor","WwwFortinetComExtractor","WwwFastcompanyComExtractor","BlisterreviewComExtractor","figcaption","NewsMynaviJpExtractor","ClinicaltrialsGovExtractor","GithubComExtractor","WwwRedditComExtractor","bgImg","css","OtrsComExtractor","WwwOssnewsJpExtractor","BuzzapJpExtractor","WwwAsahiComExtractor","WwwSanwaCoJpExtractor","WwwElecomCoJpExtractor","table","ScanNetsecurityNeJpExtractor","JvndbJvnJpExtractor","GeniusComExtractor","res","json","song","release_date","album","cover_art_url","WwwJnsaOrgExtractor","PhpspotOrgExtractor","WwwInfoqComExtractor","WwwMoongiftJpExtractor","WwwItmediaCoJpExtractor","WwwPublickey1JpExtractor","TakagihiromitsuJpExtractor","BookwalkerJpExtractor","WwwYomiuriCoJpExtractor","JapanCnetComExtractor","DeadlineComExtractor","innerHtml","WwwGizmodoJpExtractor","GetnewsJpExtractor","WwwLifehackerJpExtractor","SectIijAdJpExtractor","WwwOreillyCoJpExtractor","WwwIpaGoJpExtractor","WeeklyAsciiJpExtractor","TechlogIijAdJpExtractor","WiredJpExtractor","dataOriginal","JapanZdnetComExtractor","WwwRbbtodayComExtractor","WwwLemondeFrExtractor","WwwPhoronixComExtractor","PitchforkComExtractor","extend","BiorxivOrgExtractor","EpaperZeitDeExtractor","byline","linkbox","WwwLadbibleComExtractor","TimesofindiaIndiatimesComExtractor","reporter","MaTtiasBeExtractor","after","ul","PastebinComExtractor","ol","li","WwwAbendblattDeExtractor","o","n","i","r","charCodeAt","String","fromCharCode","WwwGrueneDeExtractor","WwwEngadgetComExtractor","ArstechnicaComExtractor","before","WwwNdtvComExtractor","SpektrumExtractor","PostlightComExtractor","WwwInvestmentexecutiveComExtractor","WwwCbcCaExtractor","CustomExtractors","CLEAN_AUTHOR_RE","TEXT_LINK_RE","MS_DATE_STRING","SEC_DATE_STRING","CLEAN_DATE_STRING_RE","TIME_MERIDIAN_SPACE_RE","TIME_MERIDIAN_DOTS_RE","TIME_NOW_STRING","timeUnits","allTimeUnits","TIME_AGO_STRING","months","allMonths","timestamp1","timestamp2","timestamp3","SPLIT_DATE_STRING","TIME_WITH_OFFSET_RE","TITLE_SPLITTERS_RE","DOMAIN_ENDINGS_RE","cleanAuthor","leadImageUrl","validUrl","isWebUri","cleanDek","dekText","cleanDateString","dateString","createDate","moment","Date","fragments","subtract","tz","parseFormat","cleanDatePublished","toISOString","date","isValid","extractCleanNode","cleanConditionally","cleanTitle","resolveSplitTitle","extractBreadcrumbTitle","splitTitle","termCounts","titleText","maxTerm","termCount","splitEnds","longestEnd","cleanDomainFromTitle","nakedDomain","startSlug","startSlugRatio","wuzzy","levenshtein","endSlug","endSlugRatio","newTitle","Cleaners","cleanImage","cleanContent","extractBestNode","opts","$topCandidate","GenericContentExtractor","defaultOpts","extract","getContentNode","cleanAndReturnNode","k","STRONG_TITLE_META_TAGS","WEAK_TITLE_META_TAGS","STRONG_TITLE_SELECTORS","WEAK_TITLE_SELECTORS","GenericTitleExtractor","metaCache","AUTHOR_META_TAGS","AUTHOR_MAX_LENGTH","AUTHOR_SELECTORS","bylineRe","BYLINE_SELECTORS_RE","GenericAuthorExtractor","regex","DATE_PUBLISHED_META_TAGS","DATE_PUBLISHED_SELECTORS","abbrevMonthsStr","DATE_PUBLISHED_URL_RES","GenericDatePublishedExtractor","datePublished","GenericDekExtractor","LEAD_IMAGE_URL_META_TAGS","LEAD_IMAGE_URL_SELECTORS","POSITIVE_LEAD_IMAGE_URL_HINTS","POSITIVE_LEAD_IMAGE_URL_HINTS_RE","NEGATIVE_LEAD_IMAGE_URL_HINTS","NEGATIVE_LEAD_IMAGE_URL_HINTS_RE","GIF_RE","JPG_RE","getSig","scoreImageUrl","scoreAttr","scoreByParents","$figParent","$gParent","scoreBySibling","scoreByDimensions","area","round","scoreByPosition","$imgs","GenericLeadImageUrlExtractor","cleanUrl","imageUrl","imgs","imgScores","topUrl","scoreSimilarity","articleUrl","similarity","difflib","SequenceMatcher","ratio","diffPercent","diffModifier","scoreLinkText","linkTextAsNum","scorePageInLink","isWp","DIGIT_RE","EXTRANEOUS_LINK_HINTS","EXTRANEOUS_LINK_HINTS_RE","NEXT_LINK_TEXT_RE","CAP_LINK_TEXT_RE","PREV_LINK_TEXT_RE","scoreExtraneousLinks","makeSig","$link","positiveMatch","negativeMatch","parentData","scorePrevLink","linkData","shouldScore","previousUrls","linkHost","fragment","scoreBaseUrl","baseRegex","scoreNextLinkText","scoreCapLinks","makeBaseRegex","scoreLinks","links","scoredPages","possiblePages","link","possiblePage","GenericNextPageUrlExtractor","scoredLinks","topPage","scoredLink","CANONICAL_META_SELECTORS","parseDomain","GenericUrlExtractor","$canonical","metaUrl","EXCERPT_META_SELECTORS","maxLength","ellipsize","ellipse","GenericExcerptExtractor","shortContent","getWordCount","getWordCountAlt","GenericWordCountExtractor","count","GenericExtractor","bind","url_and_domain","word_count","direction","stringDirection","getDirection","loaded","Detectors","detectByHtml","getExtractor","baseDomain","Extractors","cleanBySelectors","transformElements","$matches","findMatchingSelector","extractHtml","allowMultiple","select","extractionOpts","overrideAllowMultiple","matchingSelector","transformAndClean","selectHtml","$wrapper","wrap","el","$match","transform","item","selectExtendedTypes","results","t","extractResult","fallback","RootExtractor","contentOnly","extractedTitle","extendedResults","collectAllPages","Extractor","pages","extractorOpts","nextPageResult","total_pages","rendered_pages","Parser","fetchAllPages","customExtractor","location","addCustomExtractor","extendedTypes","turndownService","TurndownService","turndown"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAMA,YAAY,GAAG,0CAArB;AAEA,AAAe,SAASC,eAAT,CAAyBC,IAAzB,EAA+B;SACrCA,IAAI,CAACC,OAAL,CAAaH,YAAb,EAA2B,GAA3B,EAAgCI,IAAhC,EAAP;;;ACHF;;;;;AAKA,AAAe,SAASC,cAAT,CAAwBC,GAAxB,EAA6BC,SAA7B,EAAwC;MAC/CC,OAAO,GAAGD,SAAS,CAACE,IAAV,CAAe,UAAAC,EAAE;WAAIA,EAAE,CAACC,IAAH,CAAQL,GAAR,CAAJ;GAAjB,CAAhB;;MACIE,OAAJ,EAAa;WACJA,OAAO,CAACI,IAAR,CAAaN,GAAb,EAAkB,CAAlB,CAAP;;;SAGK,IAAP;;;ACXF;;;;;;;;;;;;;;;;AAgBA,AAAO,IAAMO,eAAe,GAAG,IAAIC,MAAJ,CAC7B,0EAD6B,EAE7B,GAF6B,CAAxB;AAKP,AAAO,IAAMC,YAAY,GAAG,QAArB;AAEP,AAAO,IAAMC,WAAW,GAAG,WAApB;AACP,AAAO,IAAMC,WAAW,GAAG,WAApB;AAEP,AAAO,IAAMC,WAAW,GAAG,oBAApB;AACP,AAAO,IAAMC,gBAAgB,GAAG,OAAzB;;ACzBQ,SAASC,cAAT,CAAwBd,GAAxB,EAA6B;MACpCe,OAAO,GAAGf,GAAG,CAACgB,KAAJ,CAAUT,eAAV,CAAhB;MACI,CAACQ,OAAL,EAAc,OAAO,IAAP;;MAERE,OAAO,GAAG,UAASF,OAAO,CAAC,CAAD,CAAhB,EAAqB,EAArB,CAAhB,CAJ0C;;;;SAQnCE,OAAO,GAAG,GAAV,GAAgBA,OAAhB,GAA0B,IAAjC;;;ACVa,SAASC,YAAT,CAAsBlB,GAAtB,EAA2B;SACjCA,GAAG,CAACmB,KAAJ,CAAU,GAAV,EAAe,CAAf,EAAkBtB,OAAlB,CAA0B,KAA1B,EAAiC,EAAjC,CAAP;;;ACQF,SAASuB,aAAT,CAAuBC,OAAvB,EAAgCC,KAAhC,EAAuCC,sBAAvC,EAA+D;MACzDC,WAAW,GAAG,IAAlB,CAD6D;;;MAKzDF,KAAK,GAAG,CAAR,IAAaX,WAAW,CAACN,IAAZ,CAAiBgB,OAAjB,CAAb,IAA0CA,OAAO,CAACI,MAAR,GAAiB,CAA/D,EAAkE;IAChED,WAAW,GAAG,IAAd;GAN2D;;;;MAWzDF,KAAK,KAAK,CAAV,IAAeD,OAAO,CAACK,WAAR,OAA0B,OAA7C,EAAsD;IACpDF,WAAW,GAAG,KAAd;GAZ2D;;;;MAiBzDF,KAAK,GAAG,CAAR,IAAaD,OAAO,CAACI,MAAR,GAAiB,CAA9B,IAAmC,CAACF,sBAAxC,EAAgE;IAC9DC,WAAW,GAAG,KAAd;;;SAGKA,WAAP;;;;;;AAMF,AAAe,SAASG,cAAT,CAAwB3B,GAAxB,EAA6B4B,MAA7B,EAAqC;MAC5CC,SAAS,GAAGD,MAAM,IAAIE,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CAA5B;MACQgC,QAF0C,GAEjBH,SAFiB,CAE1CG,QAF0C;MAEhCC,IAFgC,GAEjBJ,SAFiB,CAEhCI,IAFgC;MAE1BC,IAF0B,GAEjBL,SAFiB,CAE1BK,IAF0B;MAI9CX,sBAAsB,GAAG,KAA7B;MACMY,eAAe,GAAGD,IAAI,CACzBf,KADqB,CACf,GADe,EAErBiB,OAFqB,GAGrBC,MAHqB,CAGd,UAACC,GAAD,EAAMC,UAAN,EAAkBjB,KAAlB,EAA4B;QAC9BD,OAAO,GAAGkB,UAAd,CADkC;;QAI9BlB,OAAO,CAACmB,QAAR,CAAiB,GAAjB,CAAJ,EAA2B;2BACUnB,OAAO,CAACF,KAAR,CAAc,GAAd,CADV;;UAClBsB,eADkB;UACDC,OADC;;UAErBhC,WAAW,CAACL,IAAZ,CAAiBqC,OAAjB,CAAJ,EAA+B;QAC7BrB,OAAO,GAAGoB,eAAV;;KAP8B;;;;QAa9BlC,eAAe,CAACF,IAAhB,CAAqBgB,OAArB,KAAiCC,KAAK,GAAG,CAA7C,EAAgD;MAC9CD,OAAO,GAAGA,OAAO,CAACxB,OAAR,CAAgBU,eAAhB,EAAiC,EAAjC,CAAV;KAdgC;;;;;;QAqB9Be,KAAK,KAAK,CAAd,EAAiB;MACfC,sBAAsB,GAAGd,YAAY,CAACJ,IAAb,CAAkBgB,OAAlB,CAAzB;KAtBgC;;;QA0B9BD,aAAa,CAACC,OAAD,EAAUC,KAAV,EAAiBC,sBAAjB,CAAjB,EAA2D;MACzDe,GAAG,CAACK,IAAJ,CAAStB,OAAT;;;WAGKiB,GAAP;GAjCoB,EAkCnB,EAlCmB,CAAxB;mBAoCUN,QAAV,eAAuBC,IAAvB,SAA8BE,eAAe,CAACC,OAAhB,GAA0BQ,IAA1B,CAA+B,GAA/B,CAA9B;;;AC7EF;;AAEA,IAAMC,eAAe,GAAG,IAAIrC,MAAJ,CAAW,QAAX,CAAxB;AACA,AAAe,SAASsC,cAAT,CAAwBlD,IAAxB,EAA8B;SACpCiD,eAAe,CAACxC,IAAhB,CAAqBT,IAArB,CAAP;;;ACJa,SAASmD,cAAT,CAAwBC,OAAxB,EAA6C;MAAZC,KAAY,uEAAJ,EAAI;SACnDD,OAAO,CACXlD,IADI,GAEJqB,KAFI,CAEE,KAFF,EAGJ+B,KAHI,CAGE,CAHF,EAGKD,KAHL,EAIJL,IAJI,CAIC,GAJD,CAAP;;;ACGF;;;AAEA,AAAe,SAASO,WAAT,CAAqBC,GAArB,EAA0B;MACnCC,QAAQ,GAAGxC,gBAAf;MACME,OAAO,GAAGH,WAAW,CAACN,IAAZ,CAAiB8C,GAAjB,CAAhB;;MACIrC,OAAO,KAAK,IAAhB,EAAsB;kCACVA,OADU;;IACjBqC,GADiB;;;MAGlBE,KAAK,CAACC,cAAN,CAAqBH,GAArB,CAAJ,EAA+B;IAC7BC,QAAQ,GAAGD,GAAX;;;SAEKC,QAAP;;;ACZK,IAAMG,eAAe,GAAGC,OAAO,CAACC,OAAR,GAC3B,EAD2B,GAE3B;gBAEI;CAJD;;AAQP,AAAO,IAAMC,aAAa,GAAG,KAAtB;;AAGP,IAAMC,iBAAiB,GAAG,CACxB,YADwB,EAExB,WAFwB,EAGxB,YAHwB,EAIxB,WAJwB,CAA1B;AAOA,AAAO,IAAMC,oBAAoB,GAAG,IAAIrD,MAAJ,aAC7BoD,iBAAiB,CAAChB,IAAlB,CAAuB,GAAvB,CAD6B,SAElC,GAFkC,CAA7B;;;AAOP,AAAO,IAAMkB,kBAAkB,GAAG,OAA3B;;AClBP,SAASC,GAAT,CAAaC,OAAb,EAAsB;SACb,aAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;IACtCC,OAAO,CAACH,OAAD,EAAU,UAACI,GAAD,EAAMC,QAAN,EAAgBC,IAAhB,EAAyB;UACpCF,GAAJ,EAAS;QACPF,MAAM,CAACE,GAAD,CAAN;OADF,MAEO;QACLH,OAAO,CAAC;UAAEK,IAAI,EAAJA,IAAF;UAAQD,QAAQ,EAARA;SAAT,CAAP;;KAJG,CAAP;GADK,CAAP;;;;;;;AAgBF,AAAO,SAASE,gBAAT,CAA0BF,QAA1B,EAAyD;MAArBG,WAAqB,uEAAP,KAAO;;;;;;;;MAQ3DH,QAAQ,CAACI,aAAT,IAA0BJ,QAAQ,CAACI,aAAT,KAA2B,IAAtD,IACAJ,QAAQ,CAACK,UAAT,KAAwB,GAF1B,EAGE;QACI,CAACL,QAAQ,CAACK,UAAd,EAA0B;YAClB,IAAIC,KAAJ,2DAC+CN,QAAQ,CAACO,KADxD,EAAN;KADF,MAIO,IAAI,CAACJ,WAAL,EAAkB;YACjB,IAAIG,KAAJ,uDAEFN,QAAQ,CAACK,UAFP,kEAAN;;;;0BAWAL,QAAQ,CAACQ,OA3BiD;MAyB5CC,WAzB4C,qBAyB5D,cAzB4D;MA0B1CC,aA1B0C,qBA0B5D,gBA1B4D;;MA8B1DlB,oBAAoB,CAACxD,IAArB,CAA0ByE,WAA1B,CAAJ,EAA4C;UACpC,IAAIH,KAAJ,8CACkCG,WADlC,0BAAN;GA/B4D;;;MAqC1DC,aAAa,GAAGjB,kBAApB,EAAwC;UAChC,IAAIa,KAAJ,8EACkEb,kBADlE,OAAN;;;SAKK,IAAP;;AAIF,AASA;;;;;AAKA,SAA8BkB,aAA9B;;;;;;;2BAAe,iBAA6BhF,GAA7B,EAAkC6B,SAAlC;;;;;;;;;;;;YAA6CgD,OAA7C,2DAAuD,EAAvD;YACbhD,SAAS,GAAGA,SAAS,IAAIC,GAAG,CAACC,KAAJ,CAAUkD,SAAS,CAACjF,GAAD,CAAnB,CAAzB;YACMgE,OAFO;cAGXhE,GAAG,EAAE6B,SAAS,CAACqD,IAHJ;cAIXL,OAAO,oBAAOrB,eAAP,EAA2BqB,OAA3B,CAJI;cAKXM,OAAO,EAAExB,aALE;;cAOXyB,GAAG,EAAE,IAPM;;;cAUX/B,QAAQ,EAAE,IAVC;;cAYXgC,IAAI,EAAE,IAZK;;cAcXC,kBAAkB,EAAE;eAChB,OAAOC,MAAP,KAAkB,WAAlB,GACA,EADA,GAEA;;cAEEC,cAAc,EAAE;aAnBX;;mBAuBoBzB,GAAG,CAACC,OAAD,CAvBvB;;;;YAuBLK,QAvBK,SAuBLA,QAvBK;YAuBKC,IAvBL,SAuBKA,IAvBL;;YA0BXC,gBAAgB,CAACF,QAAD,CAAhB;6CACO;cACLC,IAAI,EAAJA,IADK;cAELD,QAAQ,EAARA;aA7BS;;;;;6CAgCJ;cACLO,KAAK,EAAE,IADF;cAELa,OAAO,EAAE,YAAEA;aAlCF;;;;;;;;;;;;ACxFf,SAASC,eAAT,CAAyBC,CAAzB,EAA4BC,IAA5B,EAAkCC,EAAlC,EAAsC;EACpCF,CAAC,gBAASC,IAAT,OAAD,CAAmBE,IAAnB,CAAwB,UAACC,CAAD,EAAIC,IAAJ,EAAa;QAC7BC,KAAK,GAAGN,CAAC,CAACK,IAAD,CAAf;QAEME,KAAK,GAAGD,KAAK,CAACE,IAAN,CAAWP,IAAX,CAAd;IACAK,KAAK,CAACE,IAAN,CAAWN,EAAX,EAAeK,KAAf;IACAD,KAAK,CAACG,UAAN,CAAiBR,IAAjB;GALF;SAQOD,CAAP;;;;;;;;;AAUF,AAAe,SAASU,iBAAT,CAA2BV,CAA3B,EAA8B;EAC3CA,CAAC,GAAGD,eAAe,CAACC,CAAD,EAAI,SAAJ,EAAe,OAAf,CAAnB;EACAA,CAAC,GAAGD,eAAe,CAACC,CAAD,EAAI,UAAJ,EAAgB,MAAhB,CAAnB;SACOA,CAAP;;;ACtBF;AACA,AAAO,IAAMW,SAAS,GAAG,IAAI9F,MAAJ,CAAW,0BAAX,EAAuC,GAAvC,CAAlB;;;AAIP,AAAO,IAAM+F,UAAU,GAAG,qBAAnB;AAEP,AAAO,IAAMC,cAAc,GAAG,CAC5B,wCAD4B,EAE5B,iDAF4B,EAG5B,uCAH4B,EAI5B,qCAJ4B,EAK5B,oCAL4B,EAM5B,4CAN4B,CAAvB;;AAUP,AAAO,IAAMC,iBAAiB,GAAG,CAC/B,OAD+B,EAE/B,QAF+B,EAG/B,UAH+B,EAI/B,MAJ+B,EAK/B,OAL+B,EAM/B,IAN+B,EAO/B,OAP+B,EAQ/B,QAR+B,EAS/B,QAT+B,CAA1B;AAkBA,IAAMC,eAAe,GAAG,CAC7B,KAD6B,EAE7B,QAF6B,EAG7B,OAH6B,EAI7B,MAJ6B,EAK7B,MAL6B,EAM7B,OAN6B,EAO7B,IAP6B,EAQ7B,KAR6B,EAS7B,YAT6B,EAU7B,OAV6B,EAW7B,QAX6B,CAAxB;AAcP,AAAO,IAAMC,kBAAkB,GAAG,IAAInG,MAAJ,aAC3BkG,eAAe,CAAC9D,IAAhB,CAAqB,GAArB,CAD2B,SAEhC,GAFgC,CAA3B;;AAYP,AAAO,IAAMgE,wBAAwB,GAAG,CACtC,IADsC,EAEtC,IAFsC,EAGtC,OAHsC,EAItC,KAJsC,EAKtC,QALsC,EAMtC,MANsC,EAOtChE,IAPsC,CAOjC,GAPiC,CAAjC;;AAUP,IAAMiE,WAAW,GAAG,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,CAApB;AACA,AAAO,IAAMC,eAAe,GAAGD,WAAW,CAACjE,IAAZ,CAAiB,GAAjB,CAAxB;;;;;;AAQP,AAAO,IAAMmE,6BAA6B,GAAG,CAC3C,UAD2C,EAE3C,OAF2C,EAG3C,QAH2C,EAI3C,SAJ2C,EAK3C,SAL2C,EAM3C,KAN2C,EAO3C,gBAP2C,EAQ3C,OAR2C,EAS3C,SAT2C,EAU3C,cAV2C,EAW3C,QAX2C,EAY3C,iBAZ2C,EAa3C,OAb2C,EAc3C,MAd2C;AAgB3C,QAhB2C,EAiB3C,QAjB2C,EAkB3C,QAlB2C,EAmB3C,OAnB2C;AAoB3C,MApB2C,EAqB3C,MArB2C,EAsB3C,KAtB2C,EAuB3C,UAvB2C,EAwB3C,OAxB2C,EAyB3C,YAzB2C,EA0B3C,UA1B2C;AA2B3C,2BA3B2C;AA4B3C,OA5B2C,EA6B3C,eA7B2C,EA8B3C,SA9B2C,EA+B3C,QA/B2C,EAgC3C,QAhC2C,EAiC3C,KAjC2C,EAkC3C,OAlC2C,EAmC3C,UAnC2C,EAoC3C,SApC2C,EAqC3C,UArC2C,EAsC3C,SAtC2C,EAuC3C,SAvC2C,EAwC3C,OAxC2C,CAAtC;;;;;;;;;;;;AAsDP,AAAO,IAAMC,6BAA6B,GAAG,CAC3C,KAD2C,EAE3C,SAF2C,EAG3C,MAH2C,EAI3C,WAJ2C,EAK3C,QAL2C,EAM3C,SAN2C,EAO3C,qBAP2C,EAQ3C,QAR2C;AAS3C,OAT2C,EAU3C,QAV2C,EAW3C,OAX2C,EAY3C,MAZ2C,EAa3C,MAb2C,EAc3C,OAd2C,EAe3C,QAf2C,CAAtC;;;;AAqBP,AAAO,IAAMC,mBAAmB,GAAG,CACjC,GADiC,EAEjC,YAFiC,EAGjC,IAHiC,EAIjC,KAJiC,EAKjC,KALiC,EAMjC,GANiC,EAOjC,KAPiC,EAQjC,OARiC,EASjCrE,IATiC,CAS5B,GAT4B,CAA5B;AAYP,AAqCA;;;;AAGA,AAAO,IAAMsE,oBAAoB,GAAG,CAClC,SADkC,EAElC,gBAFkC,EAGlC,iBAHkC,EAIlC,MAJkC,EAKlC,MALkC,EAMlC,SANkC,EAOlC,qBAPkC,EAQlC,OARkC,EASlC,QATkC,EAUlC,MAVkC,EAWlC,QAXkC,EAYlC,MAZkC,EAalC,YAbkC,EAclC,WAdkC,EAelC,MAfkC,EAgBlC,OAhBkC,EAiBlC,MAjBkC,EAkBlC,UAlBkC;AAmBlC,SAnBkC,CAA7B;;AAuBP,AAAO,IAAMC,iBAAiB,GAAG,IAAI3G,MAAJ,CAC/B0G,oBAAoB,CAACtE,IAArB,CAA0B,GAA1B,CAD+B,EAE/B,GAF+B,CAA1B;AASP;;;;AAGA,AAAO,IAAMwE,oBAAoB,GAAG,CAClC,OADkC,EAElC,QAFkC,EAGlC,QAHkC,EAIlC,KAJkC,EAKlC,UALkC,EAMlC,QANkC,EAOlC,QAPkC,EAQlC,OARkC,EASlC,MATkC,EAUlC,OAVkC,EAWlC,SAXkC,EAYlC,YAZkC,EAalC,SAbkC,EAclC,MAdkC,EAelC,QAfkC,EAgBlC,OAhBkC,EAiBlC,MAjBkC,EAkBlC,MAlBkC,EAmBlC,SAnBkC,EAoBlC,UApBkC;AAqBlC,MArBkC,EAsBlC,QAtBkC,EAuBlC,UAvBkC,EAwBlC,MAxBkC,EAyBlC,MAzBkC,EA0BlC,MA1BkC,EA2BlC,UA3BkC;AA4BlC,mBA5BkC,EA6BlC,MA7BkC,EA8BlC,WA9BkC,EA+BlC,MA/BkC,EAgClC,UAhCkC,EAiClC,OAjCkC,EAkClC,MAlCkC,EAmClC,OAnCkC,EAoClC,UApCkC;AAqClC,OArCkC,EAsClC,KAtCkC;AAuClC,SAvCkC,EAwClC,SAxCkC,EAyClC,cAzCkC;AA0ClC,QA1CkC,EA2ClC,WA3CkC,EA4ClC,OA5CkC,EA6ClC,UA7CkC,EA8ClC,UA9CkC,EA+ClC,MA/CkC,EAgDlC,SAhDkC,EAiDlC,SAjDkC,EAkDlC,OAlDkC,EAmDlC,KAnDkC,EAoDlC,SApDkC,EAqDlC,MArDkC,EAsDlC,OAtDkC,EAuDlC,QAvDkC,CAA7B;;AA0DP,AAAO,IAAMC,iBAAiB,GAAG,IAAI7G,MAAJ,CAC/B4G,oBAAoB,CAACxE,IAArB,CAA0B,GAA1B,CAD+B,EAE/B,GAF+B,CAA1B;;AAMP,AAAO,IAAM0E,cAAc,GAAG,wCAAvB;;AA6BP,AAAO,IAAMC,OAAO,GAAG,IAAI/G,MAAJ,CAAW,iBAAX,EAA8B,GAA9B,CAAhB;AAGP,AAoBA;;AACA,AAAO,IAAMgH,gBAAgB,GAAG,CAC9B,SAD8B,EAE9B,OAF8B,EAG9B,YAH8B,EAI9B,MAJ8B,EAK9B,IAL8B,EAM9B,QAN8B,EAO9B,QAP8B,EAQ9B,SAR8B,EAS9B,KAT8B,EAU9B,UAV8B,EAW9B,IAX8B,EAY9B,KAZ8B,EAa9B,IAb8B,EAc9B,IAd8B,EAe9B,OAf8B,EAgB9B,UAhB8B,EAiB9B,YAjB8B,EAkB9B,QAlB8B,EAmB9B,QAnB8B,EAoB9B,MApB8B,EAqB9B,IArB8B,EAsB9B,IAtB8B,EAuB9B,IAvB8B,EAwB9B,IAxB8B,EAyB9B,IAzB8B,EA0B9B,IA1B8B,EA2B9B,QA3B8B,EA4B9B,QA5B8B,EA6B9B,IA7B8B,EA8B9B,IA9B8B,EA+B9B,KA/B8B,EAgC9B,QAhC8B,EAiC9B,IAjC8B,EAkC9B,QAlC8B,EAmC9B,GAnC8B,EAoC9B,KApC8B,EAqC9B,UArC8B,EAsC9B,SAtC8B,EAuC9B,OAvC8B,EAwC9B,OAxC8B,EAyC9B,UAzC8B,EA0C9B,OA1C8B,EA2C9B,IA3C8B,EA4C9B,OA5C8B,EA6C9B,IA7C8B,EA8C9B,IA9C8B,EA+C9B,OA/C8B,CAAzB;AAiDP,AAAO,IAAMC,mBAAmB,GAAG,IAAIjH,MAAJ,aAC5BgH,gBAAgB,CAAC5E,IAAjB,CAAsB,GAAtB,CAD4B,SAEjC,GAFiC,CAA5B;;;;;AASP,IAAM8E,mBAAmB,GAAGX,6BAA6B,CAACnE,IAA9B,CAAmC,GAAnC,CAA5B;AACA,AAAO,IAAM+E,oBAAoB,GAAG,IAAInH,MAAJ,CAAWkH,mBAAX,EAAgC,GAAhC,CAA7B;AAEP,IAAME,mBAAmB,GAAGZ,6BAA6B,CAACpE,IAA9B,CAAmC,GAAnC,CAA5B;AACA,AAAO,IAAMiF,oBAAoB,GAAG,IAAIrH,MAAJ,CAAWoH,mBAAX,EAAgC,GAAhC,CAA7B;;ACnaQ,SAASE,uBAAT,CAAiCnC,CAAjC,EAAoC;;;;;;;;;;EAUjDA,CAAC,CAAC,GAAD,CAAD,CACGoC,GADH,CACO,GADP,EAEGjC,IAFH,CAEQ,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;QACfC,KAAK,GAAGN,CAAC,CAACK,IAAD,CAAf;QACMgC,OAAO,GAAG/B,KAAK,CAACE,IAAN,CAAW,OAAX,CAAhB;QACM8B,EAAE,GAAGhC,KAAK,CAACE,IAAN,CAAW,IAAX,CAAX;QACI,CAAC8B,EAAD,IAAO,CAACD,OAAZ,EAAqB;QAEfE,UAAU,aAAMF,OAAO,IAAI,EAAjB,cAAuBC,EAAE,IAAI,EAA7B,CAAhB;;QACIJ,oBAAoB,CAACxH,IAArB,CAA0B6H,UAA1B,CAAJ,EAA2C;;;;QAGvCP,oBAAoB,CAACtH,IAArB,CAA0B6H,UAA1B,CAAJ,EAA2C;MACzCjC,KAAK,CAACkC,MAAN;;GAbN;SAiBOxC,CAAP;;;AC1BF;;;;;;;AAQA,AAAe,SAASyC,UAAT,CAAiBzC,CAAjB,EAAoB;MAC7B0C,UAAU,GAAG,KAAjB;EACA1C,CAAC,CAAC,IAAD,CAAD,CAAQG,IAAR,CAAa,UAACxE,KAAD,EAAQgH,OAAR,EAAoB;QACzBC,QAAQ,GAAG5C,CAAC,CAAC2C,OAAD,CAAlB;QACME,WAAW,GAAGD,QAAQ,CAACE,IAAT,GAAgB1E,GAAhB,CAAoB,CAApB,CAApB;;QAEIyE,WAAW,IAAIA,WAAW,CAACE,OAAZ,CAAoBhH,WAApB,OAAsC,IAAzD,EAA+D;MAC7D2G,UAAU,GAAG,IAAb;MACAE,QAAQ,CAACJ,MAAT;KAFF,MAGO,IAAIE,UAAJ,EAAgB;MACrBA,UAAU,GAAG,KAAb;MACAM,YAAY,CAACL,OAAD,EAAU3C,CAAV,EAAa,IAAb,CAAZ;;GATJ;SAaOA,CAAP;;;ACvBF;;;;;;;;;;AAUA,AAAe,SAASgD,YAAT,CAAsB3C,IAAtB,EAA4BL,CAA5B,EAA2C;MAAZiD,EAAY,uEAAP,KAAO;MAClD3C,KAAK,GAAGN,CAAC,CAACK,IAAD,CAAf;;MAEI4C,EAAJ,EAAQ;QACFC,OAAO,GAAG7C,IAAI,CAAC8C,WAAnB;QACMC,CAAC,GAAGpD,CAAC,CAAC,SAAD,CAAX,CAFM;;;WAOJkD,OAAO,IACP,EAAEA,OAAO,CAACH,OAAR,IAAmBjB,mBAAmB,CAACpH,IAApB,CAAyBwI,OAAO,CAACH,OAAjC,CAArB,CAFF,EAGE;qBACwBG,OADxB;UACQC,WADR,YACQA,WADR;MAEAnD,CAAC,CAACkD,OAAD,CAAD,CAAWG,QAAX,CAAoBD,CAApB;MACAF,OAAO,GAAGC,WAAV;;;IAGF7C,KAAK,CAACgD,WAAN,CAAkBF,CAAlB;IACA9C,KAAK,CAACkC,MAAN;WACOxC,CAAP;;;SAGKA,CAAP;;;AChCF,SAASuD,WAAT,CAAqBvD,CAArB,EAAwB;EACtBA,CAAC,CAAC,KAAD,CAAD,CAASG,IAAT,CAAc,UAACxE,KAAD,EAAQ6H,GAAR,EAAgB;QACtBC,IAAI,GAAGzD,CAAC,CAACwD,GAAD,CAAd;QACME,WAAW,GAAGD,IAAI,CAACE,QAAL,CAAcrC,mBAAd,EAAmCxF,MAAnC,KAA8C,CAAlE;;QAEI4H,WAAJ,EAAiB;MACfE,gBAAa,CAACH,IAAD,EAAOzD,CAAP,EAAU,GAAV,CAAb;;GALJ;SASOA,CAAP;;;AAGF,SAAS6D,YAAT,CAAsB7D,CAAtB,EAAyB;EACvBA,CAAC,CAAC,MAAD,CAAD,CAAUG,IAAV,CAAe,UAACxE,KAAD,EAAQmI,IAAR,EAAiB;QACxBC,KAAK,GAAG/D,CAAC,CAAC8D,IAAD,CAAf;QACMJ,WAAW,GAAGK,KAAK,CAACC,OAAN,CAAc,wBAAd,EAAwClI,MAAxC,KAAmD,CAAvE;;QACI4H,WAAJ,EAAiB;MACfE,gBAAa,CAACG,KAAD,EAAQ/D,CAAR,EAAW,GAAX,CAAb;;GAJJ;SAQOA,CAAP;;;;;;;;;;;;;;AAeF,AAAe,SAASiE,sBAAT,CAA6BjE,CAA7B,EAAgC;EAC7CA,CAAC,GAAGyC,UAAO,CAACzC,CAAD,CAAX;EACAA,CAAC,GAAGuD,WAAW,CAACvD,CAAD,CAAf;EACAA,CAAC,GAAG6D,YAAY,CAAC7D,CAAD,CAAhB;SAEOA,CAAP;;;AC5Ca,SAAS4D,gBAAT,CAAuBtD,KAAvB,EAA8BN,CAA9B,EAA4C;MAAXkE,GAAW,uEAAL,GAAK;MACnD7D,IAAI,GAAGC,KAAK,CAAClC,GAAN,CAAU,CAAV,CAAb;;MACI,CAACiC,IAAL,EAAW;WACFL,CAAP;;;MAEImE,KAAK,GAAGC,QAAQ,CAAC/D,IAAD,CAAR,IAAkB,EAAhC;;MAEMgE,YAAY,GAAG,iBAAgBF,KAAhB,EAClBG,GADkB,CACd,UAAAC,GAAG;qBAAOA,GAAP,cAAcJ,KAAK,CAACI,GAAD,CAAnB;GADW,EAElBtH,IAFkB,CAEb,GAFa,CAArB;;MAGIuH,IAAJ;;MAEIxE,CAAC,CAACjC,OAAN,EAAe;;;;IAIbyG,IAAI,GACFnE,IAAI,CAAC0C,OAAL,CAAahH,WAAb,OAA+B,UAA/B,GAA4CuE,KAAK,CAACrG,IAAN,EAA5C,GAA2DqG,KAAK,CAACkE,IAAN,EAD7D;GAJF,MAMO;IACLA,IAAI,GAAGlE,KAAK,CAACmE,QAAN,EAAP;;;EAEFnE,KAAK,CAACgD,WAAN,YAAsBY,GAAtB,cAA6BG,YAA7B,cAA6CG,IAA7C,eAAsDN,GAAtD;SACOlE,CAAP;;;ACtBF,SAAS0E,cAAT,CAAwBC,IAAxB,EAA8B3E,CAA9B,EAAiC;MACzB4E,MAAM,GAAG,UAASD,IAAI,CAACnE,IAAL,CAAU,QAAV,CAAT,EAA8B,EAA9B,CAAf;;MACMqE,KAAK,GAAG,UAASF,IAAI,CAACnE,IAAL,CAAU,OAAV,CAAT,EAA6B,EAA7B,KAAoC,EAAlD,CAF+B;;;;MAO3B,CAACoE,MAAM,IAAI,EAAX,IAAiB,EAAjB,IAAuBC,KAAK,GAAG,EAAnC,EAAuC;IACrCF,IAAI,CAACnC,MAAL;GADF,MAEO,IAAIoC,MAAJ,EAAY;;;;IAIjBD,IAAI,CAAClE,UAAL,CAAgB,QAAhB;;;SAGKT,CAAP;;;;;AAKF,SAAS8E,aAAT,CAAuBH,IAAvB,EAA6B3E,CAA7B,EAAgC;MAC1BW,SAAS,CAACjG,IAAV,CAAeiK,IAAI,CAACnE,IAAL,CAAU,KAAV,CAAf,CAAJ,EAAsC;IACpCmE,IAAI,CAACnC,MAAL;;;SAGKxC,CAAP;;;AAGF,AAAe,SAAS+E,WAAT,CAAqBC,QAArB,EAA+BhF,CAA/B,EAAkC;EAC/CgF,QAAQ,CAACxK,IAAT,CAAc,KAAd,EAAqB2F,IAArB,CAA0B,UAACxE,KAAD,EAAQsJ,GAAR,EAAgB;QAClCN,IAAI,GAAG3E,CAAC,CAACiF,GAAD,CAAd;IAEAP,cAAc,CAACC,IAAD,EAAO3E,CAAP,CAAd;IACA8E,aAAa,CAACH,IAAD,EAAO3E,CAAP,CAAb;GAJF;SAOOA,CAAP;;;ACnCa,SAASkF,UAAT,CAAoBC,OAApB,EAA6BnF,CAA7B,EAAgC3F,GAAhC,EAAgD;MAAX+K,IAAW,uEAAJ,EAAI;;MACzDA,IAAI,CAACtJ,MAAL,KAAgB,CAApB,EAAuB;IACrBsJ,IAAI,GAAGvE,cAAP;;;MAGExG,GAAJ,EAAS;qBACwB8B,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CADxB;QACCgC,QADD,cACCA,QADD;QACWgJ,QADX,cACWA,QADX;;IAEPD,IAAI,gCAAOA,IAAP,4BAA6B/I,QAA7B,eAA0CgJ,QAA1C,UAAJ;;;EAGFrF,CAAC,CAACoF,IAAI,CAACnI,IAAL,CAAU,GAAV,CAAD,EAAiBkI,OAAjB,CAAD,CAA2BG,QAA3B,CAAoC1E,UAApC;SAEOZ,CAAP;;;ACda,SAASuF,aAAT,CAAuBJ,OAAvB,EAAgCnF,CAAhC,EAA8C;MAAXoF,IAAW,uEAAJ,EAAI;;MACvDA,IAAI,CAACtJ,MAAL,KAAgB,CAApB,EAAuB;IACrBsJ,IAAI,GAAGtE,iBAAP;GAFyD;;;;EAO3Dd,CAAC,CAACoF,IAAI,CAACnI,IAAL,CAAU,GAAV,CAAD,EAAiBkI,OAAjB,CAAD,CACG/C,GADH,YACWxB,UADX,GAEG4B,MAFH;SAIOxC,CAAP;;;ACVF;;;AAEA,AAAe,SAASwF,aAAT,CAAoBL,OAApB,EAA6BnF,CAA7B,EAAgC;MACvCyF,MAAM,GAAGzF,CAAC,CAAC,IAAD,EAAOmF,OAAP,CAAhB;;MAEIM,MAAM,CAAC3J,MAAP,GAAgB,CAApB,EAAuB;IACrB2J,MAAM,CAACtF,IAAP,CAAY,UAACxE,KAAD,EAAQ0E,IAAR;aAAiBL,CAAC,CAACK,IAAD,CAAD,CAAQmC,MAAR,EAAjB;KAAZ;GADF,MAEO;IACLiD,MAAM,CAACtF,IAAP,CAAY,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;MAC3BuD,gBAAa,CAAC5D,CAAC,CAACK,IAAD,CAAF,EAAUL,CAAV,EAAa,IAAb,CAAb;KADF;;;SAKKA,CAAP;;;ACZF,SAAS0F,qBAAT,CAA+BV,QAA/B,EAAyChF,CAAzC,EAA4C;EAC1CgF,QAAQ,CAACxK,IAAT,CAAc,GAAd,EAAmB2F,IAAnB,CAAwB,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;QACjC8D,KAAK,GAAGC,QAAQ,CAAC/D,IAAD,CAAtB;IAEAsF,QAAQ,CACNtF,IADM,EAEN,iBAAgB8D,KAAhB,EAAuBzH,MAAvB,CAA8B,UAACC,GAAD,EAAM6D,IAAN,EAAe;UACvCQ,kBAAkB,CAACtG,IAAnB,CAAwB8F,IAAxB,CAAJ,EAAmC;iCACrB7D,GAAZ,sBAAkB6D,IAAlB,EAAyB2D,KAAK,CAAC3D,IAAD,CAA9B;;;aAGK7D,GAAP;KALF,EAMG,EANH,CAFM,CAAR;GAHF,EAD0C;;EAiB1CqD,CAAC,YAAKY,UAAL,GAAmBoE,QAAnB,CAAD,CAA8BY,WAA9B,CAA0ChF,UAA1C;SAEOoE,QAAP;;;;AAIF,AAAe,SAASa,kBAAT,CAAyBb,QAAzB,EAAmChF,CAAnC,EAAsC;;;;SAI5C0F,qBAAqB,CAC1BV,QAAQ,CAACc,MAAT,GAAkBhK,MAAlB,GAA2BkJ,QAAQ,CAACc,MAAT,EAA3B,GAA+Cd,QADrB,EAE1BhF,CAF0B,CAA5B;;;AC/Ba,SAAS+F,WAAT,CAAqBf,QAArB,EAA+BhF,CAA/B,EAAkC;EAC/CgF,QAAQ,CAACxK,IAAT,CAAc,GAAd,EAAmB2F,IAAnB,CAAwB,UAACxE,KAAD,EAAQyH,CAAR,EAAc;QAC9B4C,EAAE,GAAGhG,CAAC,CAACoD,CAAD,CAAZ;QACI4C,EAAE,CAACxL,IAAH,CAAQ,aAAR,EAAuBsB,MAAvB,KAAkC,CAAlC,IAAuCkK,EAAE,CAAC/L,IAAH,GAAUE,IAAV,OAAqB,EAAhE,EACE6L,EAAE,CAACxD,MAAH;GAHJ;SAMOxC,CAAP;;;ACPF;AAEA,AAyFA;;AACA,AAAO,IAAMiG,wBAAsB,GAAG,CACpC,IADoC,EAEpC,GAFoC,EAGpC,GAHoC,EAIpC,OAJoC,EAKpC,IALoC,EAMpC,MANoC,EAOpC,MAPoC,EAQpC,UARoC,EASpC,OAToC,EAUpC,KAVoC,EAWpC,MAXoC,EAYpC,MAZoC,CAA/B;AAeP,AAAO,IAAMC,2BAAyB,GAAG,IAAIrL,MAAJ,aAClCoL,wBAAsB,CAAChJ,IAAvB,CAA4B,GAA5B,CADkC,SAEvC,GAFuC,CAAlC;;;;AAQP,AAAO,IAAMkJ,yBAAuB,GAAG,CACrC,CAAC,SAAD,EAAY,gBAAZ,CADqC,EAErC,CAAC,OAAD,EAAU,gBAAV,CAFqC,EAGrC,CAAC,QAAD,EAAW,gBAAX,CAHqC,EAIrC,CAAC,OAAD,EAAU,WAAV,CAJqC,EAKrC,CAAC,OAAD,EAAU,YAAV,CALqC,EAMrC,CAAC,OAAD,EAAU,YAAV,CANqC,CAAhC;AASP,AAAO,IAAMC,aAAW,GAAG,CAAC,QAAD,EAAW,OAAX,EAAoB,OAApB,EAA6B,SAA7B,CAApB;AACP,AAAO,IAAMC,gBAAc,GAAG,IAAIxL,MAAJ,CAAWuL,aAAW,CAACnJ,IAAZ,CAAiB,GAAjB,CAAX,EAAkC,GAAlC,CAAvB;;;;;AAMP,AAAO,IAAMsE,sBAAoB,GAAG,CAClC,SADkC,EAElC,gBAFkC,EAGlC,iBAHkC,EAIlC,MAJkC,EAKlC,MALkC,EAMlC,SANkC,EAOlC,qBAPkC,EAQlC,OARkC,EASlC,QATkC,EAUlC,MAVkC,EAWlC,QAXkC,EAYlC,MAZkC,EAalC,YAbkC,EAclC,WAdkC,EAelC,MAfkC,EAgBlC,OAhBkC,EAiBlC,MAjBkC,EAkBlC,UAlBkC;AAmBlC,SAnBkC,CAA7B;;AAuBP,AAAO,IAAMC,mBAAiB,GAAG,IAAI3G,MAAJ,CAC/B0G,sBAAoB,CAACtE,IAArB,CAA0B,GAA1B,CAD+B,EAE/B,GAF+B,CAA1B;;AAMP,AAAO,IAAMqJ,mBAAiB,GAAG,IAAIzL,MAAJ,CAAW,qBAAX,EAAkC,GAAlC,CAA1B;;;;;AAMP,AAAO,IAAM4G,sBAAoB,GAAG,CAClC,OADkC,EAElC,QAFkC,EAGlC,QAHkC,EAIlC,KAJkC,EAKlC,UALkC,EAMlC,QANkC,EAOlC,QAPkC,EAQlC,OARkC,EASlC,MATkC,EAUlC,OAVkC,EAWlC,SAXkC,EAYlC,YAZkC,EAalC,SAbkC,EAclC,MAdkC,EAelC,QAfkC,EAgBlC,OAhBkC,EAiBlC,MAjBkC,EAkBlC,MAlBkC,EAmBlC,SAnBkC,EAoBlC,UApBkC;AAqBlC,MArBkC,EAsBlC,QAtBkC,EAuBlC,UAvBkC,EAwBlC,MAxBkC,EAyBlC,MAzBkC,EA0BlC,MA1BkC,EA2BlC,UA3BkC;AA4BlC,mBA5BkC,EA6BlC,MA7BkC,EA8BlC,WA9BkC,EA+BlC,MA/BkC,EAgClC,UAhCkC,EAiClC,OAjCkC,EAkClC,MAlCkC,EAmClC,OAnCkC,EAoClC,UApCkC;AAqClC,OArCkC,EAsClC,KAtCkC;AAuClC,SAvCkC,EAwClC,SAxCkC,EAyClC,cAzCkC;AA0ClC,QA1CkC,EA2ClC,WA3CkC,EA4ClC,OA5CkC,EA6ClC,UA7CkC,EA8ClC,UA9CkC,EA+ClC,MA/CkC,EAgDlC,SAhDkC,EAiDlC,SAjDkC,EAkDlC,OAlDkC,EAmDlC,KAnDkC,EAoDlC,SApDkC,EAqDlC,MArDkC,EAsDlC,OAtDkC,EAuDlC,QAvDkC,CAA7B;;AA0DP,AAAO,IAAMC,mBAAiB,GAAG,IAAI7G,MAAJ,CAC/B4G,sBAAoB,CAACxE,IAArB,CAA0B,GAA1B,CAD+B,EAE/B,GAF+B,CAA1B;AAqFA,IAAMsJ,sBAAoB,GAAG,IAAI1L,MAAJ,CAAW,mBAAX,EAAgC,GAAhC,CAA7B;AACP,AAAO,IAAM2L,oBAAkB,GAAG,IAAI3L,MAAJ,CAAW,4BAAX,EAAyC,GAAzC,CAA3B;AACP,AAAO,IAAM4L,UAAQ,GAAG,IAAI5L,MAAJ,CAAW,kBAAX,EAA+B,GAA/B,CAAjB;;AC/SQ,SAAS6L,SAAT,CAAmBrG,IAAnB,EAAyB;MAChCgC,OAAO,GAAGhC,IAAI,CAACG,IAAL,CAAU,OAAV,CAAhB;MACM8B,EAAE,GAAGjC,IAAI,CAACG,IAAL,CAAU,IAAV,CAAX;MACImG,KAAK,GAAG,CAAZ;;MAEIrE,EAAJ,EAAQ;;QAEFd,mBAAiB,CAAC9G,IAAlB,CAAuB4H,EAAvB,CAAJ,EAAgC;MAC9BqE,KAAK,IAAI,EAAT;;;QAEEjF,mBAAiB,CAAChH,IAAlB,CAAuB4H,EAAvB,CAAJ,EAAgC;MAC9BqE,KAAK,IAAI,EAAT;;;;MAIAtE,OAAJ,EAAa;QACPsE,KAAK,KAAK,CAAd,EAAiB;;;UAGXnF,mBAAiB,CAAC9G,IAAlB,CAAuB2H,OAAvB,CAAJ,EAAqC;QACnCsE,KAAK,IAAI,EAAT;;;UAEEjF,mBAAiB,CAAChH,IAAlB,CAAuB2H,OAAvB,CAAJ,EAAqC;QACnCsE,KAAK,IAAI,EAAT;;KARO;;;;;QAePN,gBAAc,CAAC3L,IAAf,CAAoB2H,OAApB,CAAJ,EAAkC;MAChCsE,KAAK,IAAI,EAAT;KAhBS;;;;;;QAuBPL,mBAAiB,CAAC5L,IAAlB,CAAuB2H,OAAvB,CAAJ,EAAqC;MACnCsE,KAAK,IAAI,EAAT;;;;SAIGA,KAAP;;;ACnDF;;;AAGA,AAAe,SAASC,QAAT,CAAkBtG,KAAlB,EAAyB;SAC/B,YAAWA,KAAK,CAACE,IAAN,CAAW,OAAX,CAAX,KAAmC,IAA1C;;;ACJF;AACA,AAAe,SAASqG,WAAT,CAAqB5M,IAArB,EAA2B;SACjC,CAACA,IAAI,CAACoB,KAAL,CAAW,IAAX,KAAoB,EAArB,EAAyBS,MAAhC;;;ACFF,IAAMgL,KAAK,GAAG,IAAIjM,MAAJ,CAAW,WAAX,EAAwB,GAAxB,CAAd;AAEA,AAAe,SAASkM,WAAT,CAAqBC,UAArB,EAAgD;MAAfjE,OAAe,uEAAL,GAAK;MACvDkE,MAAM,GAAGD,UAAU,GAAG,EAA5B;;MAEIC,MAAM,GAAG,CAAb,EAAgB;QACVC,WAAJ,CADc;;;;;;QAQVJ,KAAK,CAACpM,IAAN,CAAWqI,OAAX,CAAJ,EAAyB;MACvBmE,WAAW,GAAGD,MAAM,GAAG,CAAvB;KADF,MAEO;MACLC,WAAW,GAAGD,MAAM,GAAG,IAAvB;;;WAGKE,IAAI,CAACC,GAAL,CAASD,IAAI,CAACE,GAAL,CAASH,WAAT,EAAsB,CAAtB,CAAT,EAAmC,CAAnC,CAAP;;;SAGK,CAAP;;;ACnBF;;AACA,AAAe,SAASI,iBAAT,CAAwBjH,IAAxB,EAA8B;MACvCsG,KAAK,GAAG,CAAZ;MACM1M,IAAI,GAAGoG,IAAI,CAACpG,IAAL,GAAYE,IAAZ,EAAb;MACM6M,UAAU,GAAG/M,IAAI,CAAC6B,MAAxB,CAH2C;;MAMvCkL,UAAU,GAAG,EAAjB,EAAqB;WACZ,CAAP;GAPyC;;;EAW3CL,KAAK,IAAIE,WAAW,CAAC5M,IAAD,CAApB,CAX2C;;;EAe3C0M,KAAK,IAAII,WAAW,CAACC,UAAD,CAApB,CAf2C;;;;;MAqBvC/M,IAAI,CAACsD,KAAL,CAAW,CAAC,CAAZ,MAAmB,GAAvB,EAA4B;IAC1BoJ,KAAK,IAAI,CAAT;;;SAGKA,KAAP;;;AC7Ba,SAASY,QAAT,CAAkBjH,KAAlB,EAAyBN,CAAzB,EAA4B2G,KAA5B,EAAmC;EAChDrG,KAAK,CAACE,IAAN,CAAW,OAAX,EAAoBmG,KAApB;SACOrG,KAAP;;;ACAa,SAASkH,WAAT,CAAkBlH,KAAlB,EAAyBN,CAAzB,EAA4ByH,MAA5B,EAAoC;MAC7C;QACId,KAAK,GAAGe,iBAAc,CAACpH,KAAD,EAAQN,CAAR,CAAd,GAA2ByH,MAAzC;IACAF,QAAQ,CAACjH,KAAD,EAAQN,CAAR,EAAW2G,KAAX,CAAR;GAFF,CAGE,OAAOgB,CAAP,EAAU;;;SAILrH,KAAP;;;ACPa,SAASsH,cAAT,CAAqBvH,IAArB,EAA2BL,CAA3B,EAA8B2G,KAA9B,EAAqC;MAC5Cb,MAAM,GAAGzF,IAAI,CAACyF,MAAL,EAAf;;MACIA,MAAJ,EAAY;IACV0B,WAAQ,CAAC1B,MAAD,EAAS9F,CAAT,EAAY2G,KAAK,GAAG,IAApB,CAAR;;;SAGKtG,IAAP;;;ACNF;;;AAEA,AAAe,SAASqH,iBAAT,CAAwBpH,KAAxB,EAA+BN,CAA/B,EAAsD;MAApB6H,WAAoB,uEAAN,IAAM;MAC/DlB,KAAK,GAAGC,QAAQ,CAACtG,KAAD,CAApB;;MAEIqG,KAAJ,EAAW;WACFA,KAAP;;;EAGFA,KAAK,GAAGmB,YAAS,CAACxH,KAAD,CAAjB;;MAEIuH,WAAJ,EAAiB;IACflB,KAAK,IAAID,SAAS,CAACpG,KAAD,CAAlB;;;EAGFsH,cAAW,CAACtH,KAAD,EAAQN,CAAR,EAAW2G,KAAX,CAAX;SAEOA,KAAP;;;ACZF;;AACA,AAAe,SAASmB,YAAT,CAAmBxH,KAAnB,EAA0B;mBACnBA,KAAK,CAAClC,GAAN,CAAU,CAAV,CADmB;MAC/B2E,OAD+B,cAC/BA,OAD+B;;;;;MAMnCwD,sBAAoB,CAAC7L,IAArB,CAA0BqI,OAA1B,CAAJ,EAAwC;WAC/BuE,iBAAc,CAAChH,KAAD,CAArB;;;MAEEyC,OAAO,CAAChH,WAAR,OAA0B,KAA9B,EAAqC;WAC5B,CAAP;;;MAEEyK,oBAAkB,CAAC9L,IAAnB,CAAwBqI,OAAxB,CAAJ,EAAsC;WAC7B,CAAP;;;MAEE0D,UAAQ,CAAC/L,IAAT,CAAcqI,OAAd,CAAJ,EAA4B;WACnB,CAAC,CAAR;;;MAEEA,OAAO,CAAChH,WAAR,OAA0B,IAA9B,EAAoC;WAC3B,CAAC,CAAR;;;SAGK,CAAP;;;AC1BF,SAAS8H,cAAT,CAAsBvD,KAAtB,EAA6BN,CAA7B,EAAgC;MAC1BM,KAAK,CAAClC,GAAN,CAAU,CAAV,CAAJ,EAAkB;qBACIkC,KAAK,CAAClC,GAAN,CAAU,CAAV,CADJ;QACR2E,OADQ,cACRA,OADQ;;QAGZA,OAAO,KAAK,MAAhB,EAAwB;;MAEtBa,gBAAa,CAACtD,KAAD,EAAQN,CAAR,EAAW,KAAX,CAAb;;;;;AAKN,SAAS+H,UAAT,CAAoBzH,KAApB,EAA2BN,CAA3B,EAA8B2G,KAA9B,EAAqC;MAC/BrG,KAAJ,EAAW;IACTuD,cAAY,CAACvD,KAAD,EAAQN,CAAR,CAAZ;IACAwH,WAAQ,CAAClH,KAAD,EAAQN,CAAR,EAAW2G,KAAX,CAAR;;;;AAIJ,SAASqB,OAAT,CAAiBhI,CAAjB,EAAoB6H,WAApB,EAAiC;EAC/B7H,CAAC,CAAC,QAAD,CAAD,CACGoC,GADH,CACO,SADP,EAEGjC,IAFH,CAEQ,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;;;QAGjBC,KAAK,GAAGN,CAAC,CAACK,IAAD,CAAb;IACAC,KAAK,GAAGiH,QAAQ,CAACjH,KAAD,EAAQN,CAAR,EAAW0H,iBAAc,CAACpH,KAAD,EAAQN,CAAR,EAAW6H,WAAX,CAAzB,CAAhB;QAEMI,OAAO,GAAG3H,KAAK,CAACwF,MAAN,EAAhB;QACMoC,QAAQ,GAAGJ,YAAS,CAACxH,KAAD,CAA1B;IAEAyH,UAAU,CAACE,OAAD,EAAUjI,CAAV,EAAakI,QAAb,EAAuBL,WAAvB,CAAV;;QACII,OAAJ,EAAa;;;MAGXF,UAAU,CAACE,OAAO,CAACnC,MAAR,EAAD,EAAmB9F,CAAnB,EAAsBkI,QAAQ,GAAG,CAAjC,EAAoCL,WAApC,CAAV;;GAfN;SAmBO7H,CAAP;;;;;AAKF,AAAe,SAASmI,eAAT,CAAsBnI,CAAtB,EAA6C;MAApB6H,WAAoB,uEAAN,IAAM;;;EAG1D1B,yBAAuB,CAACiC,OAAxB,CAAgC,gBAAqC;;QAAnCC,cAAmC;QAAnBC,aAAmB;;IACnEtI,CAAC,WAAIqI,cAAJ,cAAsBC,aAAtB,EAAD,CAAwCnI,IAAxC,CAA6C,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;MAC5DmH,WAAQ,CAACxH,CAAC,CAACK,IAAD,CAAD,CAAQyF,MAAR,CAAeuC,cAAf,CAAD,EAAiCrI,CAAjC,EAAoC,EAApC,CAAR;KADF;GADF,EAH0D;;;;;;EAc1DgI,OAAO,CAAChI,CAAD,EAAI6H,WAAJ,CAAP;EACAG,OAAO,CAAChI,CAAD,EAAI6H,WAAJ,CAAP;SAEO7H,CAAP;;;AC1DF;;;;;AAIA,AAAe,SAASuI,aAAT,CAAuBC,UAAvB,EAAmCC,QAAnC,EAA6CzI,CAA7C,EAAgD;MACzD,CAACwI,UAAU,CAAC1C,MAAX,GAAoBhK,MAAzB,EAAiC;WACxB0M,UAAP;;;MAGIE,qBAAqB,GAAGvB,IAAI,CAACE,GAAL,CAAS,EAAT,EAAaoB,QAAQ,GAAG,IAAxB,CAA9B;MACME,WAAW,GAAG3I,CAAC,CAAC,aAAD,CAArB;EAEAwI,UAAU,CACP1C,MADH,GAEGnC,QAFH,GAGGxD,IAHH,CAGQ,UAACxE,KAAD,EAAQuH,OAAR,EAAoB;QAClB0F,QAAQ,GAAG5I,CAAC,CAACkD,OAAD,CAAlB,CADwB;;QAGpBgD,2BAAyB,CAACxL,IAA1B,CAA+BwI,OAAO,CAACH,OAAvC,CAAJ,EAAqD;aAC5C,IAAP;;;QAGI8F,YAAY,GAAGjC,QAAQ,CAACgC,QAAD,CAA7B;;QACIC,YAAJ,EAAkB;UACZD,QAAQ,CAACxK,GAAT,CAAa,CAAb,MAAoBoK,UAAU,CAACpK,GAAX,CAAe,CAAf,CAAxB,EAA2C;QACzCuK,WAAW,CAACG,MAAZ,CAAmBF,QAAnB;OADF,MAEO;YACDG,YAAY,GAAG,CAAnB;YACMC,OAAO,GAAGC,WAAW,CAACL,QAAD,CAA3B,CAFK;;;YAMDI,OAAO,GAAG,IAAd,EAAoB;UAClBD,YAAY,IAAI,EAAhB;SAPG;;;;YAYDC,OAAO,IAAI,GAAf,EAAoB;UAClBD,YAAY,IAAI,EAAhB;SAbG;;;;YAkBDH,QAAQ,CAACpI,IAAT,CAAc,OAAd,MAA2BgI,UAAU,CAAChI,IAAX,CAAgB,OAAhB,CAA/B,EAAyD;UACvDuI,YAAY,IAAIN,QAAQ,GAAG,GAA3B;;;YAGIS,QAAQ,GAAGL,YAAY,GAAGE,YAAhC;;YAEIG,QAAQ,IAAIR,qBAAhB,EAAuC;iBAC9BC,WAAW,CAACG,MAAZ,CAAmBF,QAAnB,CAAP;;;YAEE1F,OAAO,CAACH,OAAR,KAAoB,GAAxB,EAA6B;cACrBoG,cAAc,GAAGP,QAAQ,CAAC3O,IAAT,EAAvB;cACMmP,oBAAoB,GAAGpC,UAAU,CAACmC,cAAD,CAAvC;;cAEIC,oBAAoB,GAAG,EAAvB,IAA6BJ,OAAO,GAAG,IAA3C,EAAiD;mBACxCL,WAAW,CAACG,MAAZ,CAAmBF,QAAnB,CAAP;;;cAGAQ,oBAAoB,IAAI,EAAxB,IACAJ,OAAO,KAAK,CADZ,IAEA7L,cAAc,CAACgM,cAAD,CAHhB,EAIE;mBACOR,WAAW,CAACG,MAAZ,CAAmBF,QAAnB,CAAP;;;;;;WAMD,IAAP;GA3DJ;;MA+DED,WAAW,CAAChF,QAAZ,GAAuB7H,MAAvB,KAAkC,CAAlC,IACA6M,WAAW,CACRhF,QADH,GAEG0F,KAFH,GAGGjL,GAHH,CAGO,CAHP,MAGcoK,UAAU,CAACpK,GAAX,CAAe,CAAf,CALhB,EAME;WACOoK,UAAP;;;SAGKG,WAAP;;;ACtFF;;AACA,AAAe,SAASW,mBAAT,CAA0BtJ,CAA1B,EAA6B;MACtCwI,UAAJ;MACIC,QAAQ,GAAG,CAAf;EAEAzI,CAAC,CAAC,SAAD,CAAD,CAAaG,IAAb,CAAkB,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;;QAE7B6F,2BAAyB,CAACxL,IAA1B,CAA+B2F,IAAI,CAAC0C,OAApC,CAAJ,EAAkD;;;;QAI5CzC,KAAK,GAAGN,CAAC,CAACK,IAAD,CAAf;QACMsG,KAAK,GAAGC,QAAQ,CAACtG,KAAD,CAAtB;;QAEIqG,KAAK,GAAG8B,QAAZ,EAAsB;MACpBA,QAAQ,GAAG9B,KAAX;MACA6B,UAAU,GAAGlI,KAAb;;GAXJ,EAJ0C;;;MAqBtC,CAACkI,UAAL,EAAiB;WACRxI,CAAC,CAAC,MAAD,CAAD,IAAaA,CAAC,CAAC,GAAD,CAAD,CAAOqJ,KAAP,EAApB;;;EAGFb,UAAU,GAAGD,aAAa,CAACC,UAAD,EAAaC,QAAb,EAAuBzI,CAAvB,CAA1B;SAEOwI,UAAP;;;ACjCF;;ACWA,SAASe,mBAAT,CAA6BjJ,KAA7B,EAAoCN,CAApC,EAAuCwJ,MAAvC,EAA+C;;;;;MAKzClJ,KAAK,CAACmJ,QAAN,CAAe,qBAAf,CAAJ,EAA2C;;;;MAIrCpM,OAAO,GAAGrD,eAAe,CAACsG,KAAK,CAACrG,IAAN,EAAD,CAA/B;;MAEI4M,WAAW,CAACxJ,OAAD,CAAX,GAAuB,EAA3B,EAA+B;QACvBqM,MAAM,GAAG1J,CAAC,CAAC,GAAD,EAAMM,KAAN,CAAD,CAAcxE,MAA7B;QACM6N,UAAU,GAAG3J,CAAC,CAAC,OAAD,EAAUM,KAAV,CAAD,CAAkBxE,MAArC,CAF6B;;QAKzB6N,UAAU,GAAGD,MAAM,GAAG,CAA1B,EAA6B;MAC3BpJ,KAAK,CAACkC,MAAN;;;;QAIIpD,aAAa,GAAG/B,OAAO,CAACvB,MAA9B;QACM8N,QAAQ,GAAG5J,CAAC,CAAC,KAAD,EAAQM,KAAR,CAAD,CAAgBxE,MAAjC,CAX6B;;;QAezBsD,aAAa,GAAG,EAAhB,IAAsBwK,QAAQ,KAAK,CAAvC,EAA0C;MACxCtJ,KAAK,CAACkC,MAAN;;;;QAIIwG,OAAO,GAAGC,WAAW,CAAC3I,KAAD,CAA3B,CApB6B;;;;QAyBzBkJ,MAAM,GAAG,EAAT,IAAeR,OAAO,GAAG,GAAzB,IAAgC5J,aAAa,GAAG,EAApD,EAAwD;MACtDkB,KAAK,CAACkC,MAAN;;KA1B2B;;;;QAgCzBgH,MAAM,IAAI,EAAV,IAAgBR,OAAO,GAAG,GAA9B,EAAmC;;;;UAI3BjG,OAAO,GAAGzC,KAAK,CAAClC,GAAN,CAAU,CAAV,EAAa2E,OAAb,CAAqBhH,WAArB,EAAhB;UACM8N,UAAU,GAAG9G,OAAO,KAAK,IAAZ,IAAoBA,OAAO,KAAK,IAAnD;;UACI8G,UAAJ,EAAgB;YACRC,YAAY,GAAGxJ,KAAK,CAACyJ,IAAN,EAArB;;YAEED,YAAY,IACZ9P,eAAe,CAAC8P,YAAY,CAAC7P,IAAb,EAAD,CAAf,CAAqCsD,KAArC,CAA2C,CAAC,CAA5C,MAAmD,GAFrD,EAGE;;;;;MAKJ+C,KAAK,CAACkC,MAAN;;;;QAIIwH,WAAW,GAAGhK,CAAC,CAAC,QAAD,EAAWM,KAAX,CAAD,CAAmBxE,MAAvC,CApD6B;;QAuDzBkO,WAAW,GAAG,CAAd,IAAmB5K,aAAa,GAAG,GAAvC,EAA4C;MAC1CkB,KAAK,CAACkC,MAAN;;;;;;;;;;;;AAYN,AAAe,SAASyH,YAAT,CAAmBjF,QAAnB,EAA6BhF,CAA7B,EAAgC;EAC7CA,CAAC,CAACiB,wBAAD,EAA2B+D,QAA3B,CAAD,CAAsC7E,IAAtC,CAA2C,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;QACpDC,KAAK,GAAGN,CAAC,CAACK,IAAD,CAAf,CAD0D;;QAGtDC,KAAK,CAACmJ,QAAN,CAAe7I,UAAf,KAA8BN,KAAK,CAAC9F,IAAN,YAAeoG,UAAf,GAA6B9E,MAA7B,GAAsC,CAAxE,EACE;QAEE0N,MAAM,GAAG5C,QAAQ,CAACtG,KAAD,CAArB;;QACI,CAACkJ,MAAL,EAAa;MACXA,MAAM,GAAG9B,iBAAc,CAACpH,KAAD,EAAQN,CAAR,CAAvB;MACAuH,QAAQ,CAACjH,KAAD,EAAQN,CAAR,EAAWwJ,MAAX,CAAR;KATwD;;;QAatDA,MAAM,GAAG,CAAb,EAAgB;MACdlJ,KAAK,CAACkC,MAAN;KADF,MAEO;;MAEL+G,mBAAmB,CAACjJ,KAAD,EAAQN,CAAR,EAAWwJ,MAAX,CAAnB;;GAjBJ;SAqBOxJ,CAAP;;;AC3Ga,SAASkK,YAAT,CAAsBlF,QAAtB,EAAgChF,CAAhC,EAA+C;MAAZmK,KAAY,uEAAJ,EAAI;EAC5DnK,CAAC,CAACmB,eAAD,EAAkB6D,QAAlB,CAAD,CAA6B7E,IAA7B,CAAkC,UAACxE,KAAD,EAAQyO,MAAR,EAAmB;QAC7CC,OAAO,GAAGrK,CAAC,CAACoK,MAAD,CAAjB,CADmD;;;;;QAM/CpK,CAAC,CAACqK,OAAD,EAAUrF,QAAV,CAAD,CAAqBsF,OAArB,CAA6B,GAA7B,EAAkCxO,MAAlC,KAA6C,CAAjD,EAAoD;aAC3CuO,OAAO,CAAC7H,MAAR,EAAP;KAPiD;;;QAW/CxI,eAAe,CAACgG,CAAC,CAACoK,MAAD,CAAD,CAAUnQ,IAAV,EAAD,CAAf,KAAsCkQ,KAA1C,EAAiD;aACxCE,OAAO,CAAC7H,MAAR,EAAP;KAZiD;;;;QAiB/CkE,SAAS,CAAC1G,CAAC,CAACoK,MAAD,CAAF,CAAT,GAAuB,CAA3B,EAA8B;aACrBC,OAAO,CAAC7H,MAAR,EAAP;;;WAGK6H,OAAP;GArBF;SAwBOrK,CAAP;;;AC3BF;;AACA,AAAe,SAASuK,kBAAT,CAAyBpF,OAAzB,EAAkCnF,CAAlC,EAAqC;;;;EAIlDA,CAAC,GAAG4D,gBAAa,CAAC5D,CAAC,CAAC,MAAD,CAAF,EAAYA,CAAZ,EAAe,KAAf,CAAjB;EACAA,CAAC,GAAG4D,gBAAa,CAAC5D,CAAC,CAAC,MAAD,CAAF,EAAYA,CAAZ,EAAe,KAAf,CAAjB;SAEOA,CAAP;;;ACPF,SAASwK,UAAT,CAAoBxK,CAApB,EAAuByK,OAAvB,EAAgCjK,IAAhC,EAAsC;MAC9BkK,OAAO,GAAG1K,CAAC,CAAC,MAAD,CAAD,CAAUQ,IAAV,CAAe,MAAf,CAAhB;EAEAR,CAAC,YAAKQ,IAAL,OAAD,CAAeL,IAAf,CAAoB,UAACC,CAAD,EAAIC,IAAJ,EAAa;QACzB8D,KAAK,GAAGC,QAAQ,CAAC/D,IAAD,CAAtB;QACMhG,GAAG,GAAG8J,KAAK,CAAC3D,IAAD,CAAjB;QACI,CAACnG,GAAL,EAAU;QACJsQ,WAAW,GAAGxO,GAAG,CAACmC,OAAJ,CAAYoM,OAAO,IAAID,OAAvB,EAAgCpQ,GAAhC,CAApB;IAEAuQ,OAAO,CAACvK,IAAD,EAAOG,IAAP,EAAamK,WAAb,CAAP;GANF;;;AAUF,SAASE,aAAT,CAAuB7K,CAAvB,EAA0ByK,OAA1B,EAAmCK,QAAnC,EAA6C;EAC3C9K,CAAC,CAAC,UAAD,EAAa8K,QAAb,CAAD,CAAwB3K,IAAxB,CAA6B,UAACC,CAAD,EAAIC,IAAJ,EAAa;QAClC8D,KAAK,GAAGC,QAAQ,CAAC/D,IAAD,CAAtB;QACM0K,MAAM,GAAG5G,KAAK,CAAC6G,MAArB;;QAEID,MAAJ,EAAY;;;;UAIJE,UAAU,GAAGF,MAAM,CAAC1P,KAAP,CACjB,6CADiB,CAAnB;UAGI,CAAC4P,UAAL,EAAiB;UACXC,kBAAkB,GAAGD,UAAU,CAAC3G,GAAX,CAAe,UAAA6G,SAAS,EAAI;;;YAG/CC,KAAK,GAAGD,SAAS,CACpBhR,IADW,GAEXD,OAFW,CAEH,IAFG,EAEG,EAFH,EAGXsB,KAHW,CAGL,KAHK,CAAd;QAIA4P,KAAK,CAAC,CAAD,CAAL,GAAWjP,GAAG,CAACmC,OAAJ,CAAYmM,OAAZ,EAAqBW,KAAK,CAAC,CAAD,CAA1B,CAAX;eACOA,KAAK,CAACnO,IAAN,CAAW,GAAX,CAAP;OARyB,CAA3B;;UAUMoO,cAAc,GAAG,mBAAI,SAAQH,kBAAR,CAAJ,EAAiCjO,IAAjC,CAAsC,IAAtC,CAAvB;;MACA2N,OAAO,CAACvK,IAAD,EAAO,QAAP,EAAiBgL,cAAjB,CAAP;;GAvBJ;;;AA4BF,AAAe,SAASC,oBAAT,CAA2BR,QAA3B,EAAqC9K,CAArC,EAAwC3F,GAAxC,EAA6C;GACzD,MAAD,EAAS,KAAT,EAAgB+N,OAAhB,CAAwB,UAAA5H,IAAI;WAAIgK,UAAU,CAACxK,CAAD,EAAI3F,GAAJ,EAASmG,IAAT,CAAd;GAA5B;EACAqK,aAAa,CAAC7K,CAAD,EAAI3F,GAAJ,EAASyQ,QAAT,CAAb;SAEOA,QAAP;;;AClDK,SAAS9D,UAAT,CAAoB/M,IAApB,EAA0B;SACxBA,IAAI,CAACE,IAAL,GAAYD,OAAZ,CAAoB,MAApB,EAA4B,GAA5B,EAAiC4B,MAAxC;;;;;AAMF,AAAO,SAASmN,WAAT,CAAqB3I,KAArB,EAA4B;MAC3BiL,eAAe,GAAGvE,UAAU,CAAC1G,KAAK,CAACrG,IAAN,EAAD,CAAlC;MAEMuR,QAAQ,GAAGlL,KAAK,CAAC9F,IAAN,CAAW,GAAX,EAAgBP,IAAhB,EAAjB;MACMwR,UAAU,GAAGzE,UAAU,CAACwE,QAAD,CAA7B;;MAEID,eAAe,GAAG,CAAtB,EAAyB;WAChBE,UAAU,GAAGF,eAApB;;;MAEEA,eAAe,KAAK,CAApB,IAAyBE,UAAU,GAAG,CAA1C,EAA6C;WACpC,CAAP;;;SAGK,CAAP;;;ACjBF;;AACA,AAAe,SAASC,kBAAT,CACb1L,CADa,EAEb2L,SAFa,EAGbC,WAHa,EAKb;MADA3B,SACA,uEADY,IACZ;MACM4B,UAAU,GAAGF,SAAS,CAACG,MAAV,CAAiB,UAAAC,IAAI;WAAIH,WAAW,CAACI,OAAZ,CAAoBD,IAApB,MAA8B,CAAC,CAAnC;GAArB,CAAnB,CADA;;;;;;;;UAIWA,IAJX;UAKQE,IAAI,GAAG,MAAb;UACM1L,KAAK,GAAG,OAAd;UAEM2L,KAAK,GAAGlM,CAAC,gBAASiM,IAAT,gBAAkBF,IAAlB,SAAf,CARF;;;;UAaQI,MAAM,GAAGD,KAAK,CACjB5H,GADY,CACR,UAAC3I,KAAD,EAAQ0E,IAAR;eAAiBL,CAAC,CAACK,IAAD,CAAD,CAAQG,IAAR,CAAaD,KAAb,CAAjB;OADQ,EAEZ6L,OAFY,GAGZN,MAHY,CAGL,UAAA7R,IAAI;eAAIA,IAAI,KAAK,EAAb;OAHC,CAAf,CAbF;;;;;UAsBMkS,MAAM,CAACrQ,MAAP,KAAkB,CAAtB,EAAyB;YACnBuQ,SAAJ,CADuB;;;YAInBpC,SAAJ,EAAe;UACboC,SAAS,GAAGC,SAAS,CAACH,MAAM,CAAC,CAAD,CAAP,EAAYnM,CAAZ,CAArB;SADF,MAEO;uCACSmM,MADT;;UACJE,SADI;;;;aAIAA;;;;;sCA5BQR,UAAnB,4GAA+B;;;;KAJ/B;;;;;;;;;;;;;;;;;SAqCO,IAAP;;;AC5CF,SAASU,UAAT,CAAoBjM,KAApB,EAA2BkM,WAA3B,EAAwC;;;MAGlClM,KAAK,CAACqD,QAAN,GAAiB7H,MAAjB,GAA0B0Q,WAA9B,EAA2C;WAClC,KAAP;GAJoC;;;MAOlCC,gBAAa,CAACnM,KAAD,CAAjB,EAA0B;WACjB,KAAP;;;SAGK,IAAP;;;;;;AAMF,AAAe,SAASoM,uBAAT,CACb1M,CADa,EAEb2M,SAFa,EAKb;MAFAH,WAEA,uEAFc,CAEd;MADAI,QACA,uEADW,IACX;;;;;;;sCAEuBD,SAAvB,4GAAkC;UAAvBE,QAAuB;UAC1BX,KAAK,GAAGlM,CAAC,CAAC6M,QAAD,CAAf,CADgC;;;UAK5BX,KAAK,CAACpQ,MAAN,KAAiB,CAArB,EAAwB;YAChBwE,KAAK,GAAGN,CAAC,CAACkM,KAAK,CAAC,CAAD,CAAN,CAAf;;YAEIK,UAAU,CAACjM,KAAD,EAAQkM,WAAR,CAAd,EAAoC;cAC9BnP,OAAO,SAAX;;cACIuP,QAAJ,EAAc;YACZvP,OAAO,GAAGiD,KAAK,CAACrG,IAAN,EAAV;WADF,MAEO;YACLoD,OAAO,GAAGiD,KAAK,CAACkE,IAAN,EAAV;;;cAGEnH,OAAJ,EAAa;mBACJA,OAAP;;;;;;;;;;;;;;;;;;;;SAMD,IAAP;;;ACjDF;AACA,AAAe,SAASiP,SAAT,CAAmBrS,IAAnB,EAAyB+F,CAAzB,EAA4B;;;MAGnC8M,SAAS,GAAG9M,CAAC,iBAAU/F,IAAV,aAAD,CAA0BA,IAA1B,EAAlB;SACO6S,SAAS,KAAK,EAAd,GAAmB7S,IAAnB,GAA0B6S,SAAjC;;;ACHa,SAASL,gBAAT,CAAuBnM,KAAvB,EAA8B;MACrC0D,OAAO,GAAG1D,KAAK,CAAC0D,OAAN,GAAgBoI,OAAhB,EAAhB;MACMW,aAAa,GAAG/I,OAAO,CAACxJ,IAAR,CAAa,UAAAsL,MAAM,EAAI;QACrC3B,KAAK,GAAGC,QAAQ,CAAC0B,MAAD,CAAtB;QACekH,SAF4B,GAEV7I,KAFU,CAEnC8I,KAFmC;QAEjB3K,EAFiB,GAEV6B,KAFU,CAEjB7B,EAFiB;QAGrCC,UAAU,aAAMyK,SAAN,cAAmB1K,EAAnB,CAAhB;WACOC,UAAU,CAAC1F,QAAX,CAAoB,SAApB,CAAP;GAJoB,CAAtB;SAOOkQ,aAAa,KAAKG,SAAzB;;;ACXF;;;AAIA,AAAe,SAASC,gBAAT,CAA0B7M,KAA1B,EAAiC;SACvCA,KAAK,CAACrG,IAAN,GAAaE,IAAb,GAAoB2B,MAApB,IAA8B,GAArC;;;ACHa,SAASsR,WAAT,CAAqBpN,CAArB,EAAwB;SAC9BA,CAAC,CAAC2B,cAAD,CAAD,CAAkB7F,MAAlB,GAA2B,CAAlC;;;ACHa,SAASsI,QAAT,CAAkB/D,IAAlB,EAAwB;MAC7BgN,OAD6B,GACLhN,IADK,CAC7BgN,OAD6B;MACpBC,UADoB,GACLjN,IADK,CACpBiN,UADoB;;MAGjC,CAACD,OAAD,IAAYC,UAAhB,EAA4B;QACpBnJ,KAAK,GAAG,iBAAgBmJ,UAAhB,EAA4B5Q,MAA5B,CAAmC,UAACC,GAAD,EAAMhB,KAAN,EAAgB;UACzD6E,IAAI,GAAG8M,UAAU,CAAC3R,KAAD,CAAvB;UAEI,CAAC6E,IAAI,CAACuL,IAAN,IAAc,CAACvL,IAAI,CAACD,KAAxB,EAA+B,OAAO5D,GAAP;MAE/BA,GAAG,CAAC6D,IAAI,CAACuL,IAAN,CAAH,GAAiBvL,IAAI,CAACD,KAAtB;aACO5D,GAAP;KANY,EAOX,EAPW,CAAd;;WAQOwH,KAAP;;;SAGKkJ,OAAP;;;ACfa,SAASzC,OAAT,CAAiBvK,IAAjB,EAAuBG,IAAvB,EAA6B+M,GAA7B,EAAkC;MAC3ClN,IAAI,CAACgN,OAAT,EAAkB;IAChBhN,IAAI,CAACgN,OAAL,CAAa7M,IAAb,IAAqB+M,GAArB;GADF,MAEO,IAAIlN,IAAI,CAACiN,UAAT,EAAqB;IAC1BjN,IAAI,CAACmN,YAAL,CAAkBhN,IAAlB,EAAwB+M,GAAxB;;;SAGKlN,IAAP;;;ACPa,SAASsF,QAAT,CAAkBtF,IAAlB,EAAwB8D,KAAxB,EAA+B;MACxC9D,IAAI,CAACgN,OAAT,EAAkB;IAChBhN,IAAI,CAACgN,OAAL,GAAelJ,KAAf;GADF,MAEO,IAAI9D,IAAI,CAACiN,UAAT,EAAqB;WACnBjN,IAAI,CAACiN,UAAL,CAAgBxR,MAAhB,GAAyB,CAAhC,EAAmC;MACjCuE,IAAI,CAACoN,eAAL,CAAqBpN,IAAI,CAACiN,UAAL,CAAgB,CAAhB,EAAmBvB,IAAxC;;;qBAGc5H,KAAhB,EAAuBiE,OAAvB,CAA+B,UAAA7D,GAAG,EAAI;MACpClE,IAAI,CAACmN,YAAL,CAAkBjJ,GAAlB,EAAuBJ,KAAK,CAACI,GAAD,CAA5B;KADF;;;SAKKlE,IAAP;;;ACbF;;ACAO,IAAMqN,OAAO,GAAG,IAAI7S,MAAJ,CAAW,WAAX,EAAwB,GAAxB,CAAhB;AACP,IAAM8S,QAAQ,GAAG,kBAAjB;AACA,AAAO,IAAMC,QAAQ,GAAG,IAAI/S,MAAJ,WAAc8S,QAAd,GAA0B,GAA1B,CAAjB;AACP,AAAO,IAAME,SAAS,GAAG,IAAIhT,MAAJ,WACpB8S,QADoB,kCAEvB,GAFuB,CAAlB;AAKP,AAAO,IAAMG,cAAc,GAAG,CAAC,QAAD,EAAW,OAAX,EAAoB,MAApB,EAA4B7Q,IAA5B,CAAiC,GAAjC,CAAvB;;ACHP;;;;;AAIA,AAAe,SAAS8Q,uBAAT,CAAiC/N,CAAjC,EAAoC;MAC3CgO,kBAAkB,GAAG,SAArBA,kBAAqB,CAAAvQ,GAAG,EAAI;QAC5B;wBACcwQ,IAAI,CAAC7R,KAAL,CAAWqB,GAAX,CADd;UACMyQ,GADN,eACMA,GADN;;UAEE,OAAOA,GAAP,KAAe,QAAnB,EAA6B,OAAOA,GAAP;KAF/B,CAGE,OAAO9N,CAAP,EAAU;aACH,KAAP;;;WAGK,KAAP;GARF;;EAWAJ,CAAC,CAAC,KAAD,CAAD,CAASG,IAAT,CAAc,UAACC,CAAD,EAAI6E,GAAJ,EAAY;QAClBd,KAAK,GAAGC,QAAQ,CAACa,GAAD,CAAtB;;qBAEgBd,KAAhB,EAAuBiE,OAAvB,CAA+B,UAAA5H,IAAI,EAAI;UAC/BD,KAAK,GAAG4D,KAAK,CAAC3D,IAAD,CAAnB;;UAEIA,IAAI,KAAK,QAAT,IAAqBkN,OAAO,CAAChT,IAAR,CAAa6F,KAAb,CAArB,IAA4CsN,SAAS,CAACnT,IAAV,CAAe6F,KAAf,CAAhD,EAAuE;QACrEP,CAAC,CAACiF,GAAD,CAAD,CAAOzE,IAAP,CAAY,QAAZ,EAAsBD,KAAtB;OADF,MAEO,IACLC,IAAI,KAAK,KAAT,IACAA,IAAI,KAAK,QADT,IAEAkN,OAAO,CAAChT,IAAR,CAAa6F,KAAb,CAFA,IAGAqN,QAAQ,CAAClT,IAAT,CAAc6F,KAAd,CAJK,EAKL;;YAEM4N,WAAW,GAAGH,kBAAkB,CAACzN,KAAD,CAAtC;;YACI4N,WAAJ,EAAiB;UACfnO,CAAC,CAACiF,GAAD,CAAD,CAAOzE,IAAP,CAAY,KAAZ,EAAmB2N,WAAnB;SADF,MAEO;UACLnO,CAAC,CAACiF,GAAD,CAAD,CAAOzE,IAAP,CAAY,KAAZ,EAAmBD,KAAnB;;;KAhBN;GAHF;SAyBOP,CAAP;;;AC5CF,SAASoO,SAAT,CAAmBzS,KAAnB,EAA0B0E,IAA1B,EAAgC;SACvBA,IAAI,CAAC4L,IAAL,KAAc,SAArB;;;AAGF,SAASoC,aAAT,CAAuBrO,CAAvB,EAA0B;EACxBA,CAAC,CAACsO,IAAF,GACG9T,IADH,CACQ,GADR,EAEGiK,QAFH,GAGGqH,MAHH,CAGUsC,SAHV,EAIG5L,MAJH;SAMOxC,CAAP;;;AAGF,AAAe,SAASuO,KAAT,CAAevO,CAAf,EAAkB;EAC/BA,CAAC,CAAC8N,cAAD,CAAD,CAAkBtL,MAAlB;EAEAxC,CAAC,GAAGqO,aAAa,CAACrO,CAAD,CAAjB;SACOA,CAAP;;;ACbF,IAAMwO,QAAQ,GAAG;;;;;;;;EAQTC,MARS;;;8CAQFpU,GARE,EAQGqU,gBARH,EAQqBxS,SARrB;;;;;;;;;cAQgCgD,OARhC,2DAQ0C,EAR1C;;mBAWTwP,gBAXS;;;;;cAYLC,aAZK,GAYW;gBACpB7P,aAAa,EAAE,IADK;gBAEpBC,UAAU,EAAE,GAFQ;gBAGpBG,OAAO,EAAE;kCACS,WADT;oCAEW;;eAjBX;cAqBX0P,MAAM,GAAG;gBACPjQ,IAAI,EAAE+P,gBADC;gBAEPhQ,QAAQ,EAAEiQ,aAFH;gBAGPE,cAAc,EAAE;eAHlB;;;;;;qBAMexP,aAAa,CAAChF,GAAD,EAAM6B,SAAN,EAAiBgD,OAAjB,CA3BjB;;;cA2BX0P,MA3BW;;;mBA8BTA,MAAM,CAAC3P,KA9BE;;;;;cA+BX2P,MAAM,CAACE,MAAP,GAAgB,IAAhB;+CACOF,MAhCI;;;+CAmCN,KAAKG,WAAL,CAAiBH,MAAjB,CAnCM;;;;;;;;;;;;;;;;EAsCfG,WAtCe,6BAsCkD;QAA7C1R,OAA6C,QAAnDsB,IAAmD;QAApCD,QAAoC,QAApCA,QAAoC;mCAA1BmQ,cAA0B;QAA1BA,cAA0B,oCAAT,KAAS;gCAClBnQ,QAAQ,CAACQ,OADS,CACvD,cADuD;QACvCC,WADuC,sCACzB,EADyB;;;QAK3D,CAACA,WAAW,CAACtC,QAAZ,CAAqB,MAArB,CAAD,IAAiC,CAACsC,WAAW,CAACtC,QAAZ,CAAqB,MAArB,CAAtC,EAAoE;YAC5D,IAAImC,KAAJ,CAAU,qCAAV,CAAN;;;QAGEgB,CAAC,GAAG,KAAKgP,SAAL,CAAe;MAAE3R,OAAO,EAAPA,OAAF;MAAW8B,WAAW,EAAXA,WAAX;MAAwB0P,cAAc,EAAdA;KAAvC,CAAR;;QAEI7O,CAAC,CAACsO,IAAF,GAAS3K,QAAT,GAAoB7H,MAApB,KAA+B,CAAnC,EAAsC;YAC9B,IAAIkD,KAAJ,CAAU,kCAAV,CAAN;;;IAGFgB,CAAC,GAAGU,iBAAiB,CAACV,CAAD,CAArB;IACAA,CAAC,GAAG+N,uBAAuB,CAAC/N,CAAD,CAA3B;IACAA,CAAC,GAAGuO,KAAK,CAACvO,CAAD,CAAT;WAEOA,CAAP;GAzDa;EA4DfgP,SA5De,4BA4D6C;QAAhD3R,OAAgD,SAAhDA,OAAgD;QAAvC8B,WAAuC,SAAvCA,WAAuC;qCAA1B0P,cAA0B;QAA1BA,cAA0B,qCAAT,KAAS;;QACtDA,cAAJ,EAAoB;aACX/Q,OAAO,CAACmR,IAAR,CAAa5R,OAAb,CAAP;;;QAGIK,QAAQ,GAAGF,WAAW,CAAC2B,WAAD,CAA5B;QACI+P,cAAc,GAAGvR,KAAK,CAACwR,MAAN,CAAa9R,OAAb,EAAsBK,QAAtB,CAArB;QACIsC,CAAC,GAAGlC,OAAO,CAACmR,IAAR,CAAaC,cAAb,CAAR,CAP0D;;QASpDE,mBAAmB,GAAGtR,OAAO,CAACC,OAAR,GACxB,+BADwB,GAExB,iCAFJ;QAGMsR,eAAe,GACnBrP,CAAC,CAACoP,mBAAD,CAAD,CAAuB5O,IAAvB,CAA4B,SAA5B,KACAR,CAAC,CAAC,eAAD,CAAD,CAAmBQ,IAAnB,CAAwB,SAAxB,CAFF;QAGM8O,cAAc,GAAG9R,WAAW,CAAC6R,eAAD,CAAlC,CAf0D;;QAkBtDA,eAAe,IAAIC,cAAc,KAAK5R,QAA1C,EAAoD;MAClDwR,cAAc,GAAGvR,KAAK,CAACwR,MAAN,CAAa9R,OAAb,EAAsBiS,cAAtB,CAAjB;MACAtP,CAAC,GAAGlC,OAAO,CAACmR,IAAR,CAAaC,cAAb,CAAJ;;;WAGKlP,CAAP;;CAnFJ;;;;yBCPyBuP;;AAAzB,AAAe,SAAUA,KAAV;;;;;;;;UAAgBC,KAAhB,2DAAwB,CAAxB;UAA2BC,GAA3B,2DAAiC,CAAjC;;;gBACND,KAAK,IAAIC,GADH;;;;;;iBAEJD,KAAK,IAAI,CAAhB;;;;;;;;;;;;;;ACFJ;AACA,AAAe,SAASE,WAAT,OAAmC;MAAZrK,QAAY,QAAZA,QAAY;;SAEzC,CAAC,CAACA,QAAT;;;ACHF,IAAMsK,KAAK,GAAG,SAARA,KAAQ,CAACC,SAAD,EAAYC,OAAZ;SACZA,OAAO,CAACnT,MAAR,CAAe,UAACC,GAAD,EAAMmT,MAAN,EAAiB;IAC9BnT,GAAG,CAACmT,MAAD,CAAH,GAAcF,SAAd;WACOjT,GAAP;GAFF,EAGG,EAHH,CADY;CAAd;;AAMA,AAAe,SAASoT,qBAAT,CAA+BH,SAA/B,EAA0C;SAChDA,SAAS,CAACI,gBAAV,GACHL,KAAK,CAACC,SAAD,GAAaA,SAAS,CAACE,MAAvB,4BAAkCF,SAAS,CAACI,gBAA5C,GADF,GAEHL,KAAK,CAACC,SAAD,EAAY,CAACA,SAAS,CAACE,MAAX,CAAZ,CAFT;;;ACLK,IAAMG,aAAa,GAAG,EAAtB;AAEP,AAAe,SAASC,YAAT,CAAsBN,SAAtB,EAAiC;MAC1C,CAACA,SAAD,IAAc,CAACA,SAAS,CAACE,MAA7B,EAAqC;WAC5B;MACL7Q,KAAK,EAAE,IADF;MAELa,OAAO,EAAE;KAFX;;;iBAMYmQ,aAAd,EAA6BF,qBAAqB,CAACH,SAAD,CAAlD;;SAEOK,aAAP;;;ACdK,IAAME,gBAAgB,GAAG;EAC9BL,MAAM,EAAE,cADsB;EAE9BzS,OAAO,EAAE;;;;IAIPsP,SAAS,EAAE,CAAC,wBAAD,CAJJ;;IAOP4B,KAAK,EAAE,EAPA;;IAUP6B,UAAU,EAAE;MACVC,QAAQ,EAAE;;GAbgB;EAiB9BC,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,mBAAD;GAlBiB;EAqB9BxC,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD;GAtBiB;EAyB9B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,kBAAD;;CA1BR;;ACAA,IAAM6D,cAAc,GAAG;EAC5BV,MAAM,EAAE,WADoB;EAE5BzS,OAAO,EAAE;;IAEPsP,SAAS,EAAE,CAAC,qBAAD,EAAwB,cAAxB,EAAwC,iBAAxC,CAFJ;;IAKP4B,KAAK,EAAE,CAAC,KAAD,EAAQ,uBAAR,CALA;;;;;;;IAaP6B,UAAU,EAAE;;MAEVK,EAAE,EAAE,IAFM;;MAKVJ,QAAQ,EAAE,kBAAC/P,KAAD,EAAQN,CAAR,EAAc;YAChB0Q,SAAS,GAAG1Q,CAAC,CAACjC,OAAF,GAAYiC,CAAC,CAACM,KAAK,CAACrG,IAAN,EAAD,CAAb,GAA8BqG,KAAK,CAACqD,QAAN,EAAhD;;YAEE+M,SAAS,CAAC5U,MAAV,KAAqB,CAArB,IACA4U,SAAS,CAACtS,GAAV,CAAc,CAAd,MAAqB8O,SADrB,IAEAwD,SAAS,CAACtS,GAAV,CAAc,CAAd,EAAiB2E,OAAjB,CAAyBhH,WAAzB,OAA2C,KAH7C,EAIE;iBACO,QAAP;;;eAGK,IAAP;;;GA9BsB;EAmC5BoO,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,uBAAD,EAA0B,qBAA1B,EAAiD,IAAjD;GApCe;EAuC5B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,aAAD,EAAgB,sBAAhB;GAxCe;EA2C5BgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,sBAAD;GA5Ce;EA+C5B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,kCAAD,EAAqC,UAArC,CADS,EAET,wBAFS;;CAhDR;;ACAA,IAAMiE,kBAAkB,GAAG;EAChCd,MAAM,EAAE,eADwB;EAEhCzS,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;;IAMPT,UAAU,EAAE;sBACM,oBAAA9P,KAAK,EAAI;YACjB2H,OAAO,GAAG3H,KAAK,CAAC0D,OAAN,CAAc,UAAd,CAAhB,CADuB;;YAGnBiE,OAAO,CAACtE,QAAR,CAAiB,KAAjB,EAAwB7H,MAAxB,KAAmC,CAAvC,EAA0C;UACxCmM,OAAO,CAAC6I,OAAR,CAAgBxQ,KAAhB;;OALM;0BAQU,YARV;kBASE;KAfP;;IAmBPiO,KAAK,EAAE,CACL,iBADK,EAEL,oCAFK,EAGL,MAHK,EAIL,SAJK;GArBuB;EA6BhC+B,MAAM,EAAE,wBA7BwB;EA+BhCnG,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,UAAD;GAhCmB;EAmChC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,sBAAD;;CApCR;;ACAA,IAAMoE,gBAAgB,GAAG;EAC9BjB,MAAM,EAAE,aADsB;EAG9BzS,OAAO,EAAE;IACP+S,UAAU,EAAE;;;;;+BAKe,2BAAC9P,KAAD,EAAQN,CAAR,EAAc;YAC/BgR,MAAM,GAAG1Q,KAAK,CAAC9F,IAAN,CAAW,QAAX,CAAf;YACMyW,eAAe,GAAGjR,CAAC,CAAC,iCAAD,CAAzB;QACAiR,eAAe,CAACnI,MAAhB,CAAuBkI,MAAvB;QACA1Q,KAAK,CAACgD,WAAN,CAAkB2N,eAAlB;OATQ;;;MAcVC,CAAC,EAAE;KAfE;IAkBPvE,SAAS,EAAE,CAAC,uBAAD,CAlBJ;IAoBPkE,cAAc,EAAE,KApBT;IAsBPtC,KAAK,EAAE,CAAC,qBAAD,EAAwB,QAAxB,EAAkC,sBAAlC;GAzBqB;EA4B9B+B,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kCAAD;GA7BiB;EAgC9B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,4CAAD,EAA+C,cAA/C,CAAD;;CAjCR;;ACAA,IAAMwE,gBAAgB,GAAG;EAC9BrB,MAAM,EAAE,iBADsB;EAG9B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,4BADS,EAET,eAFS,EAGT,yBAHS,EAIT,aAJS,EAKT,sBALS;GAJiB;EAa9B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,qBAAD,EAAwB,OAAxB,CADS,EAET,WAFS,EAGT,SAHS,EAIT,CAAC,kBAAD,EAAqB,OAArB,CAJS;GAdiB;EAsB9BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,EAAiB,6BAAjB,EAAgD,eAAhD,CADJ;IAGPyD,UAAU,EAAE;oBACI,kBAAA9P,KAAK,EAAI;YACjB4N,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,KAAX,CAAV;YACMqE,KAAK,GAAG,GAAd;QAEAqJ,GAAG,GAAGA,GAAG,CAAChU,OAAJ,CAAY,UAAZ,EAAwB2K,KAAxB,CAAN;QACAvE,KAAK,CAACE,IAAN,CAAW,KAAX,EAAkB0N,GAAlB;;KATG;IAaPK,KAAK,EAAE,CACL,KADK,EAEL,qBAFK,EAGL,2BAHK,EAIL,kBAJK,EAKL,mBALK,EAML,QANK,EAOL,kBAPK,EAQL,SARK,EASL,WATK,EAUL,eAVK,EAWL,YAXK,EAYL,qBAZK;GAnCqB;EAmD9BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,gCAAD,EAAmC,OAAnC,CAFS;GApDiB;EA0D9ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA3DiB;EA8D9BgE,GAAG,EAAE,IA9DyB;EAgE9BU,aAAa,EAAE,IAhEe;EAkE9BC,OAAO,EAAE;CAlEJ;;ACAP;;AAEA,AAAO,IAAMC,oBAAoB,GAAG;EAClCzB,MAAM,EAAE,qBAD0B;EAElC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,wBAAP;GAHqB;EAMlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD,EAAmC,mBAAnC;GAPqB;EAUlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,EAAY,eAAZ,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CACL,cADK,EAEL,UAFK,EAGL,0BAHK,EAIL,4BAJK,EAKL,sBALK,EAML,iBANK,EAOL,uBAPK,EAQL,gBARK;GApByB;EAgClCoC,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD;GAjCqB;EAoClC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,gCAAD,EAAmC,UAAnC,CAAD;GArCqB;EAwClCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAzCqB;EA4ClC0E,aAAa,EAAE,IA5CmB;EA8ClCC,OAAO,EAAE;CA9CJ;;ACFP;;;AAGA,AAAO,IAAME,kBAAkB,GAAG;EAChC1B,MAAM,EAAE,mBADwB;EAEhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,6BADS,EAET,iCAFS,EAGT,+BAHS,EAIT,CAAC,uBAAD,EAA0B,OAA1B,CAJS;GAHmB;EAWhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,6CADS,EAET,CAAC,6BAAD,EAAgC,OAAhC,CAFS,EAGT,mDAHS,EAIT,2DAJS;GAZmB;EAoBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,gBADS,EAET,8BAFS,EAGT,gCAHS,CADJ;;;IASPyD,UAAU,EAAE;wBACQ,YADR;0BAEU;KAXf;;;;IAiBP7B,KAAK,EAAE,CAAC,wCAAD,EAA2C,OAA3C;GArCuB;EAwChCgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,mCAFS,EAGT,CAAC,sBAAD,EAAyB,OAAzB,CAHS,CADG;IAMd8E,QAAQ,EAAE;GA9CoB;EAiDhCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlDmB;EAqDhCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CACT,gCADS,EAET,yBAFS,EAGT,iCAHS;GAtDmB;EA6DhC0E,aAAa,EAAE,IA7DiB;EA+DhCC,OAAO,EAAE;CA/DJ;;ACHP;;;AAGA,AAAO,IAAMI,cAAc,GAAG;EAC5B5B,MAAM,EAAE,eADoB;EAE5B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,oCADS;GAHe;EAS5B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,6BAAD,EAAgC,OAAhC,CADS,EAET,iBAFS;GAVe;EAiB5BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,8BADS,EAET,iBAFS,CADJ;;;IASPyD,UAAU,EAAE,EATL;;;;IAcP7B,KAAK,EAAE,CAAC,kBAAD,EAAqB,sBAArB,EAA6C,gBAA7C;GA/BmB;EAkC5BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAnCe;EAsC5ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvCe;EA0C5BgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GA3Ce;EA8C5B0E,aAAa,EAAE,IA9Ca;EAgD5BC,OAAO,EAAE;CAhDJ;;ACHP;;;AAGA,AAAO,IAAMK,YAAY,GAAG;EAC1B7B,MAAM,EAAE,aADkB;EAE1B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,IADS;GAHa;EAS1B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,qBADS;GAVa;EAgB1BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,cADS,CADJ;;;IAQPyD,UAAU,EAAE,EARL;;;;IAaP7B,KAAK,EAAE,CAAC,cAAD;GA7BiB;EAgC1BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,WAAD;GAjCa;EAoC1ByE,cAAc,EAAE;IACdzE,SAAS,EAAE;GArCa;EAwC1BgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GAzCa;EA4C1B0E,aAAa,EAAE,IA5CW;EA8C1BC,OAAO,EAAE;CA9CJ;;ACHP;;;AAGA,AAAO,IAAMM,cAAc,GAAG;EAC5B9B,MAAM,EAAE,eADoB;EAE5B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,sBADS;GAHe;EAS5B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,oBADS;GAVe;EAgB5BtP,OAAO,EAAE;IACPsP,SAAS,EAAE;qBAAA,CADJ;;;IAQPyD,UAAU,EAAE,EARL;;;;IAaP7B,KAAK,EAAE,CAAC,iBAAD;GA7BmB;EAgC5BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,UAAxB,CAAD;GAjCe;EAoC5ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GArCe;EAwC5BgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAzCe;EA8C5B0E,aAAa,EAAE,IA9Ca;EAgD5BC,OAAO,EAAE;CAhDJ;;ACHP;;;AAGA,AAAO,IAAMO,iBAAiB,GAAG;EAC/B/B,MAAM,EAAE,kBADuB;EAG/BE,gBAAgB,EAAE,CAAC,sBAAD,CAHa;EAK/B7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,yBADS;GANkB;EAY/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,gCADS,EAET,gBAFS,EAGT,CAAC,qBAAD,EAAwB,OAAxB,CAHS;GAbkB;EAqB/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,gDAAD,EAAmD,qBAAnD,CADS,EAET,CAAC,qBAAD,CAFS,CADJ;IAMPkE,cAAc,EAAE,KANT;;;IAUPT,UAAU,EAAE;MACV0B,EAAE,EAAE,GADM;0CAG0B,yCAAAxR,KAAK,EAAI;YACvCA,KAAK,CAACyR,GAAN,CAAU,KAAV,KAAoBzR,KAAK,CAACyR,GAAN,CAAU,+BAAV,CAAxB,EAAoE;iBAC3D,QAAP;;;eAGK,IAAP;OARQ;2EAYR;KAtBG;;;;IA4BPxD,KAAK,EAAE,CACL,oBADK,EAEL,uEAFK,EAGL,YAHK,EAIL,QAJK,EAKL,sBALK,EAML,kBANK;GAjDsB;EA2D/BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,gBAAD,EAAmB,UAAnB,CAAD;GA5DkB;EA+D/ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhEkB;EAmE/BgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,6BAAD;GApEkB;EAuE/B0E,aAAa,EAAE,IAvEgB;EAyE/BC,OAAO,EAAE;CAzEJ;;ACHP;;;AAGA,AAAO,IAAMU,cAAc,GAAG;EAC5BlC,MAAM,EAAE,kBADoB;EAE5B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,gBADS;GAHe;EAS5B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,eADS,EAET,KAFS;GAVe;EAiB5BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,eADS,EAET,gBAFS,CADJ;;;IASPyD,UAAU,EAAE,EATL;;;;IAcP7B,KAAK,EAAE;GA/BmB;EAkC5BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAnCe;EAsC5ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvCe;EA0C5BgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GA3Ce;EA8C5B0E,aAAa,EAAE,IA9Ca;EAgD5BC,OAAO,EAAE;CAhDJ;;ACHP;;;AAGA,AAAO,IAAMW,qBAAqB,GAAG;EACnCnC,MAAM,EAAE,sBAD2B;EAEnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,yBADS,EAET,eAFS;GAHsB;EAUnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,+CADS,EAET,CAAC,qBAAD,EAAwB,OAAxB,CAFS;GAXsB;EAkBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE;uCAAA,EAGT,mBAHS,EAIT,kBAJS,CADJ;;;IAUPyD,UAAU,EAAE,EAVL;;;;IAeP7B,KAAK,EAAE;GAjC0B;EAoCnC6C,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GArCsB;EAwCnC0E,aAAa,EAAE,IAxCoB;EA0CnCC,OAAO,EAAE;CA1CJ;;ACHA,IAAMY,iBAAiB,GAAG;EAC/BpC,MAAM,EAAE,kBADuB;EAE/B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAHkB;EAM/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,8CAAD,EAAiD,OAAjD,CADS,EAET,6BAFS,EAGT,oCAHS;GAPkB;EAc/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,aAAD,CAAD,EAAkB,qBAAlB,EAAyC,aAAzC,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE,CAAC,YAAD,EAAe,aAAf,EAA8B,KAA9B;GAnBsB;EAsB/BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,gCAAD,EAAmC,UAAnC,CADS,EAET,CAAC,qCAAD,EAAwC,UAAxC,CAFS,EAGT,CAAC,+CAAD,EAAkD,UAAlD,CAHS,CADG;IAMd8E,QAAQ,EAAE;GA5BmB;EA+B/BL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhCkB;EAmC/BgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;;CApCR;;ACAA,IAAMwF,iBAAiB,GAAG;EAC/BrC,MAAM,EAAE,cADuB;EAG/BE,gBAAgB,EAAE,CAChB,aADgB,EAEhB,gBAFgB,EAGhB,YAHgB,EAIhB,aAJgB,EAKhB,cALgB,EAMhB,WANgB,EAOhB,YAPgB,EAQhB,eARgB,EAShB,kBATgB,EAUhB,cAVgB,EAWhB,aAXgB,EAYhB,gBAZgB,EAahB,kBAbgB,CAHa;EAmB/B7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,WAAD,EAAc,aAAd;GApBkB;EAuB/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,sBAAD,EAAyB,SAAzB;GAxBkB;EA2B/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,EAAqB,eAArB,EAAsC,gBAAtC,CADJ;;;IAKPyD,UAAU,EAAE;0DAC0C,8CAAA9P,KAAK,EAAI;YACrD8R,SAAS,GAAG9R,KAAK,CAACE,IAAN,CAAW,IAAX,EAAiBhF,KAAjB,CAAuB,UAAvB,EAAmC,CAAnC,CAAlB;QACA8E,KAAK,CAACE,IAAN,CAAW,KAAX,0CAAmD4R,SAAnD;;KARG;;;;IAeP7D,KAAK,EAAE,CAAC,YAAD,EAAe,WAAf;GA1CsB;EA6C/BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,wBAAD,EAA2B,UAA3B,CAFS;GA9CkB;EAoD/ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GArDkB;EAwD/BgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAzDkB;EA8D/B0E,aAAa,EAAE;IACb1E,SAAS,EAAE;;GA/DkB;EAoE/B2E,OAAO,EAAE;IACP3E,SAAS,EAAE;;;CArER;;ACAP;;;AAGA,AAAO,IAAM0F,sBAAsB,GAAG;EACpCvC,MAAM,EAAE,uBAD4B;EAEpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,uBAAD,EAA0B,kBAA1B;GAHuB;EAMpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,uBAAD;GAPuB;EAUpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,2BAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;GApB2B;EAuBpCgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,8BAAD,EAAiC,OAAjC,CAAD;GAxBuB;EA2BpCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA5BuB;EA+BpCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GAhCuB;EAmCpC0E,aAAa,EAAE;IACb1E,SAAS,EAAE;;GApCuB;EAyCpC2E,OAAO,EAAE;IACP3E,SAAS,EAAE;;;CA1CR;;ACHP;;;AAGA,AAAO,IAAM2F,yBAAyB,GAAG;EACvCxC,MAAM,EAAE,0BAD+B;EAEvC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,aAAD;GAH0B;EAMvC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,mBAAD;GAP0B;EAUvCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;;;IAKPyD,UAAU,EAAE;wDACwC,+CAAC9P,KAAD,EAAQN,CAAR,EAAc;YACxDuS,IAAI,GAAGtE,IAAI,CAAC7R,KAAL,CAAWkE,KAAK,CAACE,IAAN,CAAW,YAAX,CAAX,CAAb;YACQ0N,GAFsD,GAE9CqE,IAAI,CAACC,OAAL,CAAa,CAAb,CAF8C,CAEtDtE,GAFsD;YAGxDvJ,IAAI,GAAG3E,CAAC,CAAC,SAAD,CAAD,CAAaQ,IAAb,CAAkB,KAAlB,EAAyB0N,GAAzB,CAAb;QACA5N,KAAK,CAACgD,WAAN,CAAkBqB,IAAlB;;KAVG;;;;IAiBP4J,KAAK,EAAE;GA3B8B;EA8BvCgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,kCAAD,EAAqC,UAArC,CAAD;GA/B0B;EAkCvCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnC0B;EAsCvCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GAvC0B;EA0CvC0E,aAAa,EAAE;IACb1E,SAAS,EAAE;;GA3C0B;EAgDvC2E,OAAO,EAAE;IACP3E,SAAS,EAAE;;;CAjDR;;ACHA,IAAM8F,eAAe,GAAG;EAC7B3C,MAAM,EAAE,YADqB;EAG7B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,CAAC,uBAAD,EAA0B,OAA1B,CAAP;GAJgB;EAO7B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARgB;EAW7BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,CADJ;;;IAKPyD,UAAU,EAAE;;oCAEoB,gCAAA9P,KAAK,EAAI;YAC/BoS,KAAK,GAAGpS,KAAK,CAACkE,IAAN,EAAd;;YACIkO,KAAK,CAAC5W,MAAN,KAAiB,CAAjB,IAAsB,gBAAgBpB,IAAhB,CAAqBgY,KAArB,CAA1B,EAAuD;UACrDpS,KAAK,CAACgD,WAAN,CAAkBoP,KAAlB;;OALM;;MASVC,MAAM,EAAE,gBAAArS,KAAK,EAAI;YACTsS,IAAI,GAAG,kEAAb;YACMC,KAAK,GAAGC,kBAAkB,CAACxS,KAAK,CAACE,IAAN,CAAW,gBAAX,CAAD,CAAhC;YACMyH,OAAO,GAAG3H,KAAK,CAAC0D,OAAN,CAAc,QAAd,CAAhB;;YAEI4O,IAAI,CAAClY,IAAL,CAAUmY,KAAV,CAAJ,EAAsB;6BACGA,KAAK,CAACxX,KAAN,CAAYuX,IAAZ,CADH;;cACbxS,CADa;cACVgS,SADU;;;UAEpB9R,KAAK,CAACE,IAAN,CAAW,KAAX,0CAAmD4R,SAAnD;cACMW,QAAQ,GAAG9K,OAAO,CAACzN,IAAR,CAAa,YAAb,CAAjB;UACAyN,OAAO,CAAC+K,KAAR,GAAgBlK,MAAhB,CAAuB,CAACxI,KAAD,EAAQyS,QAAR,CAAvB;;SATa;;;QAcf9K,OAAO,CAACzF,MAAR;OAvBQ;;MA2BVyQ,MAAM,EAAE,gBAAA3S,KAAK,EAAI;;YAEXA,KAAK,CAAC9F,IAAN,CAAW,QAAX,EAAqBsB,MAArB,GAA8B,CAAlC,EAAqC;YAE/B6I,IAAI,GAAGrE,KAAK,CAAC9F,IAAN,CAAW,KAAX,EAAkB+C,KAAlB,CAAwB,CAAC,CAAzB,EAA4B,CAA5B,CAAb;YACMwV,QAAQ,GAAGzS,KAAK,CAAC9F,IAAN,CAAW,YAAX,CAAjB;QAEA8F,KAAK,CAAC0S,KAAN,GAAclK,MAAd,CAAqB,CAACnE,IAAD,EAAOoO,QAAP,CAArB;OAlCQ;;;MAuCV9N,GAAG,EAAE,aAAA3E,KAAK,EAAI;YACNuE,KAAK,GAAG,UAASvE,KAAK,CAACE,IAAN,CAAW,OAAX,CAAT,EAA8B,EAA9B,CAAd;;YACIqE,KAAK,GAAG,GAAZ,EAAiBvE,KAAK,CAACkC,MAAN;;KA9Cd;;;;IAqDP+L,KAAK,EAAE,CAAC,QAAD,EAAW,KAAX;GAhEoB;EAmE7BgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GApEgB;EAuE7ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAxEgB;EA2E7BgE,GAAG,EAAE,IA3EwB;EA6E7BU,aAAa,EAAE;IACb1E,SAAS,EAAE;;GA9EgB;EAmF7B2E,OAAO,EAAE;IACP3E,SAAS,EAAE;;;CApFR;;ACAA,IAAMuG,kBAAkB,GAAG;EAChCpD,MAAM,EAAE,aADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,wBAAD,EAA2B,IAA3B,EAAiC,WAAjC;GAJmB;EAOhC2D,MAAM,EAAE,WAPwB;EAShCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,wBAAD,EAA2B,sBAA3B,CADG;IAGd8E,QAAQ,EAAE;GAZoB;EAehCd,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAhBmB;EAqBhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBmB;EAyBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,EAAqB,kBAArB,EAAyC,gBAAzC,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,gBAAD;;CAnCJ;;ACAA,IAAM4E,6BAA6B,GAAG;EAC3CrD,MAAM,EAAE,wBADmC;EAG3C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,0BAAP;GAJ8B;EAO3C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iBAAD;GAR8B;EAW3C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,6CAAD,EAAgD,SAAhD,CAAD;GAZ8B;EAe3CgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GAhB8B;EAmB3CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApB8B;EAuB3CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,CADJ;;;IAKPyD,UAAU,EAAE;4BACY,0BAAA9P,KAAK,EAAI;YACzBA,KAAK,CAACyR,GAAN,CAAU,kBAAV,EAA8BjW,MAA9B,GAAuC,CAA3C,EAA8C;iBACrC,QAAP;;;QAGFwE,KAAK,CAACkC,MAAN;eACO,IAAP;OAPQ;qBASK;KAdV;;;;IAoBP+L,KAAK,EAAE,CAAC,oBAAD,EAAuB,yBAAvB;;CA3CJ;;ACAA,IAAM6E,6BAA6B,GAAG;EAC3CtD,MAAM,EAAE,wBADmC;EAG3C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,oBAAD;GAJ8B;EAO3C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iCAAD;GAR8B;EAW3C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,oCAAD,EAAuC,OAAvC,CADS,EAET,CAAC,qCAAD,EAAwC,OAAxC,CAFS;GAZ8B;EAkB3CgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,uBAAD;GAnB8B;EAsB3CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvB8B;EA0B3CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,iBAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;;;IAOPT,UAAU,EAAE,EAPL;;;;IAYP7B,KAAK,EAAE,CACL,aADK,EAEL,YAFK,EAGL,cAHK,EAIL,cAJK,EAKL,oBALK,EAML,kBANK;;CAtCJ;;ACAA,IAAM8E,uBAAuB,GAAG;EACrCvD,MAAM,EAAE,iBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qBAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iBAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD,CADG;IAGd8E,QAAQ,EAAE;GAdyB;EAiBrCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,oBAAD;GAlBwB;EAqBrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBwB;EAyBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,kBAAD,CAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,OAAD;;CAnCJ;;ACAA,IAAM+E,oBAAoB,GAAG;EAClCxD,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD,EAAmC,WAAnC;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,mBAAD,EAAsB,OAAtB,CAAD,CADG;IAGd8E,QAAQ,EAAE;GAdsB;EAiBlCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,eAAD;GAlBqB;EAqBlCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBqB;EAyBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,YAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,iBAAD;;CAnCJ;;ACAA,IAAMgF,uBAAuB,GAAG;EACrCzD,MAAM,EAAE,kBAD6B;EAGrCE,gBAAgB,EAAE,CAAC,iBAAD,CAHmB;EAKrC7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GANwB;EASrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GAVwB;EAarC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAdwB;EAiBrCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,QAAD;GAlBwB;EAqBrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBwB;EAyBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE;KAER,wBAAD,EAA2B,gBAA3B,EAA6C,kBAA7C,CAFS;KAIR,gBAAD,EAAmB,kBAAnB,CAJS;2BAAA;yBAAA,CADJ;;IAaPyD,UAAU,EAAE;MACVC,QAAQ,EAAE,kBAAA/P,KAAK,EAAI;YACXoQ,SAAS,GAAGpQ,KAAK,CAACqD,QAAN,EAAlB;;YACI+M,SAAS,CAAC5U,MAAV,KAAqB,CAArB,IAA0B4U,SAAS,CAACtS,GAAV,CAAc,CAAd,EAAiB2E,OAAjB,KAA6B,KAA3D,EAAkE;iBACzD,MAAP;;;eAGK,IAAP;;KApBG;;;;IA2BPwL,KAAK,EAAE,CACL,QADK,EAEL,qBAFK;;CApDJ;;ACAA,IAAMiF,kBAAkB,GAAG;EAChC1D,MAAM,EAAE,aADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD,EAAmB,IAAnB;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZmB;EAehCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBmB;EAmBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE;KAER,0BAAD,EAA6B,eAA7B,CAFS;mBAAA,EAKT,6BALS,CADJ;;;IAWPyD,UAAU,EAAE;gEACgD,wDAAA9P,KAAK,EAAI;YAC3DoS,KAAK,GAAGpS,KAAK,CAACkE,IAAN,EAAd;;YACIkO,KAAJ,EAAW;iBACF,GAAP;;;eAGK,IAAP;OAPQ;;;6BAYa,2BAAApS,KAAK,EAAI;YAC1BA,KAAK,CAACyR,GAAN,CAAU,GAAV,CAAJ,EAAoB;cAEhBzR,KAAK,CAACrG,IAAN,GAAaE,IAAb,OACAmG,KAAK,CACF9F,IADH,CACQ,GADR,EAEGP,IAFH,GAGGE,IAHH,EAFF,EAME;YACAmG,KAAK,CAACkC,MAAN;;;OArBI;kCA0BkB;KArCvB;;;;IA2CP+L,KAAK,EAAE;;CA9DJ;;ACAA,IAAMkF,kBAAkB,GAAG;EAChC3D,MAAM,EAAE,aADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qBAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,0BAAD,CADG;IAGd8E,QAAQ,EAAE;GAdoB;EAiBhCd,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAlBmB;EAuBhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAxBmB;EA2BhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CArCJ;;ACAA,IAAMmF,sBAAsB,GAAG;EACpC5D,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,CAAC,oBAAD,EAAuB,OAAvB,CADS,EAET,cAFS,EAGT,0BAHS;GAJuB;EAWpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,SAA1B,CAAD,EAAuC,eAAvC;GAZuB;EAepC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,gCAAD,EAAmC,OAAnC,CAAD,CADG;IAGd8E,QAAQ,EAAE;GAlBwB;EAqBpCd,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAtBuB;EA2BpCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA5BuB;EA+BpCtP,OAAO,EAAE;IACPwT,cAAc,EAAE,KADT;IAGPlE,SAAS,EAAE,CACT,yBADS,EAET,6DAFS,EAGT,CAAC,aAAD,EAAgB,cAAhB,CAHS,CAHJ;;;IAWPyD,UAAU,EAAE;qBACK,mBAAC9P,KAAD,EAAQN,CAAR,EAAc;YACrB2T,OAAO,GAAG3T,CAAC,CAAC,0BAAD,CAAD,CAA8BQ,IAA9B,CAAmC,OAAnC,CAAhB;QACAF,KAAK,CAACkE,IAAN,mEAC+CmP,OAD/C;OAHQ;iCAMiB,8BAACrT,KAAD,EAAQN,CAAR,EAAc;YACjC2T,OAAO,GAAG3T,CAAC,CAAC,0BAAD,CAAD,CAA8BQ,IAA9B,CAAmC,OAAnC,CAAhB;YACMoT,WAAW,GAAG5T,CAAC,CAAC,8BAAD,CAAD,CAAkCQ,IAAlC,CAAuC,OAAvC,CAApB;QACAF,KAAK,CAACkE,IAAN,iEAC6CmP,OAD7C,gFAEaC,WAFb;;KApBG;;;;IA6BPrF,KAAK,EAAE;;CA5DJ;;ACAA,IAAMsF,0BAA0B,GAAG;EACxC/D,MAAM,EAAE,qBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,oBAAP;GAJ2B;EAOxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kCAAD,EAAqC,UAArC;GAR2B;EAWxC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZ2B;EAexCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,gCAAD,EAAmC,sBAAnC;GAhB2B;EAmBxCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApB2B;EAuBxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,EAAiB,wBAAjB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,iBAAD,EAAoB,cAApB;;CAjCJ;;ACAA,IAAMuF,uBAAuB,GAAG;EACrChE,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZwB;EAerCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,yBAAD,EAA4B,0BAA5B;GAhBwB;EAmBrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBwB;EAuBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,qBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAjCJ;;ACAA,IAAMwF,wBAAwB,GAAG;EACtCjE,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE;oBAAA;sBAAA;2BAAA,EAST,wBATS;GAJyB;EAiBtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,6BAAD,EAAgC,OAAhC,CADS,EAET,uBAFS;YAAA;aAAA,EAST,oBATS;GAlByB;EA+BtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,mBAAD,EAAsB,UAAtB,CADS,EAET,CAAC,gBAAD,EAAmB,UAAnB,CAFS,EAGT,CAAC,mBAAD,EAAsB,OAAtB,CAHS,EAIT,CAAC,+BAAD,EAAkC,OAAlC,CAJS,EAKT,CAAC,+BAAD,EAAkC,SAAlC,CALS;GAhCyB;EAyCtCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;GA1CyB;EA6CtCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS,EAET,CAAC,uBAAD,EAA0B,SAA1B,CAFS;GA9CyB;EAoDtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,wBADS,EAET,eAFS;KAKR,oBAAD,CALS;gBAAA,CADJ;;;IAcPyD,UAAU,EAAE,EAdL;;;;IAmBP7B,KAAK,EAAE,CAAC,oBAAD,EAAuB,UAAvB;;CAvEJ;;ACAA,IAAMyF,qBAAqB,GAAG;EACnClE,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,qBAAP;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,oBAAD,EAAuB,0BAAvB;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,MAAD,EAAS,UAAT,CAAD;GAZsB;EAenCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBsB;EAmBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,EAAY,kBAAZ,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CA7BJ;;ACAA,IAAM0F,kBAAkB,GAAG;EAChCnE,MAAM,EAAE,aADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,aAAP;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,oCAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,2BAAD,EAA8B,UAA9B,CADS,EAET,CAAC,mBAAD,EAAsB,OAAtB,CAFS;GAZmB;EAkBhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS,EAET,CAAC,gCAAD,EAAmC,OAAnC,CAFS;GAnBmB;EAyBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,YAAD,CADJ;;;IAKPyD,UAAU,EAAE;2BACW,QADX;2CAE2B;KAPhC;;;;IAaP7B,KAAK,EAAE,CAAC,qBAAD;;CAtCJ;;ACAA,IAAM2F,qBAAqB,GAAG;EACnCpE,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZsB;EAenCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,0BAAD;GAhBsB;EAmBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBsB;EAuBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,sBAAD,EAAyB,kBAAzB,CADS,EAET,kBAFS,CADJ;;;IAQPyD,UAAU,EAAE,EARL;;;;IAaP7B,KAAK,EAAE;;CApCJ;;ACAA,IAAM4F,cAAc,GAAG;EAC5BrE,MAAM,EAAE,QADoB;EAG5B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,mBAAD;GAJe;EAO5B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARe;EAW5B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,gBAAD,EAAmB,UAAnB,CAFS;GAZe;EAkB5ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS,EAET,CAAC,2BAAD,EAA8B,SAA9B,CAFS,EAGT,CAAC,4BAAD,EAA+B,SAA/B,CAHS;GAnBe;EA0B5BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CApCJ;;ACAA,IAAM6F,wBAAwB,GAAG;EACtCtE,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,6CAAD;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE;kBAAA,CADG;IAMd8E,QAAQ,EAAE,iBANI;IAOd4C,MAAM,EAAE;GAlB4B;EAqBtC1D,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,iBAAD;GAtByB;EAyBtCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,8BAAD,EAAiC,MAAjC,CAAD;GA1ByB;EA6BtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,iBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAvCJ;;ACAA,IAAM+F,sBAAsB,GAAG;EACpCxE,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,sCAAD,EAAyC,qBAAzC;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,gCAAD,EAAmC,OAAnC,CAAD,EAA8C,SAA9C;GARuB;EAWpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,wCAAD,EAA2C,OAA3C,CAAD;GAZuB;EAepCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBuB;EAmBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,wBAAD,EAA2B,eAA3B,CADJ;;;IAKPyD,UAAU,EAAE;2BACW;KANhB;;;;IAYP7B,KAAK,EAAE,CACL,6CADK,EAEL,yBAFK;;CA/BJ;;ACAA,IAAMgG,oBAAoB,GAAG;EAClCzE,MAAM,EAAE,cAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,WAAD,EAAc,UAAd;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD,EAA2C,oBAA3C;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZqB;EAelCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBqB;EAmBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,EAAa,mCAAb,CADJ;;;IAKPyD,UAAU,EAAE;uBACO;KANZ;;;;IAYP7B,KAAK,EAAE;;CA/BJ;;ACAA,IAAMiG,6BAA6B,GAAG;EAC3C1E,MAAM,EAAE,wBADmC;EAG3C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJ8B;EAO3C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,uCAAD;GAR8B;EAW3C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,MAAD;GAZ8B;EAe3CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhB8B;EAmB3CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CA7BJ;;ACAA,IAAMkG,kBAAkB,GAAG;EAChC3E,MAAM,EAAE,aADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZmB;EAehCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,QAAD;GAhBmB;EAmBhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBmB;EAuBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,sBAAD,EAAyB,kBAAzB,CADS,EAET,kBAFS,CADJ;;;IAQPyD,UAAU,EAAE;yCACyB,qCAAA9P,KAAK,EAAI;YACpCoU,OAAO,GAAGpU,KAAK,CAACkE,IAAN,EAAhB;QACAlE,KAAK,CACF0D,OADH,CACW,iBADX,EAEGxJ,IAFH,CAEQ,kBAFR,EAGG8I,WAHH,CAGeoR,OAHf;OAHQ;+BASe;KAjBpB;;;;IAuBPnG,KAAK,EAAE;;CA9CJ;;ACAA,IAAMoG,kCAAkC,GAAG;EAChD7E,MAAM,EAAE,6BADwC;EAGhD3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,eAAP;GAJmC;EAOhD2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,wCAAD;GARmC;EAWhD4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD,CADG;IAEd0H,MAAM,EAAE,6BAFM;IAGd5C,QAAQ,EAAE;GAdoC;EAiBhDd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,gBAAD;GAlBmC;EAqBhDyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBmC;EAyBhDtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,iBAAD,EAAoB,iBAApB,CAAD,EAAyC,UAAzC,CADJ;;;IAKPyD,UAAU,EAAE;yBACS,uBAAC9P,KAAD,EAAQN,CAAR,EAAc;YACzB4U,OAAO,GAAGtU,KAAK,CAClB9F,IADa,CACR,wBADQ,EAEbA,IAFa,CAER,cAFQ,EAGb6O,KAHa,GAIbkJ,IAJa,CAIR,cAJQ,CAAhB;;YAKIqC,OAAJ,EAAa;UACXtU,KAAK,CAACwQ,OAAN,CAAc9Q,CAAC,+CAAqC4U,OAArC,UAAf;;;KAbC;;;;IAqBPrG,KAAK,EAAE,CAAC,+BAAD;;CA9CJ;;ACAA,IAAMsG,iCAAiC,GAAG;EAC/C/E,MAAM,EAAE,4BADuC;EAG/C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,eAAP;GAJkC;EAO/C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,wCAAD;GARkC;EAW/C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZkC;EAe/CgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,0BAAD,EAA6B,gBAA7B;GAhBkC;EAmB/CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBkC;EAuB/CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,0BADS,EAET,CAAC,iBAAD,EAAoB,iBAApB,CAFS,EAGT,UAHS,CADJ;;;IASPyD,UAAU,EAAE;yBACS,uBAAC9P,KAAD,EAAQN,CAAR,EAAc;YACzB8U,YAAY,GAAGxU,KAAK,CAACqD,QAAN,GAAiB0F,KAAjB,EAArB;;YACIyL,YAAY,CAACrL,QAAb,CAAsB,YAAtB,CAAJ,EAAyC;cACjCsL,kBAAkB,GAAGD,YAAY,CACpCta,IADwB,CACnB,2BADmB,EAExBmJ,QAFwB,GAGxB0F,KAHwB,EAA3B;cAIM2L,QAAQ,GAAGD,kBAAkB,CAACxC,IAAnB,CAAwB,sBAAxB,CAAjB;cACM0C,QAAQ,GAAGF,kBAAkB,CAACxC,IAAnB,CAAwB,sBAAxB,CAAjB;;cACI0C,QAAQ,IAAID,QAAhB,EAA0B;YACxB1U,KAAK,CAACwQ,OAAN,CACE9Q,CAAC,sEACagV,QADb,8CAEaC,QAFb,gCADH;;SARJ,MAeO;cACCL,OAAO,GAAGtU,KAAK,CAClB9F,IADa,CACR,wBADQ,EAEbA,IAFa,CAER,cAFQ,EAGb6O,KAHa,GAIbkJ,IAJa,CAIR,cAJQ,CAAhB;;cAKIqC,OAAJ,EAAa;YACXtU,KAAK,CAACwQ,OAAN,CAAc9Q,CAAC,+CAAqC4U,OAArC,UAAf;;;;KAlCD;;;;IA2CPrG,KAAK,EAAE,CAAC,+BAAD;;CAlEJ;;ACAA,IAAM2G,sBAAsB,GAAG;EACpCpF,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,aAAD,EAAgB,YAAhB;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,0CADS,EAET,CAAC,qBAAD,EAAwB,OAAxB,CAFS;GARuB;EAcpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,gCAAD,EAAmC,OAAnC,CAFS;GAfuB;EAqBpCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBuB;EAyBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,oBAAD,EAAuB,cAAvB,CADJ;;;IAKPyD,UAAU,EAAE;oBACI,mBAAA9P,KAAK,EAAI;YACf6U,OAAO,GAAG7U,KAAK,CAAC9F,IAAN,CAAW,QAAX,CAAhB;QACA8F,KAAK,CAACgD,WAAN,CAAkB6R,OAAlB;;KARG;;;;IAeP5G,KAAK,EAAE,CAAC,YAAD,EAAe,YAAf;;CAxCJ;;ACAA,IAAM6G,mBAAmB,GAAG;EACjCtF,MAAM,EAAE,aADyB;EAGjCE,gBAAgB,EAAE,CAAC,YAAD,CAHe;EAKjC7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GANoB;EASjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,SAAD;GAVoB;EAajC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAdoB;EAiBjCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD;GAlBoB;EAqBjCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBoB;EAyBjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,yBAAD,EAA4B,gBAA5B,CADS,EAET,gBAFS,CADJ;;;IAQPyD,UAAU,EAAE;iCACiB,QADjB;0BAEU;KAVf;;;;IAgBP7B,KAAK,EAAE,CAAC,gBAAD;;CAzCJ;;ACAA,IAAM8G,+BAA+B,GAAG;EAC7CvF,MAAM,EAAE,yBADqC;EAG7C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD;GAJgC;EAO7C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,oBAAD,EAAuB,6BAAvB;GARgC;EAW7C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZgC;EAe7CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBgC;EAmB7CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CACL,QADK,EAEL,kBAFK,EAGL,gBAHK,EAIL,kBAJK,EAKL,aALK,EAML,CAAC,UAAD,CANK;;CA7BJ;;ACAA,IAAM+G,wBAAwB,GAAG;EACtCxF,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,mBAAD,EAAsB,mBAAtB;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,yBAAD,EAA4B,cAA5B;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,gCAAD,EAAmC,OAAnC,CAAD,CADG;IAEd8E,QAAQ,EAAE;GAb0B;EAgBtCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,kBAAD,EAAqB,kBAArB;GAjByB;EAoBtCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GArByB;EAwBtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAlCJ;;ACAA,IAAMgH,oBAAoB,GAAG;EAClCzF,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,kBAAP;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,cAAD,EAAiB,SAAjB;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,gCAAD,EAAmC,OAAnC,CADS,EAET,CAAC,6BAAD,EAAgC,OAAhC,CAFS;GAZqB;EAkBlCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD;GAnBqB;EAsBlCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvBqB;EA0BlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,wBAAD,EAA2B,iBAA3B,CADJ;;;IAKPyD,UAAU,EAAE;yBACS,sBAAC9P,KAAD,EAAQN,CAAR,EAAc;mDAI3BuV,oBAAoB,CAACnE,cAArB,CAAoCzE,SAApC,CAA8C,CAA9C,CAJ2B;YAE7BE,QAF6B;YAG7BrM,IAH6B;;YAKzB0N,GAAG,GAAGlO,CAAC,CAAC6M,QAAD,CAAD,CAAYrM,IAAZ,CAAiBA,IAAjB,CAAZ;;YACI0N,GAAJ,EAAS;UACP5N,KAAK,CAACwQ,OAAN,sBAA2B5C,GAA3B;;;KAbC;;;;IAqBPK,KAAK,EAAE;;CA/CJ;;ACAA,IAAMiH,kCAAkC,GAAG;EAChD1F,MAAM,EAAE,6BADwC;EAGhD3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAJmC;EAOhD2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,8BAAD,EAAiC,OAAjC,CAAD;GARmC;EAWhD4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,4BAAD,EAA+B,OAA/B,CAAD,CADG;IAEd8E,QAAQ,EAAE;GAboC;EAgBhDd,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAjBmC;EAsBhDyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS;GAvBmC;EA4BhDtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAtCJ;;ACAA,IAAMkH,0BAA0B,GAAG;EACxC3F,MAAM,EAAE,qBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS,EAET,UAFS,EAGT,cAHS,EAIT,QAJS;GAJ2B;EAYxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,+BADS,EAET,oCAFS;GAb2B;EAmBxC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,sBAFS,CADG;IAKd8E,QAAQ,EAAE;GAxB4B;EA2BxCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA5B2B;EA+BxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,EAAiB,2BAAjB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,OAAD;;CAzCJ;;ACAA,IAAMmH,qBAAqB,GAAG;EACnC5F,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qCAAD,EAAwC,oBAAxC;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,gCAAD,EAAmC,UAAnC,CADL;IAEN4B,KAAK,EAAE,CAAC,iBAAD,EAAoB,UAApB;GAT0B;EAYnCgC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,cAAD,EAAiB,YAAjB,CADG;IAEd0H,MAAM,EAAE,qBAFM;IAGd5C,QAAQ,EAAE;GAfuB;EAkBnCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnBsB;EAsBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,EAAY,eAAZ,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAhCJ;;ACAA,IAAMoH,0BAA0B,GAAG;EACxC7F,MAAM,EAAE,qBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,aAAD,EAAgB,gBAAhB;GAJ2B;EAOxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,sBADS,EAET,CAAC,6BAAD,EAAgC,OAAhC,CAFS;GAR2B;EAcxC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,MAAD,EAAS,CAAC,4BAAD,EAA+B,OAA/B,CAAT;GAf2B;EAkBxCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnB2B;EAsBxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,EAAY,iBAAZ,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,YAAD,EAAe,aAAf,EAA8B,aAA9B,EAA6C,oBAA7C;;CAhCJ;;ACAA,IAAMqH,mBAAmB,GAAG;EACjC9F,MAAM,EAAE,cADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,UAAD,EAAa,2BAAb;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARoB;EAWjC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZoB;EAejCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBoB;EAmBjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,0BADS,EAET,WAFS,EAGT,6BAHS,CADJ;;;IASPyD,UAAU,EAAE,EATL;;;;IAcP7B,KAAK,EAAE;;CAjCJ;;ACAA,IAAMsH,uBAAuB,GAAG;EACrC/F,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,eAAD,EAAkB,YAAlB;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZwB;EAerCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBwB;EAmBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,mBAAD,EAAsB,YAAtB,EAAoC,YAApC;;CA7BJ;;ACAA,IAAMuH,oBAAoB,GAAG;EAClChG,MAAM,EAAE,cAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,SAAD,EAAY,QAAZ;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZqB;EAelCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,QAAD;GAhBqB;EAmBlCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBqB;EAuBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAjCJ;;ACAA,IAAMwH,kBAAkB,GAAG;EAChCjG,MAAM,EAAE,YADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,oBAAD,EAAuB,CAAC,uBAAD,EAA0B,OAA1B,CAAvB;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,8BAAD,EAAiC,OAAjC,CAAD,EAA4C,iBAA5C;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,8BADS,EAET,CAAC,qCAAD,EAAwC,OAAxC,CAFS;GAZmB;EAkBhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnBmB;EAsBhCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,oBAAD;GAvBmB;EA0BhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mCAAD,EAAsC,yBAAtC,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CApCJ;;ACAA,IAAMyH,yBAAyB,GAAG;EACvClG,MAAM,EAAE,oBAD+B;EAGvC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,WAAD;GAJ0B;EAOvC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,UAAD,EAAa,kCAAb;GAR0B;EAWvC4D,cAAc,EAAE;IACdkB,QAAQ,EAAE,kBADI;IAGd9E,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAd0B;EAiBvCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlB0B;EAqBvCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,qBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,iBAAD;;CA/BJ;;ACAA,IAAM0H,2BAA2B,GAAG;EACzCnG,MAAM,EAAE,sBADiC;EAGzC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iCAAD,EAAoC,kBAApC;GAJ4B;EAOzC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kBAAD,EAAqB,kCAArB;GAR4B;EAWzC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,6BAFS,CADG;IAMd8E,QAAQ,EAAE;GAjB6B;EAoBzCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,gCAAD,EAAmC,sBAAnC;GArB4B;EAwBzCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAzB4B;EA4BzCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,oBADS,EAET,CAAC,iBAAD,EAAoB,kBAApB,CAFS,EAGT,kBAHS,CADJ;;;IASPyD,UAAU,EAAE,EATL;;;;IAcP7B,KAAK,EAAE,CAAC,0BAAD,EAA6B,iBAA7B;;CA1CJ;;ACAA,IAAM2H,+BAA+B,GAAG;EAC7CpG,MAAM,EAAE,eADqC;EAG7C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,OAAD,EAAU,mBAAV;GAJgC;EAO7C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,sBAAD,EAAyB,SAAzB;GARgC;EAW7C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,sBAAD,EAAyB,gBAAzB,CAAD;GAZgC;EAe7CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBgC;EAmB7CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,EAAkB,sBAAlB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CA7BJ;;ACAA,IAAM4H,kBAAkB,GAAG;EAChCrG,MAAM,EAAE,YADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qBAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,wBAAD,EAA2B,OAA3B,CAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZmB;EAehCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBmB;EAmBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,gBAAD,CADJ;;;IAKPyD,UAAU,EAAE;mBACG,QADH;oCAEoB;KAPzB;;;;IAaP7B,KAAK,EAAE;;CAhCJ;;ACAA,IAAM6H,sBAAsB,GAAG;EACpCtG,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,0BAAD,EAA6B,mBAA7B;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,+BAAD,EAAkC,uBAAlC;GARuB;EAWpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,gCAAD,EAAmC,OAAnC,CAFS;GAZuB;EAkBpCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnBuB;EAsBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,uCAAD,CADS,EAET,CAAC,8DAAD,CAFS,CADJ;;;IAQPyD,UAAU,EAAE;iCACiB,QADjB;iDAEiC;KAVtC;;;;IAgBP7B,KAAK,EAAE;;CAtCJ;;ACAA,IAAM8H,0BAA0B,GAAG;EACxCvG,MAAM,EAAE,qBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,UAAD;GAJ2B;EAOxC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,kBAAD,CADG;IAGd8E,QAAQ,EAAE;GAV4B;EAaxCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAd2B;EAiBxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,wBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CA3BJ;;ACAA,IAAM+H,yBAAyB,GAAG;EACvCxG,MAAM,EAAE,oBAD+B;EAGvC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,UAAD;GAJ0B;EAOvC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,cAAD;GAR0B;EAWvC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,4BAAD,EAA+B,OAA/B,CAAD,CADG;IAGd8E,QAAQ,EAAE;GAd2B;EAiBvCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlB0B;EAqBvCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,oBAAD,EAAuB,kBAAvB,CADS,EAET,kBAFS,EAGT,OAHS,CADJ;;;IASPyD,UAAU,EAAE;8BACc,4BAAA9P,KAAK,EAAI;YACzBoU,OAAO,GAAGpU,KAAK,CAACkE,IAAN,EAAhB;QACAlE,KAAK,CAAC0D,OAAN,CAAc,UAAd,EAA0BV,WAA1B,CAAsCoR,OAAtC;OAHQ;wBAMQ,QANR;yCAQyB,YARzB;uBAUO;KAnBZ;;;;IAyBPnG,KAAK,EAAE,CAAC,cAAD;;CA9CJ;;ACAA,IAAMgI,wBAAwB,GAAG;EACtCzG,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,UAAP;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,yBAAD,EAA4B,aAA5B;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,MAAD,EAAS,UAAT,CAAD,CADG;IAGd8E,QAAQ,EAAE;GAd0B;EAiBtCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD;GAlByB;EAqBtCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtByB;EAyBtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,EAAY,UAAZ,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAnCJ;;ACAA,IAAMiI,6BAA6B,GAAG;EAC3C1G,MAAM,EAAE,wBADmC;EAG3C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,eAAP;GAJ8B;EAO3C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAR8B;EAW3C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZ8B;EAe3CgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD;GAhB8B;EAmB3CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApB8B;EAuB3CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,QAAD,EAAW,YAAX;;CAjCJ;;ACAA,IAAMkI,iBAAiB,GAAG;EAC/B3G,MAAM,EAAE,YADuB;EAG/B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,aAAP;GAJkB;EAO/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARkB;EAW/B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,wBAAD,EAA2B,OAA3B,CAAD,CADG;IAGd8E,QAAQ,EAAE;GAdmB;EAiB/Bd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,uBAAD;GAlBkB;EAqB/ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBkB;EAyB/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,iBADS,EAET,CAAC,GAAD,EAAM,mBAAN,EAA2B,kBAA3B,CAFS,CADJ;;;IAQPyD,UAAU,EAAE;MACVC,QAAQ,EAAE,kBAAA/P,KAAK,EAAI;YACXoQ,SAAS,GAAGpQ,KAAK,CAACqD,QAAN,EAAlB;;YACI+M,SAAS,CAAC5U,MAAV,KAAqB,CAArB,IAA0B4U,SAAS,CAACtS,GAAV,CAAc,CAAd,EAAiB2E,OAAjB,KAA6B,KAA3D,EAAkE;iBACzD,QAAP;;;eAGK,IAAP;;KAfG;;;;IAsBPwL,KAAK,EAAE,CACL,CAAC,eAAD,EAAkB,kBAAlB,EAAsC,cAAtC,EAAsD,eAAtD,CADK;;CA/CJ;;ACAA,IAAMmI,uBAAuB,GAAG;EACrC5G,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD,EAAqC,aAArC;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,yCADS,EAET,8BAFS;GARwB;EAcrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,6BAFS,CADG;IAMd8E,QAAQ,EAAE;GApByB;EAuBrCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAxBwB;EA2BrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,YAAD,EAAe,eAAf,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CArCJ;;ACAA,IAAMoI,mBAAmB,GAAG;EACjC7G,MAAM,EAAE,cADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,aAAD,EAAgB,UAAhB;GARoB;EAWjC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,MAAD,CADG;IAGd8E,QAAQ,EAAE;GAdqB;EAiBjCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,aAAD,EAAgB,cAAhB;GAlBoB;EAqBjCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBoB;EAyBjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,oBAAD,EAAuB,oBAAvB,CADS,EAET,oBAFS,CADJ;;;IAQPyD,UAAU,EAAE;sBACM,qBAAA9P,KAAK,EAAI;YACjBqE,IAAI,GAAGrE,KAAK,CAAC9F,IAAN,CAAW,KAAX,CAAb;QACAmK,IAAI,CAACnE,IAAL,CAAU,OAAV,EAAmB,MAAnB;QACAmE,IAAI,CAACnE,IAAL,CAAU,QAAV,EAAoB,MAApB;QACAmE,IAAI,CAACW,QAAL,CAAc,gBAAd;QACAhF,KAAK,CAACkC,MAAN,CAAa,eAAb,EAA8BsO,OAA9B,CAAsCnM,IAAtC;;KAdG;;;;IAqBP4J,KAAK,EAAE;;CA9CJ;;ACAA,IAAMqI,oBAAoB,GAAG;EAClC9G,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gCAAD,EAAmC,mBAAnC;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kBAAD,EAAqB,CAAC,qBAAD,EAAwB,OAAxB,CAArB;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,gBAAD,EAAmB,CAAC,6BAAD,EAAgC,OAAhC,CAAnB;GAZqB;EAelCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBqB;EAmBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,2BAAD,EAA8B,kBAA9B,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,gBAAD;;CA7BJ;;ACAA,IAAMsI,iBAAiB,GAAG;EAC/B/G,MAAM,EAAE,YADuB;EAG/B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,oBAAD,EAAuB,OAAvB,CAAD;GAJkB;EAO/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GARkB;EAW/B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,oCAAD,EAAuC,OAAvC,CAAD,CADG;IAEd8E,QAAQ,EAAE;GAbmB;EAgB/BL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAjBkB;EAoB/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,gBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CA9BJ;;ACAA,IAAMuI,8BAA8B,GAAG;EAC5ChH,MAAM,EAAE,yBADoC;EAG5C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,4BAAD,EAA+B,OAA/B,CAAD;GAJ+B;EAO5C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,oBAAD,EAAuB,OAAvB,CAAD;GAR+B;EAW5C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZ+B;EAe5CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhB+B;EAmB5CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,WAAD,EAAc,YAAd,CADS,EAET,YAFS,EAGT,4BAHS,CADJ;;;IASPyD,UAAU,EAAE,EATL;;;;IAcP7B,KAAK,EAAE;;CAjCJ;;ACAA,IAAMwI,gCAAgC,GAAG;EAC9CjH,MAAM,EAAE,2BADsC;EAG9C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,OAAD,EAAU,gBAAV;GAJiC;EAO9C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARiC;EAW9C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAZiC;EAe9CgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,WAAD;GAhBiC;EAmB9CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBiC;EAuB9CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,+BAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,kBAAD;;CAjCJ;;ACAA,IAAMyI,yBAAyB,GAAG;EACvClH,MAAM,EAAE,oBAD+B;EAGvC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,QAAD,EAAW,CAAC,oBAAD,EAAuB,OAAvB,CAAX;GAJ0B;EAOvC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,SAAD;GAR0B;EAWvC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,2BAAD,EAA8B,OAA9B,CAAD;GAZ0B;EAevCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAhB0B;EAqBvCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtB0B;EAyBvCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,kBAAD,EAAqB,QAArB,EAA+B,OAA/B,CAAD,EAA0C,OAA1C,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,wBAAD,EAA2B,sBAA3B;;CAnCJ;;ACAA,IAAM0I,sBAAsB,GAAG;EACpCnH,MAAM,EAAE,gBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,cAAD,EAAiB,iBAAjB,EAAoC,kBAApC;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,eAAD,EAAkB,qBAAlB;GARuB;EAWpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZuB;EAepCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAhBuB;EAqBpCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,gCAAD,EAAmC,KAAnC,CAAD;GAtBuB;EAyBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,4BAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAnCJ;;ACAA,IAAM2I,wBAAwB,GAAG;EACtCpH,MAAM,EAAE,kBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD,EAAqC,QAArC;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kCAAD,EAAqC,cAArC;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,yCAAD,EAA4C,SAA5C,CADS,EAET,CAAC,qCAAD,EAAwC,OAAxC,CAFS;GAZyB;EAkBtCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnByB;EAsBtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,EAAkB,gBAAlB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAhCJ;;ACAA,IAAM4I,0BAA0B,GAAG;EACxCrH,MAAM,EAAE,oBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,UAAD,EAAa,CAAC,uBAAD,EAA0B,OAA1B,CAAb;GAJ2B;EAOxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,QADS,EAET,2GAFS,EAGT,gBAHS;GAR2B;EAexC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAhB2B;EAmBxCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApB2B;EAuBxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,aAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,UAAD,EAAa,YAAb;;CAjCJ;;ACAA,IAAM6I,wBAAwB,GAAG;EACtCtH,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qCAAD;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,2BAAD;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,4BAAD,EAA+B,OAA/B,CAAD;GAZyB;EAetCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhByB;EAmBtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,EAAkB,iBAAlB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CACL,gBADK,EAEL,yBAFK,EAGL,yBAHK;;CA7BJ;;ACAA,IAAM8I,sBAAsB,GAAG;EACpCvH,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,8BAAD,EAAiC,oBAAjC;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,4CADS,EAET,oBAFS;GARuB;EAcpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,gCAAD,EAAmC,OAAnC,CADS,EAET,CAAC,wDAAD,EAA2D,UAA3D,CAFS,EAGT,4BAHS,CADG;IAOd8E,QAAQ,EAAE;GArBwB;EAwBpCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAzBuB;EA4BpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,2BAAD,EAA8B,kBAA9B,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAtCJ;;ACAA,IAAM+I,mBAAmB,GAAG;EACjCxH,MAAM,EAAE,aADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARoB;EAWjC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,WAAD,CADG;IAGd8E,QAAQ,EAAE;GAdqB;EAiBjCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBoB;EAqBjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,SAAD,EAAY,aAAZ,CAAD,EAA6B,aAA7B,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CA/BJ;;ACAA,IAAMgJ,uBAAuB,GAAG;EACrCzH,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD,EAAmB,IAAnB;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,sBADS,EAET,CAAC,6BAAD,EAAgC,OAAhC,CAFS,EAGT,4BAHS;GARwB;EAerC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,2BADS,EAET,CAAC,gCAAD,EAAmC,UAAnC,CAFS,CADG;IAMd8E,QAAQ,EAAE;GArByB;EAwBrCd,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAzBwB;EA8BrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA/BwB;EAkCrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,wBADS,EAET,CAAC,eAAD,EAAkB,QAAlB,CAFS,EAGT,QAHS,CADJ;;;IASPyD,UAAU,EAAE,EATL;;;;IAcP7B,KAAK,EAAE,CAAC,eAAD;;CAhDJ;;ACAA,IAAMiJ,mCAAmC,GAAG;EACjD1H,MAAM,EAAE,8BADyC;EAGjDE,gBAAgB,EAAE,CAAC,gBAAD,CAH+B;EAKjD7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,kBAAP;GANoC;EASjD2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,mBAAD,EAAsB,wBAAtB;GAVoC;EAajD4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAdoC;EAiBjDgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,kCAAD;GAlBoC;EAqBjDyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBoC;EAyBjDtP,OAAO,EAAE;IACPwT,cAAc,EAAE,KADT;IAGPlE,SAAS,EAAE,CAAC,mBAAD,EAAsB,8BAAtB,CAHJ;;;IAOPyD,UAAU,EAAE,EAPL;;;;IAYP7B,KAAK,EAAE,CAAC,kBAAD,EAAqB,qBAArB;;CArCJ;;ACAA,IAAMkJ,4BAA4B,GAAG;EAC1C3H,MAAM,EAAE,uBADkC;EAG1C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,2BAAD,EAA8B,UAA9B;GAJ6B;EAO1C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD,EAAmC,sBAAnC;GAR6B;EAW1C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,wBAAD,EAA2B,OAA3B,CADS,EAET,CAAC,2BAAD,EAA8B,OAA9B,CAFS;GAZ6B;EAkB1CgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAnB6B;EAwB1CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAzB6B;EA4B1CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,iBAAD,EAAoB,kBAApB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,sBAAD;;CAtCJ;;ACAA,IAAMmJ,gCAAgC,GAAG;EAC9C5H,MAAM,EAAE,4BADsC;EAG9C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qBAAD,EAAwB,aAAxB;GAJiC;EAO9C2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,2BAAD,EAA8B,sBAA9B;GARiC;EAW9C4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD,EAAmD,YAAnD,CADG;IAGd8E,QAAQ,EAAE;GAdkC;EAiB9Cd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,2BAAD,EAA8B,gBAA9B;GAlBiC;EAqB9CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBiC;EAyB9CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,EAAqB,uBAArB,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAnCJ;;ACAA,IAAMoJ,mBAAmB,GAAG;EACjC7H,MAAM,EAAE,aADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,gBADS,EAET,cAFS,EAGT,CAAC,8BAAD,EAAiC,OAAjC,CAHS;GARoB;EAejC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,mBAAD,EAAsB,OAAtB,CAFS;GAhBoB;EAsBjCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAvBoB;EA4BjCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA7BoB;EAgCjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,4BADS,EAET,CAAC,uBAAD,EAA0B,cAA1B,CAFS,CADJ;;;IAQPyD,UAAU,EAAE,EARL;;;;IAaP7B,KAAK,EAAE,CAAC,cAAD,EAAiB,aAAjB,EAAgC,UAAhC,EAA4C,WAA5C;;CA7CJ;;ACAA,IAAMqJ,qBAAqB,GAAG;EACnC9H,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,UAAP;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,OAAD;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,kBAAD,EAAqB,iBAArB,CAAD;GAZsB;EAenCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,UAAD;GAhBsB;EAmBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,wBAAD,EAA2B,KAA3B,CAAD;GApBsB;EAuBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,WAAD,EAAc,UAAd,EAA0B,WAA1B;;CAjCJ;;ACAA,IAAMsJ,qBAAqB,GAAG;EACnC/H,MAAM,EAAE,eAD2B;EAGnCE,gBAAgB,EAAE,CAChB,gBADgB,EAEhB,WAFgB,EAGhB,WAHgB,EAIhB,iBAJgB,EAKhB,WALgB,CAHiB;EAWnC7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD,EAAO,kBAAP;GAZsB;EAenC2D,MAAM,EAAE;;IAEN3D,SAAS,EAAE,CAAC,+CAAD,EAAkD,SAAlD;GAjBsB;EAoBnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,MAFS,EAGT,gBAHS,CADG;IAOd8E,QAAQ,EAAE;GA3BuB;EA8BnCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,IAAD;GA/BsB;EAkCnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnCsB;EAsCnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,EAAkB,aAAlB,CADJ;;;IAKPyD,UAAU,EAAE;wBACQ,QADR;uBAEO,YAFP;wBAGQ,QAHR;uBAIO,YAJP;yBAKS,QALT;wBAMQ;KAXb;;;;IAiBP7B,KAAK,EAAE,CACL,gBADK,EAEL,gBAFK,EAGL,iBAHK,EAIL,cAJK;;CAvDJ;;ACAA,IAAMuJ,mBAAmB,GAAG;EACjChI,MAAM,EAAE,cADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,qBAAD,EAAwB,OAAxB,CADS,EAET,6BAFS;GARoB;EAcjC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,mBAAD,EAAsB,OAAtB,CAAD;GAfoB;EAkBjCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD,EAA2C,WAA3C;GAnBoB;EAsBjCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvBoB;EA0BjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,wBAAD,EAA2B,kBAA3B,CADJ;;;IAKPyD,UAAU,EAAE;sBACM,oBAAA9P,KAAK,EAAI;YACjB4N,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,KAAX,CAAZ;QACAF,KAAK,CAACwF,MAAN,GAAexC,WAAf,8BAAgD4K,GAAhD;OAHQ;kBAKE;KAVP;;;;IAgBPK,KAAK,EAAE,CAAC,QAAD;;CA1CJ;;ACAA,IAAMwJ,oBAAoB,GAAG;EAClCjI,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,MAAD,EAAS,IAAT;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,eAAD;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,WAAD,CADG;IAGd8E,QAAQ,EAAE;GAdsB;EAiBlCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,MAAD;GAlBqB;EAqBlCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBqB;EAyBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,OAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CACL,mBADK,EAEL,YAFK,EAGL,8BAHK,EAIL,cAJK;;CAnCJ;;ACAA,IAAMyJ,yBAAyB,GAAG;EACvClI,MAAM,EAAE,qBAD+B;EAGvC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJ0B;EAOvC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,yBAAD,EAA4B,OAA5B,CAAD;GAR0B;EAWvC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,8BAAD,EAAiC,OAAjC,CAAD,CADG;IAEd0H,MAAM,EAAE,oBAFM;IAGd5C,QAAQ,EAAE;GAd2B;EAiBvCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,oBAAD,EAAuB,wBAAvB;GAlB0B;EAqBvCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtB0B;EAyBvCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,gCADS,EAET,CAAC,uBAAD,EAA0B,qBAA1B,CAFS,CADJ;;;IAQPyD,UAAU,EAAE,EARL;;;;IAaP7B,KAAK,EAAE;;CAtCJ;;ACAA,IAAM0J,uBAAuB,GAAG;EACrCnI,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,wBAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZwB;EAerCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBwB;EAmBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,+DADS,CADJ;IAKPyD,UAAU,EAAE;MACVC,QAAQ,EAAE,kBAAA/P,KAAK,EAAI;YACXoQ,SAAS,GAAGpQ,KAAK,CAACqD,QAAN,EAAlB;;YACI+M,SAAS,CAAC5U,MAAV,KAAqB,CAArB,IAA0B4U,SAAS,CAACtS,GAAV,CAAc,CAAd,EAAiB2E,OAAjB,KAA6B,KAA3D,EAAkE;iBACzD,QAAP;;;eAEK,IAAP;;;;CA9BD;;ACAA,IAAMmV,0BAA0B,GAAG;EACxCpI,MAAM,EAAE,qBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJ2B;EAOxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GAR2B;EAWxC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZ2B;EAexCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,aAAD;GAhB2B;EAmBxCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApB2B;EAuBxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,gBAAD;;CAxBR;;ACAA,IAAMwL,yBAAyB,GAAG;EACvCrI,MAAM,EAAE,mBAD+B;EAGvC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD,EAAqC,gBAArC;GAJ0B;EAOvC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kBAAD;GAR0B;EAWvC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,iBAAD,EAAoB,UAApB,CAFS,EAGT,CAAC,gCAAD,EAAmC,SAAnC,CAHS;GAZ0B;EAmBvCgE,GAAG,EAAE;IACHhE,SAAS,EAAE;;GApB0B;EAyBvCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS,EAET,CAAC,2BAAD,EAA8B,SAA9B,CAFS,EAGT,CAAC,wBAAD,EAA2B,SAA3B,CAHS,EAIT,CAAC,4BAAD,EAA+B,SAA/B,CAJS,EAKT,CAAC,sBAAD,EAAyB,KAAzB,CALS;GA1B0B;EAmCvCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CACE,yBADF,EAEE,mGAFF,CADS,CADJ;;;IAUPyD,UAAU,EAAE;MACVgI,UAAU,EAAE;KAXP;;;;IAiBP7J,KAAK,EAAE,CAAC,gBAAD;;CApDJ;;ACAA,IAAM8J,qBAAqB,GAAG;EACnCvI,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,sBADS,EAET,gDAFS;GARsB;EAcnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAfsB;EAkBnCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAnBsB;EAsBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvBsB;EA0BnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,EAAqB,kBAArB,CADJ;;;IAKPyD,UAAU,EAAE;MACVnL,GAAG,EAAE,aAAA3E,KAAK,EAAI;YACN4N,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,eAAX,CAAZ;;YACI0N,GAAG,KAAK,EAAZ,EAAgB;UACd5N,KAAK,CAACE,IAAN,CAAW,KAAX,EAAkB0N,GAAlB;;;KATC;;;;IAiBPK,KAAK,EAAE;;CA3CJ;;ACAA,IAAM+J,0BAA0B,GAAG;EACxCxI,MAAM,EAAE,oBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,mBAAD;GAJ2B;EAOxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,0BAAD;GAR2B;EAWxC4D,cAAc,EAAE;;IAEd5D,SAAS,EAAE,CAAC,sDAAD;GAb2B;EAgBxCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CAAC,iBAAD;;CA1BJ;;ACAA,IAAMgK,kBAAkB,GAAG;EAChCzI,MAAM,EAAE,YADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE;;GARmB;EAahC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,yBAAD,EAA4B,UAA5B,CADS,EAET,CAAC,6CAAD,EAAgD,UAAhD,CAFS;GAdmB;EAoBhCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CACT,CAAC,0BAAD,EAA6B,OAA7B,CADS,EAET,wBAFS;GArBmB;EA2BhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA5BmB;EA+BhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,iBAAD,CAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAzCJ;;ACAA,IAAMiK,qBAAqB,GAAG;EACnC1I,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CACT,qCADS,EAET,qCAFS;GAJsB;EAUnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,mDAAD;GAXsB;EAcnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,kEADS,EAET,+DAFS;GAfsB;EAqBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBsB;EAyBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,CAAC,oCAAD,CADS;KAGP,sFADF;iEAAA,CAFS;KAMR,6DAAD,CANS;KAOR,oCAAD,CAPS;sCAAA,CADJ;;;IAcPyD,UAAU,EAAE;yBACS,oBAAA9P,KAAK,EAAI;;YAEpBqE,IAAI,GAAGrE,KAAK,CAAC9F,IAAN,CAAW,KAAX,CAAb;YACMie,KAAK,GAAGnY,KAAK,CAACoY,GAAN,CAAU,kBAAV,CAAd;;YACI/T,IAAI,CAAC7I,MAAL,KAAgB,CAAhB,IAAqB2c,KAAzB,EAAgC;UAC9B9T,IAAI,CAACnE,IAAL,CAAU,KAAV,EAAiBiY,KAAK,CAACpd,KAAN,CAAY,WAAZ,EAAyB,CAAzB,EAA4BnB,OAA5B,CAAoC,QAApC,EAA8C,EAA9C,CAAjB;iBACOyK,IAAP;;;eAEKrE,KAAP;;KAvBG;;;;IA8BPiO,KAAK,EAAE,CACL,OADK,EAEL,6BAFK,EAGL,uDAHK;;CAvDJ;;ACAA,IAAMoK,gBAAgB,GAAG;EAC9B7I,MAAM,EAAE,UADsB;EAG9B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,kBAAD;GAJiB;EAO9B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,sBAAD;GARiB;EAW9B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZiB;EAe9BgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAhBiB;EAmB9ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBiB;EAuB9BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CACL,oBADK,EAEL,8BAFK,EAGL,SAHK,EAIL,oBAJK;;CA9BJ;;ACAA,IAAMqK,qBAAqB,GAAG;EACnC9I,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,6BAAD;GAJsB;EAOnC2D,MAAM,EAAE,IAP2B;EASnCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,QAAD,CADG;IAEd0H,MAAM,EAAE,mBAFM;IAGd5C,QAAQ,EAAE;GAZuB;EAenCd,GAAG,EAAE,IAf8B;EAiBnCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBsB;EAqBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,2CAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE;;CA5BJ;;ACAA,IAAMsK,iBAAiB,GAAG;EAC/B/I,MAAM,EAAE,WADuB;EAG/B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD;GAJkB;EAO/B2D,MAAM,EAAE,IAPuB;EAS/BC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,iBAAD,EAAoB,UAApB,CAAD;GAVkB;EAa/BgE,GAAG,EAAE,IAb0B;EAe/BS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBkB;EAmB/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE;;CA1BJ;;ACAA,IAAMuK,oBAAoB,GAAG;EAClChJ,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,SAAD,EAAY,kBAAZ;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,sBAAD,EAAyB,OAAzB,CAAD;GAZqB;EAelCgE,GAAG,EAAE,IAf6B;EAiBlCW,OAAO,EAAE;IACP3E,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAlBqB;EAqBlCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBqB;EAyBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,MAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,WAAD,EAAc,qBAAd,EAAqC,MAArC,EAA6C,cAA7C;;CAhCJ;;ACAA,IAAMwK,qBAAqB,GAAG;EACnCjJ,MAAM,EAAE,iBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJsB;EAOnC2D,MAAM,EAAE,IAP2B;EASnCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,SAAD,CADG;IAEd0H,MAAM,EAAE,YAFM;IAGd5C,QAAQ,EAAE;GAZuB;EAenCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAhBsB;EAmBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBsB;EAuBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,aAAD,EAAgB,aAAhB,EAA+B,iBAA/B;;CA9BJ;;ACAA,IAAMyK,sBAAsB,GAAG;EACpClJ,MAAM,EAAE,kBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,OAAD;GAJuB;EAOpC2D,MAAM,EAAE,IAP4B;EASpCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,gBAAD,CADG;IAEd0H,MAAM,EAAE,YAFM;IAGd5C,QAAQ,EAAE;GAZwB;EAepCd,GAAG,EAAE,IAf+B;EAiBpCS,cAAc,EAAE,IAjBoB;EAmBpC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE;MACV6I,KAAK,EAAE,eAAA3Y,KAAK,EAAI;QACdA,KAAK,CAACE,IAAN,CAAW,OAAX,EAAoB,MAApB;;KAPG;IAWP+N,KAAK,EAAE;;CA9BJ;;ACAA,IAAM2K,4BAA4B,GAAG;EAC1CpJ,MAAM,EAAE,wBADkC;EAG1C3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,4BAAD;GAJ6B;EAO1C2D,MAAM,EAAE,IAPkC;EAS1CC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,oCAAD,EAAuC,OAAvC,CAAD;GAV6B;EAa1CgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,mCAAD;GAd6B;EAiB1CyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlB6B;EAqB1CtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,0CAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,iBAAD;;CA5BJ;;ACAA,IAAM4K,mBAAmB,GAAG;EACjCrJ,MAAM,EAAE,cADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,OAAD;GAJoB;EAOjC2D,MAAM,EAAE,IAPyB;EASjCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,4BAAD,CADG;IAEd0H,MAAM,EAAE,YAFM;IAGd5C,QAAQ,EAAE;GAZqB;EAejCd,GAAG,EAAE,IAf4B;EAiBjCS,cAAc,EAAE,IAjBiB;EAmBjC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,YAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE;;CA1BJ;;ACAA,IAAM6K,kBAAkB,GAAG;EAChCtJ,MAAM,EAAE,YADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,MAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CACE,0BADF,EAEE,OAFF,EAGE,UAAA0M,GAAG,EAAI;UACCC,IAAI,GAAGrL,IAAI,CAAC7R,KAAL,CAAWid,GAAX,CAAb;aACOC,IAAI,CAACC,IAAL,CAAUC,YAAjB;KALJ,CADS;GAZmB;EAwBhC7I,GAAG,EAAE;IACHhE,SAAS,EAAE;;GAzBmB;EA8BhCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CACE,0BADF,EAEE,OAFF,EAGE,UAAA0M,GAAG,EAAI;UACCC,IAAI,GAAGrL,IAAI,CAAC7R,KAAL,CAAWid,GAAX,CAAb;aACOC,IAAI,CAACC,IAAL,CAAUE,KAAV,CAAgBC,aAAvB;KALJ,CADS;GA/BmB;EA2ChCrc,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CArDJ;;ACAA,IAAMoL,mBAAmB,GAAG;EACjC7J,MAAM,EAAE,cADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,aAAD;GAJoB;EAOjC2D,MAAM,EAAE,IAPyB;EASjCC,cAAc,EAAE,IATiB;EAWjCI,GAAG,EAAE,IAX4B;EAajCW,OAAO,EAAE;IACP3E,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAdoB;EAiBjCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBoB;EAqBjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,YAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE,CAAC,UAAD,EAAa,OAAb;;CA1BJ;;ACAA,IAAMqL,mBAAmB,GAAG;EACjC9J,MAAM,EAAE,aADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,OAAD;GAJoB;EAOjC2D,MAAM,EAAE,IAPyB;EASjCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,OAAD,CADG;IAEd0H,MAAM,EAAE,aAFM;IAGd5C,QAAQ,EAAE;GAZqB;EAejCd,GAAG,EAAE,IAf4B;EAiBjCS,cAAc,EAAE,IAjBiB;EAmBjC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE;;CA1BJ;;ACAA,IAAMsL,oBAAoB,GAAG;EAClC/J,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,YAAD;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,6BAAD;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,yBAAD,CADG;IAEd0H,MAAM,EAAE,aAFM;IAGd5C,QAAQ,EAAE;GAdsB;EAiBlCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAlBqB;EAqBlCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBqB;EAyBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE;;CAhCJ;;ACAA,IAAMuL,sBAAsB,GAAG;EACpChK,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,YAAD;GAJuB;EAOpC2D,MAAM,EAAE,IAP4B;EASpCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,uCAAD,CADG;IAEd8E,QAAQ,EAAE;GAXwB;EAcpCd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAfuB;EAkBpCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAnBuB;EAsBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,OAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE,CAAC,kBAAD;;CA3BJ;;ACAA,IAAMwL,uBAAuB,GAAG;EACrCjK,MAAM,EAAE,mBAD6B;EAGrCE,gBAAgB,EAAE,CAChB,oBADgB,EAEhB,0BAFgB,EAGhB,oBAHgB,CAHmB;EASrC7F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,cAAD;GAVwB;EAarC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,SAAD;GAdwB;EAiBrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,oCAAD,EAAuC,OAAvC,CAAD;GAlBwB;EAqBrCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,iBAAD;GAtBwB;EAyBrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA1BwB;EA6BrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,cAAD;;CApCJ;;ACAA,IAAMyL,wBAAwB,GAAG;EACtClK,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iCAAD,EAAoC,oBAApC;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,aAAD,CADG;IAEd0H,MAAM,EAAE,aAFM;IAGd5C,QAAQ,EAAE;GAd0B;EAiBtCd,GAAG,EAAE,IAjBiC;EAmBtCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApByB;EAuBtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,cAAD,EAAiB,SAAjB,EAA4B,eAA5B;;CA9BJ;;ACAA,IAAM0L,0BAA0B,GAAG;EACxCnK,MAAM,EAAE,qBADgC;EAGxC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJ2B;EAOxC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GAR2B;EAWxC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,kCAAD,EAAqC,OAArC,CAAD;GAZ2B;EAexCgE,GAAG,EAAE,IAfmC;EAiBxCS,cAAc,EAAE,IAjBwB;EAmBxC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE;;CA1BJ;;ACAA,IAAM2L,qBAAqB,GAAG;EACnCpK,MAAM,EAAE,eAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,kBAAD,EAAqB,iBAArB;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,oBAAD,EAAuB,aAAvB;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,0CADS,EAET,0EAFS,CADG;IAKd8E,QAAQ,EAAE;GAhBuB;EAmBnCd,GAAG,EAAE,IAnB8B;EAqBnCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBsB;EAyBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,yBADS,EAET,CAAC,eAAD,EAAkB,sBAAlB,CAFS,CADJ;IAMPkE,cAAc,EAAE,KANT;IAQPT,UAAU,EAAE,EARL;IAUP7B,KAAK,EAAE,CACL,yBADK,EAEL,8BAFK,EAGL,sCAHK,EAIL,gCAJK;;CAnCJ;;ACAA,IAAM4L,uBAAuB,GAAG;EACrCrK,MAAM,EAAE,mBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,kCAAD;GAJwB;EAOrC2D,MAAM,EAAE,IAP6B;EASrCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAVwB;EAarCgE,GAAG,EAAE,IAbgC;EAerCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAhBwB;EAmBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,qBAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE;;CAxBJ;;ACAA,IAAM6L,qBAAqB,GAAG;EACnCtK,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,oBAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,SAAD;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,OAAD,CADG;IAEd0H,MAAM,EAAE,oBAFM;IAGd5C,QAAQ,EAAE;GAduB;EAiBnCd,GAAG,EAAE,IAjB8B;EAmBnCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBsB;EAuBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE;;CA5BJ;;ACAA,IAAM8L,oBAAoB,GAAG;EAClCvK,MAAM,EAAE,cAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,mBAAD;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZqB;EAelCgE,GAAG,EAAE,IAf6B;EAiBlCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBqB;EAqBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,6DAAD,CADJ;IAGPyD,UAAU,EAAE;wBACQ,sBAAA9P,KAAK,EAAI;YACnBga,SAAS,GAAGha,KAAK,CAACkE,IAAN,EAAlB;QACAlE,KAAK,CAACgD,WAAN,CAAkBgX,SAAlB;;KANG;IAUP/L,KAAK,EAAE,CAAC,YAAD;;CA/BJ;;ACAA,IAAMgM,qBAAqB,GAAG;EACnCzK,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,wBAAD;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,2BAAD,EAA8B,UAA9B,CAAD;GAZsB;EAenCgE,GAAG,EAAE,IAf8B;EAiBnCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBsB;EAqBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,gBAAD,CADJ;IAGPyD,UAAU,EAAE;mCACmB,gCAAA9P,KAAK,EAAI;YAC9B4N,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,KAAX,CAAZ;QACAF,KAAK,CAACE,IAAN,CAAW,KAAX,EAAkB0N,GAAG,CAAChU,OAAJ,CAAY,SAAZ,EAAuB,EAAvB,EAA2BA,OAA3B,CAAmC,OAAnC,EAA4C,EAA5C,CAAlB;;KANG;IAUPqU,KAAK,EAAE,CAAC,iBAAD,EAAoB,kBAApB;;CA/BJ;;ACAA,IAAMiM,kBAAkB,GAAG;EAChC1K,MAAM,EAAE,YADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,YAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD,EAA2C,WAA3C;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,oBAAD,EAAuB,UAAvB,CAFS;GAZmB;EAkBhCgE,GAAG,EAAE,IAlB2B;EAoBhCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GArBmB;EAwBhCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE;;CA7BJ;;ACAA,IAAMkM,wBAAwB,GAAG;EACtC3K,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,qCAAD,EAAwC,qBAAxC;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,qBAAD,EAAwB,OAAxB,CADS,EAET,+BAFS;GARyB;EActC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,gCAAD,EAAmC,UAAnC,CAFS;GAfyB;EAqBtCgE,GAAG,EAAE,IArBiC;EAuBtCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAxByB;EA2BtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,uCADS,EAET,yBAFS,CADJ;IAMPyD,UAAU,EAAE;sBACM,qBAAA9P,KAAK,EAAI;YACjB4N,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,KAAX,CAAZ;QACAF,KAAK,CAACE,IAAN,CAAW,KAAX,EAAkB0N,GAAG,CAAChU,OAAJ,CAAY,SAAZ,EAAuB,EAAvB,EAA2BA,OAA3B,CAAmC,OAAnC,EAA4C,EAA5C,CAAlB;;KATG;IAaPqU,KAAK,EAAE,CAAC,+BAAD;;CAxCJ;;ACAA,IAAMmM,oBAAoB,GAAG;EAClC5K,MAAM,EAAE,gBAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,wBAAD,EAA2B,IAA3B;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iBAAD,EAAoB,iBAApB;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,MAAD,CADG;IAEd0H,MAAM,EAAE,aAFM;IAGd5C,QAAQ,EAAE;GAdsB;EAiBlCd,GAAG,EAAE,IAjB6B;EAmBlCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBqB;EAuBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,cAAD,EAAiB,UAAjB,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE,CAAC,cAAD;;CA5BJ;;ACAA,IAAMoM,uBAAuB,GAAG;EACrC7K,MAAM,EAAE,mBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD,EAAqC,IAArC;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,yBAAD,EAA4B,uBAA5B;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,8BAAD,EAAiC,SAAjC,CADS,EAET,CAAC,gCAAD,EAAmC,OAAnC,CAFS,CADG;IAKd8E,QAAQ,EAAE;GAhByB;EAmBrCd,GAAG,EAAE,IAnBgC;EAqBrCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,kCAAD,EAAqC,OAArC,CADS,EAET,CAAC,uBAAD,EAA0B,OAA1B,CAFS;GAtBwB;EA4BrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,gBAAD,EAAmB,UAAnB,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,eAAD;;CAnCJ;;ACAA,IAAMqM,mBAAmB,GAAG;EACjC9K,MAAM,EAAE,eADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJoB;EAOjC2D,MAAM,EAAE,IAPyB;EASjCC,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,mBAAD,CADG;IAEd0H,MAAM,EAAE,WAFM;IAGd5C,QAAQ,EAAE;GAZqB;EAejCd,GAAG,EAAE,IAf4B;EAiBjCS,cAAc,EAAE,IAjBiB;EAmBjC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,YAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,mBAAD;;CA1BJ;;ACAA,IAAMsM,sBAAsB,GAAG;EACpC/K,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,YAAD,EAAe,yBAAf;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,UAAD;GARuB;EAWpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,QAAD,EAAW,CAAC,oBAAD,EAAuB,OAAvB,CAAX,CADG;IAGd0H,MAAM,EAAE,mBAHM;IAKd5C,QAAQ,EAAE;GAhBwB;EAmBpCd,GAAG,EAAE,IAnB+B;EAqBpCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAtBuB;EAyBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,qBAAD,EAAwB,aAAxB,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE;;CA9BJ;;ACAA,IAAMuM,uBAAuB,GAAG;EACrChL,MAAM,EAAE,mBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,gBAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iBAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,iBAAD,EAAoB,UAApB,CAAD;GAZwB;EAerCgE,GAAG,EAAE,IAfgC;EAiBrCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBwB;EAqBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;IAGPkE,cAAc,EAAE,KAHT;IAKPT,UAAU,EAAE,EALL;IAOP7B,KAAK,EAAE,CAAC,8BAAD;;CA5BJ;;ACEA,IAAMwM,gBAAgB,GAAG;EAC9BjL,MAAM,EAAE,UADsB;EAG9B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,oCAAD,EAAuC,eAAvC;GAJiB;EAO9B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,6BAAD,EAAgC,OAAhC,CADS,EAET,sBAFS;GARiB;EAc9B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,qCAAD,EAAwC,OAAxC,CADS,EAET,CAAC,MAAD,EAAS,UAAT,CAFS;GAfiB;EAqB9BgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,gCAAD,EAAmC,aAAnC;GAtBiB;EAyB9ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA1BiB;EA6B9BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT,kDADS,EAET,wBAFS,CADJ;IAMPyD,UAAU,EAAE;4BACY,yBAAA9P,KAAK,EAAI;YACvB0a,YAAY,GAAG1a,KAAK,CAACE,IAAN,CAAW,eAAX,CAArB;YACM0N,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,KAAX,CAAZ;YACMnG,GAAG,GAAG8B,GAAG,CAACmC,OAAJ,CAAY4P,GAAZ,EAAiB8M,YAAjB,CAAZ;QACA1a,KAAK,CAACE,IAAN,CAAW,KAAX,EAAkBnG,GAAlB;;KAXG;IAePkU,KAAK,EAAE,CAAC,gBAAD,EAAmB,MAAnB,EAA2B,eAA3B,EAA4C,qBAA5C;;CA5CJ;;ACFA,IAAM0M,sBAAsB,GAAG;EACpCnL,MAAM,EAAE,iBAD4B;EAGpC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJuB;EAOpC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,iCAAD,EAAoC,OAApC,CAAD;GARuB;EAWpC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZuB;EAepCgE,GAAG,EAAE,IAf+B;EAiBpCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBuB;EAqBpCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,kBAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE;;CA1BJ;;ACAA,IAAM2M,uBAAuB,GAAG;EACrCpL,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,qBAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,aAAD,EAAgB,UAAhB,CAAD;GAZwB;EAerCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD,EAAwC,eAAxC;GAhBwB;EAmBrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBwB;EAuBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,eAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE,CAAC,YAAD;;CA5BJ;;ACAA,IAAM4M,qBAAqB,GAAG;EACnCrL,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,mBAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,eAAD;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,wCAAD,EAA2C,OAA3C,CAAD;GAZsB;EAenCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,gBAAD;GAhBsB;EAmBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBsB;EAuBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;IAGPyD,UAAU,EAAE,EAHL;IAKP7B,KAAK,EAAE,CAAC,YAAD;;CA5BJ;;ACAA,IAAM6M,uBAAuB,GAAG;EACrCtL,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,YAAD,EAAe,gBAAf;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,uBAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,SAAD,CADG;;IAGd0H,MAAM,EAAE,sBAHM;IAId5C,QAAQ,EAAE;GAfyB;EAkBrCd,GAAG,EAAE,IAlBgC;EAoBrCS,cAAc,EAAE,IApBqB;EAsBrC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAhCJ;;ACAA,IAAM8M,qBAAqB,GAAG;EACnCvL,MAAM,EAAE,eAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD,EAAqC,OAArC;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,CAAC,6BAAD,EAAgC,OAAhC,CADS,EAET,+BAFS;GARsB;EAcnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,iCAAD,EAAoC,CAAC,WAAD,EAAc,UAAd,CAApC;GAfsB;EAkBnCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CACT,CAAC,6BAAD,EAAgC,OAAhC,CADS,EAET,0BAFS;GAnBsB;EAyBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CACT,CAAC,uBAAD,EAA0B,OAA1B,CADS,EAET,CAAC,kCAAD,EAAqC,KAArC,CAFS;GA1BsB;EAgCnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,2BAAD,EAA8B,sBAA9B;GAjCsB;EAoCnC2O,MAAM,EAAE;IACN3U,KAAK,EAAE;MACLgG,SAAS,EAAE,CAAC,oBAAD,EAAuB,QAAvB;;;CAtCV;;ACAA,IAAM4O,mBAAmB,GAAG;EACjCzL,MAAM,EAAE,aADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,eAAD;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CACT,uEADS;GARoB;EAajCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,gBAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAvBJ;;ACAA,IAAMiN,qBAAqB,GAAG;EACnC1L,MAAM,EAAE,gBAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,SAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,kBAAD;GARsB;EAWnC4D,cAAc,EAAE,IAXmB;EAanCe,OAAO,EAAE;IACP3E,SAAS,EAAE,CAAC,UAAD;GAdsB;EAiBnCyE,cAAc,EAAE,IAjBmB;EAmBnC/T,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,UAAD,CADJ;;;IAKPyD,UAAU,EAAE;iBACC,IADD;0BAEU,GAFV;MAGVqL,MAAM,EAAE,GAHE;MAIVC,OAAO,EAAE;KATJ;;;;IAePnN,KAAK,EAAE,CAAC,eAAD,EAAkB,oBAAlB;;CAlCJ;;ACAA,IAAMoN,uBAAuB,GAAG;EACrC7L,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,iBAAD;GARwB;EAWrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,MAAD,CADG;IAEd8E,QAAQ,EAAE;GAbyB;EAgBrCL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAjBwB;EAoBrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,2BAAD,CADJ;IAEP4B,KAAK,EAAE,CACL,MADK,EAEL,QAFK,EAGL,sCAHK,EAIL,SAJK,EAKL,0BALK;;CAtBJ;;ACAA,IAAMqN,kCAAkC,GAAG;EAChD9L,MAAM,EAAE,6BADwC;EAGhD3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJmC;EAOhD2O,MAAM,EAAE;IACNO,QAAQ,EAAE;MACRlP,SAAS,EAAE,CAAC,YAAD,CADH;MAERyD,UAAU,EAAE;;GAVgC;EAchDG,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,SAAD,CADG;IAEd0H,MAAM,EAAE,sBAFM;IAGd5C,QAAQ,EAAE;GAjBoC;EAoBhDL,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GArBmC;EAwBhDtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,iCAAD,CADJ;IAEPkE,cAAc,EAAE,KAFT;IAIPtC,KAAK,EAAE,CACL,SADK,EAEL,IAFK,EAGL,SAHK,EAIL,WAJK,EAKL,kBALK,EAML,kDANK;;CA5BJ;;ACAA,IAAMuN,kBAAkB,GAAG;EAChChM,MAAM,EAAE,aADwB;EAGhC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,4BAAD,EAA+B,OAA/B,CAAD;GAJmB;EAOhC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,qBAAD,EAAwB,OAAxB,CAAD;GARmB;EAWhC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZmB;EAehCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,CAAC,UAAD,CAAD,CADJ;;;IAKPyD,UAAU,EAAE;MACV0B,EAAE,EAAE,YAAAxR,KAAK,EAAI;;;QAGXA,KAAK,CAACE,IAAN,CAAW,IAAX,EAAiB,IAAjB,EAHW;;eAMJ,IAAP;OAPQ;MASViQ,EAAE,EAAE,YAAAnQ,KAAK,EAAI;;;QAGXA,KAAK,CAACE,IAAN,CAAW,IAAX,EAAiB,IAAjB,EAHW;;;QAOXF,KAAK,CAACyb,KAAN,CAAY,SAAZ;OAhBQ;MAkBVC,EAAE,EAAE,YAAA1b,KAAK,EAAI;;;QAGXA,KAAK,CAACE,IAAN,CAAW,OAAX,EAAoB,qBAApB;;;;CAzCD;;ACAA,IAAMyb,oBAAoB,GAAG;EAClCnM,MAAM,EAAE,cAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJqB;EAOlC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,WAAD,EAAc,4BAAd;GARqB;EAWlC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,OAAD,EAAU,+BAAV,CADG;IAEd8E,QAAQ,EAAE,kBAFI;IAGd4C,MAAM,EAAE;GAdwB;EAiBlCjD,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAlBqB;EAqBlCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,SAAD,EAAY,mBAAZ,CADJ;;;IAKPyD,UAAU,EAAE;MACV8L,EAAE,EAAE,KADM;MAEVC,EAAE,EAAE;KAPC;;;;IAaP5N,KAAK,EAAE;;CAlCJ;;ACAP;;;AAEA,AAAO,IAAM6N,wBAAwB,GAAG;EACtCtM,MAAM,EAAE,mBAD8B;EAGtC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,8BAAD;GAJyB;EAOtC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,6BAAD;GARyB;EAWtC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CACT,CAAC,yBAAD,EAA4B,UAA5B,CADS,EAET,CAAC,4BAAD,EAA+B,UAA/B,CAFS;GAZyB;EAkBtCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,0BAAD,EAA6B,OAA7B,CAAD;GAnByB;EAsBtCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAvByB;EA0BtCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,mBAAD,CADJ;;;IAKPyD,UAAU,EAAE;MACVhN,CAAC,EAAE,WAAA9C,KAAK,EAAI;YACN,CAACA,KAAK,CAACmJ,QAAN,CAAe,YAAf,CAAL,EAAmC,OAAO,IAAP;YAC/B4S,CAAC,GAAG,EAAR;YACIC,CAAC,GAAG,CAAR;;aACK,IAAIC,CAAC,GAAGjc,KAAK,CAACrG,IAAN,EAAb,EAA2BqiB,CAAC,GAAGC,CAAC,CAACzgB,MAAjC,EAAyCwgB,CAAC,IAAI,CAA9C,EAAiD;cACzCE,CAAC,GAAGD,CAAC,CAACE,UAAF,CAAaH,CAAb,CAAV;UACAE,CAAC,KAAK,GAAN,GACKH,CAAC,IAAI,GADV,GAEIG,CAAC,KAAK,GAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,GAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,GAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,EAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,EAAN,GACCH,CAAC,IAAI,IADN,GAEAG,CAAC,GAAG,EAAJ,KAAWH,CAAC,IAAIK,MAAM,CAACC,YAAP,CAAoBH,CAAC,GAAG,CAAxB,CAAhB,CAZJ;;;QAeFlc,KAAK,CAACkE,IAAN,CAAW6X,CAAX;QACA/b,KAAK,CAACsF,WAAN,CAAkB,YAAlB;QACAtF,KAAK,CAACgF,QAAN,CAAe,cAAf;eACO,IAAP;OAzBQ;MA2BV9B,GAAG,EAAE,aAAAlD,KAAK,EAAI;YACR,CAACA,KAAK,CAACmJ,QAAN,CAAe,YAAf,CAAL,EAAmC,OAAO,IAAP;YAC/B4S,CAAC,GAAG,EAAR;YACIC,CAAC,GAAG,CAAR;;aACK,IAAIC,CAAC,GAAGjc,KAAK,CAACrG,IAAN,EAAb,EAA2BqiB,CAAC,GAAGC,CAAC,CAACzgB,MAAjC,EAAyCwgB,CAAC,IAAI,CAA9C,EAAiD;cACzCE,CAAC,GAAGD,CAAC,CAACE,UAAF,CAAaH,CAAb,CAAV;UACAE,CAAC,KAAK,GAAN,GACKH,CAAC,IAAI,GADV,GAEIG,CAAC,KAAK,GAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,GAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,GAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,EAAN,GACCH,CAAC,IAAI,GADN,GAEAG,CAAC,KAAK,EAAN,GACCH,CAAC,IAAI,IADN,GAEAG,CAAC,GAAG,EAAJ,KAAWH,CAAC,IAAIK,MAAM,CAACC,YAAP,CAAoBH,CAAC,GAAG,CAAxB,CAAhB,CAZJ;;;QAeFlc,KAAK,CAACkE,IAAN,CAAW6X,CAAX;QACA/b,KAAK,CAACsF,WAAN,CAAkB,YAAlB;QACAtF,KAAK,CAACgF,QAAN,CAAe,cAAf;eACO,IAAP;;KAxDG;;;;IA+DPiJ,KAAK,EAAE;;CAzFJ;;ACFA,IAAMqO,oBAAoB,GAAG;EAClC9M,MAAM,EAAE,eAD0B;EAGlC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,WAAD;GAJqB;EAOlC2D,MAAM,EAAE,IAP0B;EASlCC,cAAc,EAAE,IATkB;EAWlCI,GAAG,EAAE,IAX6B;EAalCS,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,2BAAD,EAA8B,SAA9B,CAAD;GAdqB;EAiBlCtP,OAAO,EAAE;;IAEPsP,SAAS,EAAE,CAAC,CAAC,gBAAD,EAAmB,YAAnB,EAAiC,WAAjC,EAA8C,YAA9C,CAAD,CAFJ;;;IAMPyD,UAAU,EAAE,EANL;;;;IAWP7B,KAAK,EAAE,CAAC,YAAD,EAAe,UAAf;;CA5BJ;;ACAA,IAAMsO,uBAAuB,GAAG;EACrC/M,MAAM,EAAE,kBAD6B;EAGrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJwB;EAOrC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,sCAAD;GARwB;;;;EAcrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE;;GAfwB;EAoBrCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,gCAAD;GArBwB;;;;EA2BrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE;;GA5BwB;EAiCrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CACT;;oDAAA,EAIE,kBAJF,CADS,CADJ;;;IAYPyD,UAAU,EAAE,EAZL;;;;IAiBP7B,KAAK,EAAE;;CAlDJ;;ACAA,IAAMuO,uBAAuB,GAAG;EACrChN,MAAM,EAAE,iBAD6B;;;;;;EASrC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,OAAD;GAVwB;EAarC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,oCAAD;GAdwB;EAiBrC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,cAAD,EAAiB,UAAjB,CAAD;GAlBwB;EAqBrCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,4BAAD;GAtBwB;EAyBrCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GA1BwB;EA6BrCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,6BAAD,CADJ;;;IAKPyD,UAAU,EAAE;MACV0B,EAAE,EAAE,YAAAxR,KAAK,EAAI;;;;QAIXA,KAAK,CAACyc,MAAN,CAAa,SAAb;;KAVG;;;;IAiBPxO,KAAK,EAAE;8BAAA,EAGL,iBAHK;;kBAAA;cAAA,EAYL,OAZK,EAaL,UAbK;;CA9CJ;;ACAA,IAAMyO,mBAAmB,GAAG;EACjClN,MAAM,EAAE,cADyB;EAGjC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD,EAAqC,gBAArC;GAJoB;EAOjC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,+CAAD;GARoB;EAWjC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,+BAAD,EAAkC,SAAlC,CAAD;GAZoB;EAejCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,IAAD;GAhBoB;EAmBjCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBoB;EAuBjCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,6BAAD,CADJ;;;IAKPyD,UAAU,EAAE;;;;qBAIK,oBAAA9P,KAAK,EAAI;YAClB,CAACA,KAAK,CAAC0D,OAAN,CAAc,GAAd,EAAmBlI,MAAxB,EAAgC;cACxBqH,WAAW,GAAG7C,KAAK,CAACwC,IAAN,CAAW,GAAX,CAApB;;cACIK,WAAJ,EAAiB;YACf7C,KAAK,CAACkC,MAAN;YACAW,WAAW,CAAC2N,OAAZ,CAAoBxQ,KAApB;;;;KAdD;;;;IAuBPiO,KAAK,EAAE,CACL,iBADK,EAEL,yBAFK,EAGL,OAHK,EAIL,uBAJK;;CA9CJ;;ACAA,IAAM0O,iBAAiB,GAAG;EAC/BnN,MAAM,EAAE,iBADuB;EAG/B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,iBAAD;GAJkB;EAO/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,8BAAD;GARkB;EAW/B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,sBAAD,CADG;IAEd8E,QAAQ,EAAE;GAbmB;EAgB/Bd,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,iBAAD;GAjBkB;EAoB/ByE,cAAc,EAAE;IACdzE,SAAS,EAAE;KAER,uBAAD,EAA0B,OAA1B,CAFS;;KAKR,2BAAD,EAA8B,SAA9B,CALS;;8BAAA;GArBkB;EAiC/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,iBAAD,CADJ;IAEP4B,KAAK,EAAE,CACL,cADK,EAEL,iBAFK,EAGL,OAHK,EAIL,WAJK,EAKL,sBALK,EAML,kBANK,EAOL,YAPK,EAQL,cARK;;CAnCJ;;ACAA,IAAM2O,qBAAqB,GAAG;EACnCpN,MAAM,EAAE,eAD2B;EAGnC3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GAJsB;EAOnC2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GARsB;EAWnC4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,qCAAD,EAAwC,OAAxC,CAAD;GAZsB;EAenCgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,0BAAD;GAhBsB;EAmBnCyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBsB;EAuBnCtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,WAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE,CACL,sBADK,EAEL,OAFK,EAGL,wCAHK;;CAjCJ;;ACAA,IAAM4O,kCAAkC,GAAG;EAChDrN,MAAM,EAAE,6BADwC;EAGhD3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJmC;EAOhD2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,wBAAD;GARmC;EAWhD4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,gCAAD,EAAmC,OAAnC,CAAD;GAZmC;EAehDgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,CAAC,6BAAD,EAAgC,OAAhC,CAAD;GAhBmC;EAmBhDyE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBmC;EAuBhDtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,sBAAD,CADJ;IAGP4B,KAAK,EAAE,CAAC,SAAD;;CA1BJ;;ACAA,IAAM6O,iBAAiB,GAAG;EAC/BtN,MAAM,EAAE,YADuB;EAG/B3F,KAAK,EAAE;IACLwC,SAAS,EAAE,CAAC,IAAD;GAJkB;EAO/B2D,MAAM,EAAE;IACN3D,SAAS,EAAE,CAAC,aAAD,EAAgB,gBAAhB;GARkB;EAW/B4D,cAAc,EAAE;IACd5D,SAAS,EAAE,CAAC,CAAC,sBAAD,EAAyB,UAAzB,CAAD;GAZkB;EAe/BgE,GAAG,EAAE;IACHhE,SAAS,EAAE,CAAC,OAAD;GAhBkB;EAmB/ByE,cAAc,EAAE;IACdzE,SAAS,EAAE,CAAC,CAAC,uBAAD,EAA0B,OAA1B,CAAD;GApBkB;EAuB/BtP,OAAO,EAAE;IACPsP,SAAS,EAAE,CAAC,QAAD,CADJ;;;IAKPyD,UAAU,EAAE,EALL;;;;IAUP7B,KAAK,EAAE;;CAjCJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACGP,iBAAe,aAAY8O,gBAAZ,EAA8B3gB,MAA9B,CAAqC,UAACC,GAAD,EAAM4H,GAAN,EAAc;MAC1DqL,SAAS,GAAGyN,gBAAgB,CAAC9Y,GAAD,CAAlC;2BAEK5H,GADL,EAEKoT,qBAAqB,CAACH,SAAD,CAF1B;CAFa,EAMZ,EANY,CAAf;;ACHA;AACA,AAAO,IAAM0N,eAAe,GAAG,wCAAxB;;AAGP,AAAO,IAAMC,YAAY,GAAG,IAAI1iB,MAAJ,CAAW,aAAX,EAA0B,GAA1B,CAArB;AAEP;AAkBA,AAAO,IAAM2iB,cAAc,GAAG,WAAvB;AACP,AAAO,IAAMC,eAAe,GAAG,WAAxB;AACP,AAAO,IAAMC,oBAAoB,GAAG,4BAA7B;AACP,AAAO,IAAMC,sBAAsB,GAAG,oBAA/B;AACP,AAAO,IAAMC,qBAAqB,GAAG,QAA9B;AACP,AAAO,IAAMC,eAAe,GAAG,6BAAxB;AACP,IAAMC,SAAS,GAAG,CAChB,UADgB,EAEhB,UAFgB,EAGhB,QAHgB,EAIhB,OAJgB,EAKhB,QALgB,EAMhB,SANgB,EAOhB,QAPgB,CAAlB;AASA,IAAMC,YAAY,GAAGD,SAAS,CAAC7gB,IAAV,CAAe,GAAf,CAArB;AACA,AAAO,IAAM+gB,eAAe,GAAG,IAAInjB,MAAJ,sBACfkjB,YADe,eAE7B,GAF6B,CAAxB;AAIP,IAAME,MAAM,GAAG,CACb,KADa,EAEb,KAFa,EAGb,KAHa,EAIb,KAJa,EAKb,KALa,EAMb,KANa,EAOb,KAPa,EAQb,KARa,EASb,KATa,EAUb,KAVa,EAWb,KAXa,EAYb,KAZa,CAAf;AAcA,IAAMC,SAAS,GAAGD,MAAM,CAAChhB,IAAP,CAAY,GAAZ,CAAlB;AACA,IAAMkhB,UAAU,GAAG,qCAAnB;AACA,IAAMC,UAAU,GAAG,wCAAnB;AACA,IAAMC,UAAU,GAAG,cAAnB;AACA,AAAO,IAAMC,iBAAiB,GAAG,IAAIzjB,MAAJ,YAC3BsjB,UAD2B,gBACXC,UADW,gBACKC,UADL,6BACkCH,SADlC,QAE/B,IAF+B,CAA1B;;;AAOP,AAAO,IAAMK,mBAAmB,GAAG,WAA5B;;;;AAKP,AAAO,IAAMC,kBAAkB,GAAG,gBAA3B;AAEP,AAAO,IAAMC,iBAAiB,GAAG,IAAI5jB,MAAJ,CAAW,2BAAX,EAAwC,GAAxC,CAA1B;;ACxEP;;AACA,AAAe,SAAS6jB,WAAT,CAAqBpO,MAArB,EAA6B;SACnCtW,eAAe,CAACsW,MAAM,CAACpW,OAAP,CAAeojB,eAAf,EAAgC,IAAhC,EAAsCnjB,IAAtC,EAAD,CAAtB;;;ACJa,SAASoU,OAAT,CAAeoQ,YAAf,EAA6B;EAC1CA,YAAY,GAAGA,YAAY,CAACxkB,IAAb,EAAf;;MACIykB,QAAQ,CAACC,QAAT,CAAkBF,YAAlB,CAAJ,EAAqC;WAC5BA,YAAP;;;SAGK,IAAP;;;ACFF;;AACA,AAAe,SAASG,QAAT,CAAkBnO,GAAlB,QAAuC;MAAd3Q,CAAc,QAAdA,CAAc;MAAXsR,OAAW,QAAXA,OAAW;;MAEhDX,GAAG,CAAC7U,MAAJ,GAAa,IAAb,IAAqB6U,GAAG,CAAC7U,MAAJ,GAAa,CAAtC,EAAyC,OAAO,IAAP,CAFW;;MAKhDwV,OAAO,IAAIlU,cAAc,CAACkU,OAAD,EAAU,EAAV,CAAd,KAAgClU,cAAc,CAACuT,GAAD,EAAM,EAAN,CAA7D,EACE,OAAO,IAAP;MAEIoO,OAAO,GAAGzS,SAAS,CAACqE,GAAD,EAAM3Q,CAAN,CAAzB,CARoD;;;MAYhDud,YAAY,CAAC7iB,IAAb,CAAkBqkB,OAAlB,CAAJ,EAAgC,OAAO,IAAP;SAEzB/kB,eAAe,CAAC+kB,OAAO,CAAC5kB,IAAR,EAAD,CAAtB;;;ACHK,SAAS6kB,eAAT,CAAyBC,UAAzB,EAAqC;SACnC,CAACA,UAAU,CAAC5jB,KAAX,CAAiBijB,iBAAjB,KAAuC,EAAxC,EACJrhB,IADI,CACC,GADD,EAEJ/C,OAFI,CAEI0jB,qBAFJ,EAE2B,GAF3B,EAGJ1jB,OAHI,CAGIyjB,sBAHJ,EAG4B,UAH5B,EAIJzjB,OAJI,CAIIwjB,oBAJJ,EAI0B,IAJ1B,EAKJvjB,IALI,EAAP;;AAQF,AAAO,SAAS+kB,UAAT,CAAoBD,UAApB,EAAgCxN,QAAhC,EAA0C4C,MAA1C,EAAkD;MACnDkK,mBAAmB,CAAC7jB,IAApB,CAAyBukB,UAAzB,CAAJ,EAA0C;WACjCE,MAAM,CAAC,IAAIC,IAAJ,CAASH,UAAT,CAAD,CAAb;;;MAGEjB,eAAe,CAACtjB,IAAhB,CAAqBukB,UAArB,CAAJ,EAAsC;QAC9BI,SAAS,GAAGrB,eAAe,CAACrjB,IAAhB,CAAqBskB,UAArB,CAAlB;WACOE,MAAM,GAAGG,QAAT,CAAkBD,SAAS,CAAC,CAAD,CAA3B,EAAgCA,SAAS,CAAC,CAAD,CAAzC,CAAP;;;MAGExB,eAAe,CAACnjB,IAAhB,CAAqBukB,UAArB,CAAJ,EAAsC;WAC7BE,MAAM,EAAb;;;SAGK1N,QAAQ,GACX0N,MAAM,CAACI,EAAP,CAAUN,UAAV,EAAsB5K,MAAM,IAAImL,WAAW,CAACP,UAAD,CAA3C,EAAyDxN,QAAzD,CADW,GAEX0N,MAAM,CAACF,UAAD,EAAa5K,MAAM,IAAImL,WAAW,CAACP,UAAD,CAAlC,CAFV;;;;AAOF,AAAe,SAASQ,kBAAT,CACbR,UADa,EAGb;iFADuB,EACvB;MADExN,QACF,QADEA,QACF;MADY4C,MACZ,QADYA,MACZ;;;MAEImJ,cAAc,CAAC9iB,IAAf,CAAoBukB,UAApB,CAAJ,EAAqC;WAC5B,IAAIG,IAAJ,CAAS,UAASH,UAAT,EAAqB,EAArB,CAAT,EAAmCS,WAAnC,EAAP;;;MAEEjC,eAAe,CAAC/iB,IAAhB,CAAqBukB,UAArB,CAAJ,EAAsC;WAC7B,IAAIG,IAAJ,CAAS,UAASH,UAAT,EAAqB,EAArB,IAA2B,IAApC,EAA0CS,WAA1C,EAAP;;;MAGEC,IAAI,GAAGT,UAAU,CAACD,UAAD,EAAaxN,QAAb,EAAuB4C,MAAvB,CAArB;;MAEI,CAACsL,IAAI,CAACC,OAAL,EAAL,EAAqB;IACnBX,UAAU,GAAGD,eAAe,CAACC,UAAD,CAA5B;IACAU,IAAI,GAAGT,UAAU,CAACD,UAAD,EAAaxN,QAAb,EAAuB4C,MAAvB,CAAjB;;;SAGKsL,IAAI,CAACC,OAAL,KAAiBD,IAAI,CAACD,WAAL,EAAjB,GAAsC,IAA7C;;;ACrDa,SAASG,gBAAT,CACb1a,OADa,QAGb;MADEnF,CACF,QADEA,CACF;mCADK8f,kBACL;MADKA,kBACL,sCAD0B,IAC1B;wBADgC3V,KAChC;MADgCA,KAChC,2BADwC,EACxC;sBAD4C9P,GAC5C;MAD4CA,GAC5C,yBADkD,EAClD;iCADsDwW,cACtD;MADsDA,cACtD,oCADuE,IACvE;;;EAGAtG,kBAAe,CAACpF,OAAD,EAAUnF,CAAV,CAAf,CAHA;;;;MAQI6Q,cAAJ,EAAoB9L,WAAW,CAACI,OAAD,EAAUnF,CAAV,CAAX,CARpB;;EAWAsL,oBAAiB,CAACnG,OAAD,EAAUnF,CAAV,EAAa3F,GAAb,CAAjB,CAXA;;;;EAgBA6K,UAAU,CAACC,OAAD,EAAUnF,CAAV,EAAa3F,GAAb,CAAV,CAhBA;;;EAoBAkL,aAAa,CAACJ,OAAD,EAAUnF,CAAV,CAAb,CApBA;;;;EAyBAwF,aAAU,CAACL,OAAD,EAAUnF,CAAV,CAAV,CAzBA;;EA4BAkK,YAAY,CAAC/E,OAAD,EAAUnF,CAAV,EAAamK,KAAb,CAAZ,CA5BA;;;;;MAkCI0G,cAAJ,EAAoB5G,YAAS,CAAC9E,OAAD,EAAUnF,CAAV,EAAa8f,kBAAb,CAAT,CAlCpB;;EAqCA/Z,WAAW,CAACZ,OAAD,EAAUnF,CAAV,CAAX,CArCA;;EAwCA6F,kBAAe,CAACV,OAAD,EAAUnF,CAAV,CAAf;SAEOmF,OAAP;;;ACrDa,SAAS4a,aAAT,CAAoB5V,KAApB,QAAuC;MAAV9P,GAAU,QAAVA,GAAU;MAAL2F,CAAK,QAALA,CAAK;;;;MAGhDwe,kBAAkB,CAAC9jB,IAAnB,CAAwByP,KAAxB,CAAJ,EAAoC;IAClCA,KAAK,GAAG6V,iBAAiB,CAAC7V,KAAD,EAAQ9P,GAAR,CAAzB;GAJkD;;;;MAShD8P,KAAK,CAACrO,MAAN,GAAe,GAAnB,EAAwB;;QAEhB2U,EAAE,GAAGzQ,CAAC,CAAC,IAAD,CAAZ;;QACIyQ,EAAE,CAAC3U,MAAH,KAAc,CAAlB,EAAqB;MACnBqO,KAAK,GAAGsG,EAAE,CAACxW,IAAH,EAAR;;GAbgD;;;SAkB7CD,eAAe,CAACsS,SAAS,CAACnC,KAAD,EAAQnK,CAAR,CAAT,CAAoB7F,IAApB,EAAD,CAAtB;;;ACnBF,SAAS8lB,sBAAT,CAAgCC,UAAhC,EAA4CjmB,IAA5C,EAAkD;;;;MAI5CimB,UAAU,CAACpkB,MAAX,IAAqB,CAAzB,EAA4B;;;;QAIpBqkB,UAAU,GAAGD,UAAU,CAACxjB,MAAX,CAAkB,UAACC,GAAD,EAAMyjB,SAAN,EAAoB;MACvDzjB,GAAG,CAACyjB,SAAD,CAAH,GAAiBzjB,GAAG,CAACyjB,SAAD,CAAH,GAAiBzjB,GAAG,CAACyjB,SAAD,CAAH,GAAiB,CAAlC,GAAsC,CAAvD;aACOzjB,GAAP;KAFiB,EAGhB,EAHgB,CAAnB;;gCAK6B,iBAAgBwjB,UAAhB,EAA4BzjB,MAA5B,CAC3B,UAACC,GAAD,EAAM4H,GAAN,EAAc;UACR5H,GAAG,CAAC,CAAD,CAAH,GAASwjB,UAAU,CAAC5b,GAAD,CAAvB,EAA8B;eACrB,CAACA,GAAD,EAAM4b,UAAU,CAAC5b,GAAD,CAAhB,CAAP;;;aAGK5H,GAAP;KANyB,EAQ3B,CAAC,CAAD,EAAI,CAAJ,CAR2B,CATH;;QASnB0jB,OATmB;QASVC,SATU;;;;;;QAwBtBA,SAAS,IAAI,CAAb,IAAkBD,OAAO,CAACvkB,MAAR,IAAkB,CAAxC,EAA2C;MACzCokB,UAAU,GAAGjmB,IAAI,CAACuB,KAAL,CAAW6kB,OAAX,CAAb;;;QAGIE,SAAS,GAAG,CAACL,UAAU,CAAC,CAAD,CAAX,EAAgBA,UAAU,CAAC3iB,KAAX,CAAiB,CAAC,CAAlB,CAAhB,CAAlB;QACMijB,UAAU,GAAGD,SAAS,CAAC7jB,MAAV,CACjB,UAACC,GAAD,EAAM8S,GAAN;aAAe9S,GAAG,CAACb,MAAJ,GAAa2T,GAAG,CAAC3T,MAAjB,GAA0Ba,GAA1B,GAAgC8S,GAA/C;KADiB,EAEjB,EAFiB,CAAnB;;QAKI+Q,UAAU,CAAC1kB,MAAX,GAAoB,EAAxB,EAA4B;aACnB0kB,UAAP;;;WAGKvmB,IAAP;;;SAGK,IAAP;;;AAGF,SAASwmB,oBAAT,CAA8BP,UAA9B,EAA0C7lB,GAA1C,EAA+C;;;;;;;mBAO5B8B,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CAP4B;MAOrCiC,IAPqC,cAOrCA,IAPqC;;MAQvCokB,WAAW,GAAGpkB,IAAI,CAACpC,OAAL,CAAaukB,iBAAb,EAAgC,EAAhC,CAApB;MAEMkC,SAAS,GAAGT,UAAU,CAAC,CAAD,CAAV,CAAcnkB,WAAd,GAA4B7B,OAA5B,CAAoC,GAApC,EAAyC,EAAzC,CAAlB;MACM0mB,cAAc,GAAGC,KAAK,CAACC,WAAN,CAAkBH,SAAlB,EAA6BD,WAA7B,CAAvB;;MAEIE,cAAc,GAAG,GAAjB,IAAwBD,SAAS,CAAC7kB,MAAV,GAAmB,CAA/C,EAAkD;WACzCokB,UAAU,CAAC3iB,KAAX,CAAiB,CAAjB,EAAoBN,IAApB,CAAyB,EAAzB,CAAP;;;MAGI8jB,OAAO,GAAGb,UAAU,CACvB3iB,KADa,CACP,CAAC,CADM,EACH,CADG,EAEbxB,WAFa,GAGb7B,OAHa,CAGL,GAHK,EAGA,EAHA,CAAhB;MAIM8mB,YAAY,GAAGH,KAAK,CAACC,WAAN,CAAkBC,OAAlB,EAA2BL,WAA3B,CAArB;;MAEIM,YAAY,GAAG,GAAf,IAAsBD,OAAO,CAACjlB,MAAR,IAAkB,CAA5C,EAA+C;WACtCokB,UAAU,CAAC3iB,KAAX,CAAiB,CAAjB,EAAoB,CAAC,CAArB,EAAwBN,IAAxB,CAA6B,EAA7B,CAAP;;;SAGK,IAAP;;;;;AAKF,AAAe,SAAS+iB,iBAAT,CAA2B7V,KAA3B,EAA4C;MAAV9P,GAAU,uEAAJ,EAAI;;;MAGnD6lB,UAAU,GAAG/V,KAAK,CAAC3O,KAAN,CAAYgjB,kBAAZ,CAAnB;;MACI0B,UAAU,CAACpkB,MAAX,KAAsB,CAA1B,EAA6B;WACpBqO,KAAP;;;MAGE8W,QAAQ,GAAGhB,sBAAsB,CAACC,UAAD,EAAa/V,KAAb,CAArC;MACI8W,QAAJ,EAAc,OAAOA,QAAP;EAEdA,QAAQ,GAAGR,oBAAoB,CAACP,UAAD,EAAa7lB,GAAb,CAA/B;MACI4mB,QAAJ,EAAc,OAAOA,QAAP,CAZ2C;;;SAgBlD9W,KAAP;;;AC9FF,IAAM+W,QAAQ,GAAG;EACf5Q,MAAM,EAAEoO,WADO;EAEftN,cAAc,EAAE+P,OAFD;EAGfxQ,GAAG,EAAEmO,QAHU;EAIfvO,cAAc,EAAEkP,kBAJD;EAKfpiB,OAAO,EAAE+jB,gBALM;EAMfjX,KAAK,EAAE4V;CANT;;ACFA;;;;;;;;;;;AAUA,AAAe,SAASsB,eAAT,CAAyBrhB,CAAzB,EAA4BshB,IAA5B,EAAkC;MAC3CA,IAAI,CAACnf,uBAAT,EAAkC;IAChCnC,CAAC,GAAGmC,uBAAuB,CAACnC,CAAD,CAA3B;;;EAGFA,CAAC,GAAGiE,sBAAmB,CAACjE,CAAD,CAAvB;EACAA,CAAC,GAAGmI,eAAY,CAACnI,CAAD,EAAIshB,IAAI,CAACzZ,WAAT,CAAhB;MACM0Z,aAAa,GAAGjY,mBAAgB,CAACtJ,CAAD,CAAtC;SAEOuhB,aAAP;;;AChBF,IAAMC,uBAAuB,GAAG;EAC9BC,WAAW,EAAE;IACXtf,uBAAuB,EAAE,IADd;IAEX0F,WAAW,EAAE,IAFF;IAGXiY,kBAAkB,EAAE;GAJQ;;;;;;;;;;;;;;;;;;;;EA0B9B4B,OA1B8B,yBA0BGJ,IA1BH,EA0BS;QAA7BthB,CAA6B,QAA7BA,CAA6B;QAA1BwE,IAA0B,QAA1BA,IAA0B;QAApB2F,KAAoB,QAApBA,KAAoB;QAAb9P,GAAa,QAAbA,GAAa;IACrCinB,IAAI,qBAAQ,KAAKG,WAAb,EAA6BH,IAA7B,CAAJ;IAEAthB,CAAC,GAAGA,CAAC,IAAIlC,OAAO,CAACmR,IAAR,CAAazK,IAAb,CAAT,CAHqC;;;QAOjCnE,IAAI,GAAG,KAAKshB,cAAL,CAAoB3hB,CAApB,EAAuBmK,KAAvB,EAA8B9P,GAA9B,EAAmCinB,IAAnC,CAAX;;QAEInU,gBAAgB,CAAC9M,IAAD,CAApB,EAA4B;aACnB,KAAKuhB,kBAAL,CAAwBvhB,IAAxB,EAA8BL,CAA9B,CAAP;KAVmC;;;;;;;;;;wCAgBnB,iBAAgBshB,IAAhB,EAAsBxV,MAAtB,CAA6B,UAAA+V,CAAC;eAAIP,IAAI,CAACO,CAAD,CAAJ,KAAY,IAAhB;OAA9B,CAAlB,4GAAuE;YAA5Dtd,GAA4D;QACrE+c,IAAI,CAAC/c,GAAD,CAAJ,GAAY,KAAZ;QACAvE,CAAC,GAAGlC,OAAO,CAACmR,IAAR,CAAazK,IAAb,CAAJ;QAEAnE,IAAI,GAAG,KAAKshB,cAAL,CAAoB3hB,CAApB,EAAuBmK,KAAvB,EAA8B9P,GAA9B,EAAmCinB,IAAnC,CAAP;;YAEInU,gBAAgB,CAAC9M,IAAD,CAApB,EAA4B;;;;;;;;;;;;;;;;;;;WAKvB,KAAKuhB,kBAAL,CAAwBvhB,IAAxB,EAA8BL,CAA9B,CAAP;GArD4B;;EAyD9B2hB,cAzD8B,0BAyDf3hB,CAzDe,EAyDZmK,KAzDY,EAyDL9P,GAzDK,EAyDAinB,IAzDA,EAyDM;WAC3BF,gBAAY,CAACC,eAAe,CAACrhB,CAAD,EAAIshB,IAAJ,CAAhB,EAA2B;MAC5CthB,CAAC,EAADA,CAD4C;MAE5C8f,kBAAkB,EAAEwB,IAAI,CAACxB,kBAFmB;MAG5C3V,KAAK,EAALA,KAH4C;MAI5C9P,GAAG,EAAHA;KAJiB,CAAnB;GA1D4B;;;;EAqE9BunB,kBArE8B,8BAqEXvhB,IArEW,EAqELL,CArEK,EAqEF;QACtB,CAACK,IAAL,EAAW;aACF,IAAP;;;WAGKrG,eAAe,CAACgG,CAAC,CAACwE,IAAF,CAAOnE,IAAP,CAAD,CAAtB;;CA1EJ;;ACRA;;;;;;AAOA,AAAO,IAAMyhB,sBAAsB,GAAG,CACpC,iBADoC,EAEpC,UAFoC,EAGpC,SAHoC,EAIpC,UAJoC,EAKpC,OALoC,CAA/B;;;AAUP,AAAO,IAAMC,oBAAoB,GAAG,CAAC,UAAD,CAA7B;;;;;;;;AASP,AAAO,IAAMC,sBAAsB,GAAG,CACpC,sBADoC,EAEpC,kBAFoC,EAGpC,kBAHoC,EAIpC,YAJoC,EAKpC,mBALoC,EAMpC,cANoC,CAA/B;AASP,AAAO,IAAMC,oBAAoB,GAAG,CAClC,YADkC,EAElC,cAFkC,EAGlC,cAHkC,EAIlC,aAJkC,EAKlC,aALkC,EAMlC,aANkC,EAOlC,aAPkC,EAQlC,eARkC,EASlC,eATkC,EAUlC,iBAVkC,EAWlC,UAXkC,EAYlC,YAZkC,EAalC,IAbkC,EAclC,iBAdkC,EAelC,OAfkC,CAA7B;;ACzBP,IAAMC,qBAAqB,GAAG;EAC5BR,OAD4B,yBACG;QAArB1hB,CAAqB,QAArBA,CAAqB;QAAlB3F,GAAkB,QAAlBA,GAAkB;QAAb8nB,SAAa,QAAbA,SAAa;;;QAGzBhY,KAAJ;IAEAA,KAAK,GAAGuB,kBAAe,CAAC1L,CAAD,EAAI8hB,sBAAJ,EAA4BK,SAA5B,CAAvB;QACIhY,KAAJ,EAAW,OAAO4V,aAAU,CAAC5V,KAAD,EAAQ;MAAE9P,GAAG,EAAHA,GAAF;MAAO2F,CAAC,EAADA;KAAf,CAAjB,CANkB;;;IAU7BmK,KAAK,GAAGuC,uBAAoB,CAAC1M,CAAD,EAAIgiB,sBAAJ,CAA5B;QACI7X,KAAJ,EAAW,OAAO4V,aAAU,CAAC5V,KAAD,EAAQ;MAAE9P,GAAG,EAAHA,GAAF;MAAO2F,CAAC,EAADA;KAAf,CAAjB,CAXkB;;IAc7BmK,KAAK,GAAGuB,kBAAe,CAAC1L,CAAD,EAAI+hB,oBAAJ,EAA0BI,SAA1B,CAAvB;QACIhY,KAAJ,EAAW,OAAO4V,aAAU,CAAC5V,KAAD,EAAQ;MAAE9P,GAAG,EAAHA,GAAF;MAAO2F,CAAC,EAADA;KAAf,CAAjB,CAfkB;;IAkB7BmK,KAAK,GAAGuC,uBAAoB,CAAC1M,CAAD,EAAIiiB,oBAAJ,CAA5B;QACI9X,KAAJ,EAAW,OAAO4V,aAAU,CAAC5V,KAAD,EAAQ;MAAE9P,GAAG,EAAHA,GAAF;MAAO2F,CAAC,EAADA;KAAf,CAAjB,CAnBkB;;WAsBtB,EAAP;;CAvBJ;;ACVA;;;;;;AAMA,AAAO,IAAMoiB,gBAAgB,GAAG,CAC9B,KAD8B,EAE9B,OAF8B,EAG9B,WAH8B,EAI9B,eAJ8B,EAK9B,YAL8B,EAM9B,WAN8B,EAO9B,SAP8B,CAAzB;AAUP,AAAO,IAAMC,iBAAiB,GAAG,GAA1B;;;;;;;;AASP,AAAO,IAAMC,gBAAgB,GAAG,CAC9B,sBAD8B,EAE9B,mBAF8B,EAG9B,oBAH8B,EAI9B,mBAJ8B,EAK9B,oBAL8B,EAM9B,qBAN8B,EAO9B,aAP8B,EAQ9B,iBAR8B,EAS9B,oBAT8B,EAU9B,qBAV8B,EAW9B,eAX8B,EAY9B,YAZ8B,EAa9B,YAb8B,EAc9B,cAd8B,EAe9B,cAf8B,EAgB9B,yBAhB8B,EAiB9B,qBAjB8B,EAkB9B,qBAlB8B,EAmB9B,SAnB8B,EAoB9B,SApB8B,EAqB9B,gBArB8B,EAsB9B,gBAtB8B,EAuB9B,SAvB8B,CAAzB;;;AA4BP,IAAMC,QAAQ,GAAG,aAAjB;AACA,AAAO,IAAMC,mBAAmB,GAAG,CACjC,CAAC,SAAD,EAAYD,QAAZ,CADiC,EAEjC,CAAC,SAAD,EAAYA,QAAZ,CAFiC,CAA5B;;AC5CP,IAAME,sBAAsB,GAAG;EAC7Bf,OAD6B,yBACH;QAAhB1hB,CAAgB,QAAhBA,CAAgB;QAAbmiB,SAAa,QAAbA,SAAa;QACpB7R,MAAJ,CADwB;;;IAKxBA,MAAM,GAAG5E,kBAAe,CAAC1L,CAAD,EAAIoiB,gBAAJ,EAAsBD,SAAtB,CAAxB;;QACI7R,MAAM,IAAIA,MAAM,CAACxU,MAAP,GAAgBumB,iBAA9B,EAAiD;aACxC3D,WAAW,CAACpO,MAAD,CAAlB;KAPsB;;;IAWxBA,MAAM,GAAG5D,uBAAoB,CAAC1M,CAAD,EAAIsiB,gBAAJ,EAAsB,CAAtB,CAA7B;;QACIhS,MAAM,IAAIA,MAAM,CAACxU,MAAP,GAAgBumB,iBAA9B,EAAiD;aACxC3D,WAAW,CAACpO,MAAD,CAAlB;KAbsB;;;;;;;;;;wCAmBQkS,mBAAhC,4GAAqD;;YAAzC3V,QAAyC;YAA/B6V,KAA+B;;YAC7CriB,IAAI,GAAGL,CAAC,CAAC6M,QAAD,CAAd;;YACIxM,IAAI,CAACvE,MAAL,KAAgB,CAApB,EAAuB;cACf7B,IAAI,GAAGoG,IAAI,CAACpG,IAAL,EAAb;;cACIyoB,KAAK,CAAChoB,IAAN,CAAWT,IAAX,CAAJ,EAAsB;mBACbykB,WAAW,CAACzkB,IAAD,CAAlB;;;;;;;;;;;;;;;;;;;WAKC,IAAP;;CA9BJ;;ACVA;;;;AAIA,AAAO,IAAM0oB,wBAAwB,GAAG,CACtC,wBADsC,EAEtC,aAFsC,EAGtC,SAHsC,EAItC,gBAJsC,EAKtC,WALsC,EAMtC,cANsC,EAOtC,UAPsC,EAQtC,UARsC,EAStC,SATsC,EAUtC,eAVsC,EAWtC,UAXsC,EAYtC,cAZsC,EAatC,qBAbsC,EActC,cAdsC,EAetC,SAfsC,EAgBtC,MAhBsC,CAAjC;;;;AAsBP,AAAO,IAAMC,wBAAwB,GAAG,CACtC,4BADsC,EAEtC,oBAFsC,EAGtC,0BAHsC,EAItC,kBAJsC,EAKtC,oBALsC,EAMtC,kBANsC,EAOtC,iBAPsC,EAQtC,aARsC,EAStC,eATsC,EAUtC,qBAVsC,EAWtC,mBAXsC,EAYtC,cAZsC,EAatC,aAbsC,EActC,YAdsC,EAetC,kBAfsC,EAgBtC,WAhBsC,EAiBtC,UAjBsC,CAAjC;;;;AAuBP,IAAMC,eAAe,GAAG,mDAAxB;AACA,AAAO,IAAMC,sBAAsB,GAAG,CACpC,IAAIjoB,MAAJ,CAAW,4BAAX,EAAyC,GAAzC,CADoC,EAEpC,IAAIA,MAAJ,CAAW,6BAAX,EAA0C,GAA1C,CAFoC,EAGpC,IAAIA,MAAJ,sBAAyBgoB,eAAzB,kBAAuD,GAAvD,CAHoC,CAA/B;;ACxCP,IAAME,6BAA6B,GAAG;EACpCrB,OADoC,yBACL;QAArB1hB,CAAqB,QAArBA,CAAqB;QAAlB3F,GAAkB,QAAlBA,GAAkB;QAAb8nB,SAAa,QAAbA,SAAa;QACzBa,aAAJ,CAD6B;;;;IAK7BA,aAAa,GAAGtX,kBAAe,CAC7B1L,CAD6B,EAE7B2iB,wBAF6B,EAG7BR,SAH6B,EAI7B,KAJ6B,CAA/B;QAMIa,aAAJ,EAAmB,OAAOvD,kBAAkB,CAACuD,aAAD,CAAzB,CAXU;;;IAe7BA,aAAa,GAAGtW,uBAAoB,CAAC1M,CAAD,EAAI4iB,wBAAJ,CAApC;QACII,aAAJ,EAAmB,OAAOvD,kBAAkB,CAACuD,aAAD,CAAzB,CAhBU;;IAmB7BA,aAAa,GAAG5oB,cAAc,CAACC,GAAD,EAAMyoB,sBAAN,CAA9B;QACIE,aAAJ,EAAmB,OAAOvD,kBAAkB,CAACuD,aAAD,CAAzB;WAEZ,IAAP;;CAvBJ;;ACVA;;;;AAIA,IAAMC,mBAAmB,GAAG;EAC1BvB,OAD0B,qBAChB;WACD,IAAP;;CAFJ;;ACJA;;;AAGA,AAAO,IAAMwB,wBAAwB,GAAG,CACtC,UADsC,EAEtC,eAFsC,EAGtC,WAHsC,CAAjC;AAMP,AAAO,IAAMC,wBAAwB,GAAG,CAAC,qBAAD,CAAjC;AAEP,AAAO,IAAMC,6BAA6B,GAAG,CAC3C,QAD2C,EAE3C,YAF2C,EAG3C,OAH2C,EAI3C,OAJ2C,EAK3C,UAL2C,CAAtC;AAOP,AAAO,IAAMC,gCAAgC,GAAG,IAAIxoB,MAAJ,CAC9CuoB,6BAA6B,CAACnmB,IAA9B,CAAmC,GAAnC,CAD8C,EAE9C,GAF8C,CAAzC;AAKP,AAAO,IAAMqmB,6BAA6B,GAAG,CAC3C,QAD2C,EAE3C,QAF2C,EAG3C,OAH2C,EAI3C,UAJ2C,EAK3C,UAL2C,EAM3C,MAN2C,EAO3C,IAP2C,EAQ3C,YAR2C,EAS3C,MAT2C,EAU3C,QAV2C,EAW3C,QAX2C,EAY3C,KAZ2C,EAa3C,QAb2C,EAc3C,SAd2C,EAe3C,QAf2C,EAgB3C,SAhB2C,EAiB3C,SAjB2C,EAkB3C,QAlB2C,EAmB3C,OAnB2C,EAoB3C,UApB2C,EAqB3C,SArB2C,EAsB3C,OAtB2C,EAuB3C,OAvB2C,EAwB3C,KAxB2C,EAyB3C,aAzB2C,CAAtC;AA2BP,AAAO,IAAMC,gCAAgC,GAAG,IAAI1oB,MAAJ,CAC9CyoB,6BAA6B,CAACrmB,IAA9B,CAAmC,GAAnC,CAD8C,EAE9C,GAF8C,CAAzC;AAKP,AAAO,IAAMumB,MAAM,GAAG,gBAAf;AACP,AAAO,IAAMC,MAAM,GAAG,kBAAf;;AC/CP,SAASC,MAAT,CAAgBpjB,KAAhB,EAAuB;mBACXA,KAAK,CAACE,IAAN,CAAW,OAAX,KAAuB,EAAjC,cAAuCF,KAAK,CAACE,IAAN,CAAW,IAAX,KAAoB,EAA3D;;;;AAIF,AAAO,SAASmjB,aAAT,CAAuBtpB,GAAvB,EAA4B;EACjCA,GAAG,GAAGA,GAAG,CAACF,IAAJ,EAAN;MACIwM,KAAK,GAAG,CAAZ;;MAEI0c,gCAAgC,CAAC3oB,IAAjC,CAAsCL,GAAtC,CAAJ,EAAgD;IAC9CsM,KAAK,IAAI,EAAT;;;MAGE4c,gCAAgC,CAAC7oB,IAAjC,CAAsCL,GAAtC,CAAJ,EAAgD;IAC9CsM,KAAK,IAAI,EAAT;GAT+B;;;;MAc7B6c,MAAM,CAAC9oB,IAAP,CAAYL,GAAZ,CAAJ,EAAsB;IACpBsM,KAAK,IAAI,EAAT;;;MAGE8c,MAAM,CAAC/oB,IAAP,CAAYL,GAAZ,CAAJ,EAAsB;IACpBsM,KAAK,IAAI,EAAT;GAnB+B;;;SAwB1BA,KAAP;;;AAIF,AAAO,SAASid,SAAT,CAAmBjf,IAAnB,EAAyB;MAC1BA,IAAI,CAACnE,IAAL,CAAU,KAAV,CAAJ,EAAsB;WACb,CAAP;;;SAGK,CAAP;;;;AAKF,AAAO,SAASqjB,cAAT,CAAwBlf,IAAxB,EAA8B;MAC/BgC,KAAK,GAAG,CAAZ;MACMmd,UAAU,GAAGnf,IAAI,CAACX,OAAL,CAAa,QAAb,EAAuBqF,KAAvB,EAAnB;;MAEIya,UAAU,CAAChoB,MAAX,KAAsB,CAA1B,EAA6B;IAC3B6K,KAAK,IAAI,EAAT;;;MAGIsB,OAAO,GAAGtD,IAAI,CAACmB,MAAL,EAAhB;MACIie,QAAJ;;MACI9b,OAAO,CAACnM,MAAR,KAAmB,CAAvB,EAA0B;IACxBioB,QAAQ,GAAG9b,OAAO,CAACnC,MAAR,EAAX;;;GAGDmC,OAAD,EAAU8b,QAAV,EAAoB3b,OAApB,CAA4B,UAAA9H,KAAK,EAAI;QAC/B+F,gBAAc,CAAC3L,IAAf,CAAoBgpB,MAAM,CAACpjB,KAAD,CAA1B,CAAJ,EAAwC;MACtCqG,KAAK,IAAI,EAAT;;GAFJ;SAMOA,KAAP;;;;AAKF,AAAO,SAASqd,cAAT,CAAwBrf,IAAxB,EAA8B;MAC/BgC,KAAK,GAAG,CAAZ;MACMiC,QAAQ,GAAGjE,IAAI,CAAC7B,IAAL,EAAjB;MACMI,OAAO,GAAG0F,QAAQ,CAACxK,GAAT,CAAa,CAAb,CAAhB;;MAEI8E,OAAO,IAAIA,OAAO,CAACH,OAAR,CAAgBhH,WAAhB,OAAkC,YAAjD,EAA+D;IAC7D4K,KAAK,IAAI,EAAT;;;MAGEN,gBAAc,CAAC3L,IAAf,CAAoBgpB,MAAM,CAAC9a,QAAD,CAA1B,CAAJ,EAA2C;IACzCjC,KAAK,IAAI,EAAT;;;SAGKA,KAAP;;AAGF,AAAO,SAASsd,iBAAT,CAA2Btf,IAA3B,EAAiC;MAClCgC,KAAK,GAAG,CAAZ;;MAEM9B,KAAK,GAAG,YAAWF,IAAI,CAACnE,IAAL,CAAU,OAAV,CAAX,CAAd;;MACMoE,MAAM,GAAG,YAAWD,IAAI,CAACnE,IAAL,CAAU,QAAV,CAAX,CAAf;;MACM0N,GAAG,GAAGvJ,IAAI,CAACnE,IAAL,CAAU,KAAV,CAAZ,CALsC;;MAQlCqE,KAAK,IAAIA,KAAK,IAAI,EAAtB,EAA0B;IACxB8B,KAAK,IAAI,EAAT;GAToC;;;MAalC/B,MAAM,IAAIA,MAAM,IAAI,EAAxB,EAA4B;IAC1B+B,KAAK,IAAI,EAAT;;;MAGE9B,KAAK,IAAID,MAAT,IAAmB,CAACsJ,GAAG,CAACrR,QAAJ,CAAa,QAAb,CAAxB,EAAgD;QACxCqnB,IAAI,GAAGrf,KAAK,GAAGD,MAArB;;QACIsf,IAAI,GAAG,IAAX,EAAiB;;MAEfvd,KAAK,IAAI,GAAT;KAFF,MAGO;MACLA,KAAK,IAAIQ,IAAI,CAACgd,KAAL,CAAWD,IAAI,GAAG,IAAlB,CAAT;;;;SAIGvd,KAAP;;AAGF,AAAO,SAASyd,eAAT,CAAyBC,KAAzB,EAAgC1oB,KAAhC,EAAuC;SACrC0oB,KAAK,CAACvoB,MAAN,GAAe,CAAf,GAAmBH,KAA1B;;;AC1GF;;;;;;;;AAOA,IAAM2oB,4BAA4B,GAAG;EACnC5C,OADmC,yBACM;QAA/B1hB,CAA+B,QAA/BA,CAA+B;QAA5B3C,OAA4B,QAA5BA,OAA4B;QAAnB8kB,SAAmB,QAAnBA,SAAmB;QAAR3d,IAAQ,QAARA,IAAQ;QACnC+f,QAAJ;;QACI,CAACvkB,CAAC,CAACjC,OAAH,IAAciC,CAAC,CAAC,MAAD,CAAD,CAAUlE,MAAV,KAAqB,CAAvC,EAA0C;MACxCkE,CAAC,CAAC,GAAD,CAAD,CACGqJ,KADH,GAEGyH,OAFH,CAEWtM,IAFX;KAHqC;;;;;;QAYjCggB,QAAQ,GAAG9Y,kBAAe,CAC9B1L,CAD8B,EAE9BkjB,wBAF8B,EAG9Bf,SAH8B,EAI9B,KAJ8B,CAAhC;;QAOIqC,QAAJ,EAAc;MACZD,QAAQ,GAAGpD,OAAU,CAACqD,QAAD,CAArB;UAEID,QAAJ,EAAc,OAAOA,QAAP;KAtBuB;;;;;QA4BjCzZ,QAAQ,GAAG9K,CAAC,CAAC3C,OAAD,CAAlB;QACMonB,IAAI,GAAGzkB,CAAC,CAAC,KAAD,EAAQ8K,QAAR,CAAD,CAAmBsB,OAAnB,EAAb;QACMsY,SAAS,GAAG,EAAlB;IAEAD,IAAI,CAACrc,OAAL,CAAa,UAACnD,GAAD,EAAMtJ,KAAN,EAAgB;UACrBgJ,IAAI,GAAG3E,CAAC,CAACiF,GAAD,CAAd;UACMiJ,GAAG,GAAGvJ,IAAI,CAACnE,IAAL,CAAU,KAAV,CAAZ;UAEI,CAAC0N,GAAL,EAAU;UAENvH,KAAK,GAAGgd,aAAa,CAACzV,GAAD,CAAzB;MACAvH,KAAK,IAAIid,SAAS,CAACjf,IAAD,CAAlB;MACAgC,KAAK,IAAIkd,cAAc,CAAClf,IAAD,CAAvB;MACAgC,KAAK,IAAIqd,cAAc,CAACrf,IAAD,CAAvB;MACAgC,KAAK,IAAIsd,iBAAiB,CAACtf,IAAD,CAA1B;MACAgC,KAAK,IAAIyd,eAAe,CAACK,IAAD,EAAO9oB,KAAP,CAAxB;MAEA+oB,SAAS,CAACxW,GAAD,CAAT,GAAiBvH,KAAjB;KAbF;;gCAgB2B,iBAAgB+d,SAAhB,EAA2BhoB,MAA3B,CACzB,UAACC,GAAD,EAAM4H,GAAN;aAAemgB,SAAS,CAACngB,GAAD,CAAT,GAAiB5H,GAAG,CAAC,CAAD,CAApB,GAA0B,CAAC4H,GAAD,EAAMmgB,SAAS,CAACngB,GAAD,CAAf,CAA1B,GAAkD5H,GAAjE;KADyB,EAEzB,CAAC,IAAD,EAAO,CAAP,CAFyB,CAhDY;;QAgDhCgoB,MAhDgC;QAgDxBlc,QAhDwB;;QAqDnCA,QAAQ,GAAG,CAAf,EAAkB;MAChB8b,QAAQ,GAAGpD,OAAU,CAACwD,MAAD,CAArB;UAEIJ,QAAJ,EAAc,OAAOA,QAAP;KAxDuB;;;;;;;;;;wCA8DhBpB,wBAAvB,4GAAiD;YAAtCtW,QAAsC;YACzCvM,KAAK,GAAGN,CAAC,CAAC6M,QAAD,CAAD,CAAYxD,KAAZ,EAAd;YACM6E,GAAG,GAAG5N,KAAK,CAACE,IAAN,CAAW,KAAX,CAAZ;;YACI0N,GAAJ,EAAS;UACPqW,QAAQ,GAAGpD,OAAU,CAACjT,GAAD,CAArB;cACIqW,QAAJ,EAAc,OAAOA,QAAP;;;YAGVhlB,IAAI,GAAGe,KAAK,CAACE,IAAN,CAAW,MAAX,CAAb;;YACIjB,IAAJ,EAAU;UACRglB,QAAQ,GAAGpD,OAAU,CAAC5hB,IAAD,CAArB;cACIglB,QAAJ,EAAc,OAAOA,QAAP;;;YAGVhkB,KAAK,GAAGD,KAAK,CAACE,IAAN,CAAW,OAAX,CAAd;;YACID,KAAJ,EAAW;UACTgkB,QAAQ,GAAGpD,OAAU,CAAC5gB,KAAD,CAArB;cACIgkB,QAAJ,EAAc,OAAOA,QAAP;;;;;;;;;;;;;;;;;;WAIX,IAAP;;CApFJ;;ACvBe,SAASK,eAAT,CAAyBje,KAAzB,EAAgCke,UAAhC,EAA4CtlB,IAA5C,EAAkD;;;;;;MAM3DoH,KAAK,GAAG,CAAZ,EAAe;QACPme,UAAU,GAAG,IAAIC,OAAO,CAACC,eAAZ,CACjB,IADiB,EAEjBH,UAFiB,EAGjBtlB,IAHiB,EAIjB0lB,KAJiB,EAAnB,CADa;;;;;;;QAYPC,WAAW,GAAG,MAAMJ,UAA1B;QACMK,YAAY,GAAG,EAAE,OAAOD,WAAW,GAAG,GAArB,CAAF,CAArB;WACOve,KAAK,GAAGwe,YAAf;;;SAGK,CAAP;;;ACvBa,SAASC,aAAT,CAAuB5Z,QAAvB,EAAiClQ,OAAjC,EAA0C;;;;;MAKnDqL,KAAK,GAAG,CAAZ;;MAEI3L,WAAW,CAACN,IAAZ,CAAiB8Q,QAAQ,CAACrR,IAAT,EAAjB,CAAJ,EAAuC;QAC/BkrB,aAAa,GAAG,UAAS7Z,QAAT,EAAmB,EAAnB,CAAtB,CADqC;;;;;QAKjC6Z,aAAa,GAAG,CAApB,EAAuB;MACrB1e,KAAK,GAAG,CAAC,EAAT;KADF,MAEO;MACLA,KAAK,GAAGQ,IAAI,CAACE,GAAL,CAAS,CAAT,EAAY,KAAKge,aAAjB,CAAR;KARmC;;;;;QAcjC/pB,OAAO,IAAIA,OAAO,IAAI+pB,aAA1B,EAAyC;MACvC1e,KAAK,IAAI,EAAT;;;;SAIGA,KAAP;;;AC5Ba,SAAS2e,eAAT,CAAyBhqB,OAAzB,EAAkCiqB,IAAlC,EAAwC;;;;MAIjDjqB,OAAO,IAAI,CAACiqB,IAAhB,EAAsB;WACb,EAAP;;;SAGK,CAAP;;;ACRK,IAAMC,UAAQ,GAAG,IAAjB;;;AAIP,AAAO,IAAMC,uBAAqB,GAAG,CACnC,OADmC,EAEnC,SAFmC,EAGnC,SAHmC,EAInC,SAJmC,EAKnC,QALmC,EAMnC,OANmC,EAOnC,OAPmC,EAQnC,OARmC,EASnC,KATmC,EAUnC,OAVmC,EAWnC,MAXmC,EAYnC,QAZmC,EAanC,KAbmC,EAcnC,iBAdmC,CAA9B;AAgBP,AAAO,IAAMC,0BAAwB,GAAG,IAAI7qB,MAAJ,CACtC4qB,uBAAqB,CAACxoB,IAAtB,CAA2B,GAA3B,CADsC,EAEtC,GAFsC,CAAjC;;;;AAQP,AAAO,IAAM0oB,mBAAiB,GAAG,IAAI9qB,MAAJ,CAC/B,4CAD+B,EAE/B,GAF+B,CAA1B;;;AAOP,AAAO,IAAM+qB,kBAAgB,GAAG,IAAI/qB,MAAJ,CAAW,kBAAX,EAA+B,GAA/B,CAAzB;;;AAIP,AAAO,IAAMgrB,mBAAiB,GAAG,IAAIhrB,MAAJ,CAAW,yBAAX,EAAsC,GAAtC,CAA1B;;ACrCQ,SAASirB,oBAAT,CAA8BvmB,IAA9B,EAAoC;;MAE7CmmB,0BAAwB,CAAChrB,IAAzB,CAA8B6E,IAA9B,CAAJ,EAAyC;WAChC,CAAC,EAAR;;;SAGK,CAAP;;;ACAF,SAASwmB,OAAT,CAAiBC,KAAjB,EAAwB;mBACZA,KAAK,CAACxlB,IAAN,CAAW,OAAX,KAAuB,EAAjC,cAAuCwlB,KAAK,CAACxlB,IAAN,CAAW,IAAX,KAAoB,EAA3D;;;AAGF,AAAe,SAASqjB,gBAAT,CAAwBmC,KAAxB,EAA+B;;;;MAIxC/d,OAAO,GAAG+d,KAAK,CAAClgB,MAAN,EAAd;MACImgB,aAAa,GAAG,KAApB;MACIC,aAAa,GAAG,KAApB;MACIvf,KAAK,GAAG,CAAZ;;cAEW4I,KAAK,CAAC,CAAD,EAAI,CAAJ,CAAhB,EAAwBnH,OAAxB,CAAgC,YAAM;QAChCH,OAAO,CAACnM,MAAR,KAAmB,CAAvB,EAA0B;;;;QAIpBqqB,UAAU,GAAGJ,OAAO,CAAC9d,OAAD,EAAU,GAAV,CAA1B,CALoC;;;QAShC,CAACge,aAAD,IAAkBrkB,OAAO,CAAClH,IAAR,CAAayrB,UAAb,CAAtB,EAAgD;MAC9CF,aAAa,GAAG,IAAhB;MACAtf,KAAK,IAAI,EAAT;KAXkC;;;;;QAkBlC,CAACuf,aAAD,IACAxkB,iBAAiB,CAAChH,IAAlB,CAAuByrB,UAAvB,CADA,IAEAT,0BAAwB,CAAChrB,IAAzB,CAA8ByrB,UAA9B,CAHF,EAIE;UACI,CAAC3kB,iBAAiB,CAAC9G,IAAlB,CAAuByrB,UAAvB,CAAL,EAAyC;QACvCD,aAAa,GAAG,IAAhB;QACAvf,KAAK,IAAI,EAAT;;;;IAIJsB,OAAO,GAAGA,OAAO,CAACnC,MAAR,EAAV;GA5BF;;SA+BOa,KAAP;;;AClDa,SAASyf,aAAT,CAAuBC,QAAvB,EAAiC;;;MAG1CR,mBAAiB,CAACnrB,IAAlB,CAAuB2rB,QAAvB,CAAJ,EAAsC;WAC7B,CAAC,GAAR;;;SAGK,CAAP;;;ACLa,SAASC,WAAT,CACb/mB,IADa,EAEbslB,UAFa,EAGbna,OAHa,EAIbxO,SAJa,EAKbsP,QALa,EAMb+a,YANa,EAOb;;MAEIA,YAAY,CAAC/rB,IAAb,CAAkB,UAAAH,GAAG;WAAIkF,IAAI,KAAKlF,GAAb;GAArB,MAA2C6S,SAA/C,EAA0D;WACjD,KAAP;GAHF;;;;MAQI,CAAC3N,IAAD,IAASA,IAAI,KAAKslB,UAAlB,IAAgCtlB,IAAI,KAAKmL,OAA7C,EAAsD;WAC7C,KAAP;;;MAGMrF,QAZR,GAYqBnJ,SAZrB,CAYQmJ,QAZR;;mBAa+BlJ,GAAG,CAACC,KAAJ,CAAUmD,IAAV,CAb/B;MAakBinB,QAblB,cAaQnhB,QAbR;;;MAgBImhB,QAAQ,KAAKnhB,QAAjB,EAA2B;WAClB,KAAP;GAjBF;;;;MAsBMohB,QAAQ,GAAGlnB,IAAI,CAACrF,OAAL,CAAawQ,OAAb,EAAsB,EAAtB,CAAjB;;MACI,CAAC8a,UAAQ,CAAC9qB,IAAT,CAAc+rB,QAAd,CAAL,EAA8B;WACrB,KAAP;GAxBF;;;;MA6BIf,0BAAwB,CAAChrB,IAAzB,CAA8B8Q,QAA9B,CAAJ,EAA6C;WACpC,KAAP;GA9BF;;;MAkCIA,QAAQ,CAAC1P,MAAT,GAAkB,EAAtB,EAA0B;WACjB,KAAP;;;SAGK,IAAP;;;ACjDa,SAAS4qB,YAAT,CAAsBnnB,IAAtB,EAA4BonB,SAA5B,EAAuC;;;;;MAKhD,CAACA,SAAS,CAACjsB,IAAV,CAAe6E,IAAf,CAAL,EAA2B;WAClB,CAAC,EAAR;;;SAGK,CAAP;;;ACPa,SAASqnB,iBAAT,CAA2BP,QAA3B,EAAqC;;MAE9CV,mBAAiB,CAACjrB,IAAlB,CAAuB2rB,QAAvB,CAAJ,EAAsC;WAC7B,EAAP;;;SAGK,CAAP;;;ACNa,SAASQ,aAAT,CAAuBR,QAAvB,EAAiC;;MAE1CT,kBAAgB,CAAClrB,IAAjB,CAAsB2rB,QAAtB,CAAJ,EAAqC;;;;;QAK/BV,mBAAiB,CAACjrB,IAAlB,CAAuB2rB,QAAvB,CAAJ,EAAsC;aAC7B,CAAC,EAAR;;;;SAIG,CAAP;;;ACIK,SAASS,aAAT,CAAuBpc,OAAvB,EAAgC;SAC9B,IAAI7P,MAAJ,YAAe6P,OAAf,GAA0B,GAA1B,CAAP;;;AAGF,SAASqb,SAAT,CAAiBC,KAAjB,EAAwBxa,QAAxB,EAAkC;mBACtBA,QAAQ,IAAIwa,KAAK,CAAC/rB,IAAN,EAAtB,cAAsC+rB,KAAK,CAACxlB,IAAN,CAAW,OAAX,KAAuB,EAA7D,cAAmEwlB,KAAK,CAACxlB,IAAN,CACjE,IADiE,KAE9D,EAFL;;;AAKF,AAAe,SAASumB,UAAT,OAOZ;MANDC,KAMC,QANDA,KAMC;MALDnC,UAKC,QALDA,UAKC;MAJDna,OAIC,QAJDA,OAIC;MAHDxO,SAGC,QAHDA,SAGC;MAFD8D,CAEC,QAFDA,CAEC;+BADDumB,YACC;MADDA,YACC,kCADc,EACd;EACDrqB,SAAS,GAAGA,SAAS,IAAIC,GAAG,CAACC,KAAJ,CAAUyoB,UAAV,CAAzB;MACM8B,SAAS,GAAGG,aAAa,CAACpc,OAAD,CAA/B;MACM6a,IAAI,GAAGnY,WAAW,CAACpN,CAAD,CAAxB,CAHC;;;;;;;;MAYKinB,WAAW,GAAGD,KAAK,CAACtqB,MAAN,CAAa,UAACwqB,aAAD,EAAgBC,IAAhB,EAAyB;;;;QAIlDhjB,KAAK,GAAGC,QAAQ,CAAC+iB,IAAD,CAAtB,CAJwD;;QAOpD,CAAChjB,KAAK,CAAC5E,IAAX,EAAiB,OAAO2nB,aAAP;QAEX3nB,IAAI,GAAGhE,YAAY,CAAC4I,KAAK,CAAC5E,IAAP,CAAzB;QACMymB,KAAK,GAAGhmB,CAAC,CAACmnB,IAAD,CAAf;QACM3b,QAAQ,GAAGwa,KAAK,CAAC/rB,IAAN,EAAjB;;QAGE,CAACqsB,WAAW,CAAC/mB,IAAD,EAAOslB,UAAP,EAAmBna,OAAnB,EAA4BxO,SAA5B,EAAuCsP,QAAvC,EAAiD+a,YAAjD,CADd,EAEE;aACOW,aAAP;KAhBsD;;;QAoBpD,CAACA,aAAa,CAAC3nB,IAAD,CAAlB,EAA0B;MACxB2nB,aAAa,CAAC3nB,IAAD,CAAb,GAAsB;QACpBoH,KAAK,EAAE,CADa;QAEpB6E,QAAQ,EAARA,QAFoB;QAGpBjM,IAAI,EAAJA;OAHF;KADF,MAMO;MACL2nB,aAAa,CAAC3nB,IAAD,CAAb,CAAoBiM,QAApB,aACE0b,aAAa,CAAC3nB,IAAD,CAAb,CAAoBiM,QADtB,cAEIA,QAFJ;;;QAKI4b,YAAY,GAAGF,aAAa,CAAC3nB,IAAD,CAAlC;QACM8mB,QAAQ,GAAGN,SAAO,CAACC,KAAD,EAAQxa,QAAR,CAAxB;QACMlQ,OAAO,GAAGH,cAAc,CAACoE,IAAD,CAA9B;QAEIoH,KAAK,GAAG+f,YAAY,CAACnnB,IAAD,EAAOonB,SAAP,CAAxB;IACAhgB,KAAK,IAAIigB,iBAAiB,CAACP,QAAD,CAA1B;IACA1f,KAAK,IAAIkgB,aAAa,CAACR,QAAD,CAAtB;IACA1f,KAAK,IAAIyf,aAAa,CAACC,QAAD,CAAtB;IACA1f,KAAK,IAAIkd,gBAAc,CAACmC,KAAD,CAAvB;IACArf,KAAK,IAAImf,oBAAoB,CAACvmB,IAAD,CAA7B;IACAoH,KAAK,IAAI2e,eAAe,CAAChqB,OAAD,EAAUiqB,IAAV,CAAxB;IACA5e,KAAK,IAAIye,aAAa,CAAC5Z,QAAD,EAAWlQ,OAAX,CAAtB;IACAqL,KAAK,IAAIie,eAAe,CAACje,KAAD,EAAQke,UAAR,EAAoBtlB,IAApB,CAAxB;IAEA6nB,YAAY,CAACzgB,KAAb,GAAqBA,KAArB;WAEOugB,aAAP;GAhDkB,EAiDjB,EAjDiB,CAApB;SAmDO,iBAAgBD,WAAhB,EAA6BnrB,MAA7B,KAAwC,CAAxC,GAA4C,IAA5C,GAAmDmrB,WAA1D;;;AC5FF;;AACA,IAAMI,2BAA2B,GAAG;EAClC3F,OADkC,yBACgB;QAAxC1hB,CAAwC,QAAxCA,CAAwC;QAArC3F,GAAqC,QAArCA,GAAqC;QAAhC6B,SAAgC,QAAhCA,SAAgC;iCAArBqqB,YAAqB;QAArBA,YAAqB,kCAAN,EAAM;IAChDrqB,SAAS,GAAGA,SAAS,IAAIC,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CAAzB;QAEMwqB,UAAU,GAAGtpB,YAAY,CAAClB,GAAD,CAA/B;QACMqQ,OAAO,GAAG1O,cAAc,CAAC3B,GAAD,EAAM6B,SAAN,CAA9B;QAEM8qB,KAAK,GAAGhnB,CAAC,CAAC,SAAD,CAAD,CAAaoM,OAAb,EAAd;QAEMkb,WAAW,GAAGP,UAAU,CAAC;MAC7BC,KAAK,EAALA,KAD6B;MAE7BnC,UAAU,EAAVA,UAF6B;MAG7Bna,OAAO,EAAPA,OAH6B;MAI7BxO,SAAS,EAATA,SAJ6B;MAK7B8D,CAAC,EAADA,CAL6B;MAM7BumB,YAAY,EAAZA;KAN4B,CAA9B,CARgD;;QAkB5C,CAACe,WAAL,EAAkB,OAAO,IAAP,CAlB8B;;;QAsB1CC,OAAO,GAAG,iBAAgBD,WAAhB,EAA6B5qB,MAA7B,CACd,UAACC,GAAD,EAAMwqB,IAAN,EAAe;UACPK,UAAU,GAAGF,WAAW,CAACH,IAAD,CAA9B;aACOK,UAAU,CAAC7gB,KAAX,GAAmBhK,GAAG,CAACgK,KAAvB,GAA+B6gB,UAA/B,GAA4C7qB,GAAnD;KAHY,EAKd;MAAEgK,KAAK,EAAE,CAAC;KALI,CAAhB,CAtBgD;;;;QAgC5C4gB,OAAO,CAAC5gB,KAAR,IAAiB,EAArB,EAAyB;aAChB4gB,OAAO,CAAChoB,IAAf;;;WAGK,IAAP;;CArCJ;;ACPO,IAAMkoB,wBAAwB,GAAG,CAAC,QAAD,CAAjC;;ACKP,SAASC,WAAT,CAAqBrtB,GAArB,EAA0B;MAClB6B,SAAS,GAAGC,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CAAlB;MACQgL,QAFgB,GAEHnJ,SAFG,CAEhBmJ,QAFgB;SAGjBA,QAAP;;;AAGF,SAASuJ,MAAT,CAAgBvU,GAAhB,EAAqB;SACZ;IACLA,GAAG,EAAHA,GADK;IAELyV,MAAM,EAAE4X,WAAW,CAACrtB,GAAD;GAFrB;;;AAMF,IAAMstB,mBAAmB,GAAG;EAC1BjG,OAD0B,yBACK;QAArB1hB,CAAqB,QAArBA,CAAqB;QAAlB3F,GAAkB,QAAlBA,GAAkB;QAAb8nB,SAAa,QAAbA,SAAa;QACvByF,UAAU,GAAG5nB,CAAC,CAAC,qBAAD,CAApB;;QACI4nB,UAAU,CAAC9rB,MAAX,KAAsB,CAA1B,EAA6B;UACrByD,IAAI,GAAGqoB,UAAU,CAACpnB,IAAX,CAAgB,MAAhB,CAAb;;UACIjB,IAAJ,EAAU;eACDqP,MAAM,CAACrP,IAAD,CAAb;;;;QAIEsoB,OAAO,GAAGnc,kBAAe,CAAC1L,CAAD,EAAIynB,wBAAJ,EAA8BtF,SAA9B,CAA/B;;QACI0F,OAAJ,EAAa;aACJjZ,MAAM,CAACiZ,OAAD,CAAb;;;WAGKjZ,MAAM,CAACvU,GAAD,CAAb;;CAfJ;;AClBO,IAAMytB,sBAAsB,GAAG,CAAC,gBAAD,EAAmB,qBAAnB,CAA/B;;ACMA,SAASvZ,OAAT,CAAelR,OAAf,EAAwB2C,CAAxB,EAA4C;MAAjB+nB,SAAiB,uEAAL,GAAK;EACjD1qB,OAAO,GAAGA,OAAO,CAACnD,OAAR,CAAgB,UAAhB,EAA4B,GAA5B,EAAiCC,IAAjC,EAAV;SACO6tB,SAAS,CAAC3qB,OAAD,EAAU0qB,SAAV,EAAqB;IAAEE,OAAO,EAAE;GAAhC,CAAhB;;AAGF,IAAMC,uBAAuB,GAAG;EAC9BxG,OAD8B,yBACK;QAAzB1hB,CAAyB,QAAzBA,CAAyB;QAAtB3C,OAAsB,QAAtBA,OAAsB;QAAb8kB,SAAa,QAAbA,SAAa;QAC3B7Q,OAAO,GAAG5F,kBAAe,CAAC1L,CAAD,EAAI8nB,sBAAJ,EAA4B3F,SAA5B,CAA/B;;QACI7Q,OAAJ,EAAa;aACJ/C,OAAK,CAACjC,SAAS,CAACgF,OAAD,EAAUtR,CAAV,CAAV,CAAZ;KAH+B;;;QAM3B+nB,SAAS,GAAG,GAAlB;QACMI,YAAY,GAAG9qB,OAAO,CAACE,KAAR,CAAc,CAAd,EAAiBwqB,SAAS,GAAG,CAA7B,CAArB;WACOxZ,OAAK,CAACvO,CAAC,CAACmoB,YAAD,CAAD,CAAgBluB,IAAhB,EAAD,EAAyB+F,CAAzB,EAA4B+nB,SAA5B,CAAZ;;CATJ;;ACPA,IAAMK,YAAY,GAAG,SAAfA,YAAe,CAAA/qB,OAAO,EAAI;MACxB2C,CAAC,GAAGlC,OAAO,CAACmR,IAAR,CAAa5R,OAAb,CAAV;MACMyN,QAAQ,GAAG9K,CAAC,CAAC,KAAD,CAAD,CAASqJ,KAAT,EAAjB;MACMpP,IAAI,GAAGD,eAAe,CAAC8Q,QAAQ,CAAC7Q,IAAT,EAAD,CAA5B;SACOA,IAAI,CAACuB,KAAL,CAAW,IAAX,EAAiBM,MAAxB;CAJF;;AAOA,IAAMusB,eAAe,GAAG,SAAlBA,eAAkB,CAAAhrB,OAAO,EAAI;EACjCA,OAAO,GAAGA,OAAO,CAACnD,OAAR,CAAgB,UAAhB,EAA4B,GAA5B,CAAV;EACAmD,OAAO,GAAGA,OAAO,CAACnD,OAAR,CAAgB,MAAhB,EAAwB,GAAxB,CAAV;EACAmD,OAAO,GAAGA,OAAO,CAAClD,IAAR,EAAV;SACOkD,OAAO,CAAC7B,KAAR,CAAc,GAAd,EAAmBM,MAA1B;CAJF;;AAOA,IAAMwsB,yBAAyB,GAAG;EAChC5G,OADgC,yBACX;QAAXrkB,OAAW,QAAXA,OAAW;QACfkrB,KAAK,GAAGH,YAAY,CAAC/qB,OAAD,CAAxB;QACIkrB,KAAK,KAAK,CAAd,EAAiBA,KAAK,GAAGF,eAAe,CAAChrB,OAAD,CAAvB;WACVkrB,KAAP;;CAJJ;;ACJA,IAAMC,gBAAgB,GAAG;;EAEvB1Y,MAAM,EAAE,GAFe;EAGvB3F,KAAK,EAAE+X,qBAAqB,CAACR,OAHN;EAIvBnR,cAAc,EAAEwS,6BAA6B,CAACrB,OAJvB;EAKvBpR,MAAM,EAAEmS,sBAAsB,CAACf,OALR;EAMvBrkB,OAAO,EAAEmkB,uBAAuB,CAACE,OAAxB,CAAgC+G,IAAhC,CAAqCjH,uBAArC,CANc;EAOvBpQ,cAAc,EAAEkT,4BAA4B,CAAC5C,OAPtB;EAQvB/Q,GAAG,EAAEsS,mBAAmB,CAACvB,OARF;EASvBrQ,aAAa,EAAEgW,2BAA2B,CAAC3F,OATpB;EAUvBgH,cAAc,EAAEf,mBAAmB,CAACjG,OAVb;EAWvBpQ,OAAO,EAAE4W,uBAAuB,CAACxG,OAXV;EAYvBiH,UAAU,EAAEL,yBAAyB,CAAC5G,OAZf;EAavBkH,SAAS,EAAE;QAAGze,KAAH,QAAGA,KAAH;WAAe0e,eAAe,CAACC,YAAhB,CAA6B3e,KAA7B,CAAf;GAbY;EAevBuX,OAfuB,mBAefrjB,OAfe,EAeN;QACPmG,IADO,GACKnG,OADL,CACPmG,IADO;QACDxE,CADC,GACK3B,OADL,CACD2B,CADC;;QAGXwE,IAAI,IAAI,CAACxE,CAAb,EAAgB;UACR+oB,MAAM,GAAGjrB,OAAO,CAACmR,IAAR,CAAazK,IAAb,CAAf;MACAnG,OAAO,CAAC2B,CAAR,GAAY+oB,MAAZ;;;QAGI5e,KAAK,GAAG,KAAKA,KAAL,CAAW9L,OAAX,CAAd;QACMkS,cAAc,GAAG,KAAKA,cAAL,CAAoBlS,OAApB,CAAvB;QACMiS,MAAM,GAAG,KAAKA,MAAL,CAAYjS,OAAZ,CAAf;QACMhB,OAAO,GAAG,KAAKA,OAAL,mBAAkBgB,OAAlB;MAA2B8L,KAAK,EAALA;OAA3C;QACMiH,cAAc,GAAG,KAAKA,cAAL,mBAAyB/S,OAAzB;MAAkChB,OAAO,EAAPA;OAAzD;QACMsT,GAAG,GAAG,KAAKA,GAAL,mBAActS,OAAd;MAAuBhB,OAAO,EAAPA;OAAnC;QACMgU,aAAa,GAAG,KAAKA,aAAL,CAAmBhT,OAAnB,CAAtB;QACMiT,OAAO,GAAG,KAAKA,OAAL,mBAAkBjT,OAAlB;MAA2BhB,OAAO,EAAPA;OAA3C;QACMsrB,UAAU,GAAG,KAAKA,UAAL,mBAAqBtqB,OAArB;MAA8BhB,OAAO,EAAPA;OAAjD;QACMurB,SAAS,GAAG,KAAKA,SAAL,CAAe;MAAEze,KAAK,EAALA;KAAjB,CAAlB;;+BACwB,KAAKue,cAAL,CAAoBrqB,OAApB,CAlBT;QAkBPhE,GAlBO,wBAkBPA,GAlBO;QAkBFyV,MAlBE,wBAkBFA,MAlBE;;WAoBR;MACL3F,KAAK,EAALA,KADK;MAELmG,MAAM,EAANA,MAFK;MAGLC,cAAc,EAAEA,cAAc,IAAI,IAH7B;MAILI,GAAG,EAAHA,GAJK;MAKLS,cAAc,EAAdA,cALK;MAML/T,OAAO,EAAPA,OANK;MAOLgU,aAAa,EAAbA,aAPK;MAQLhX,GAAG,EAAHA,GARK;MASLyV,MAAM,EAANA,MATK;MAULwB,OAAO,EAAPA,OAVK;MAWLqX,UAAU,EAAVA,UAXK;MAYLC,SAAS,EAATA;KAZF;;CAnCJ;;ACZA,IAAMI,SAAS,GAAG;kDACgCvW,eADhC;6CAE2BtC;CAF7C;AAKA,AAAe,SAAS8Y,YAAT,CAAsBjpB,CAAtB,EAAyB;MAChC6M,QAAQ,GAAG,iBAAgBmc,SAAhB,EAA2BxuB,IAA3B,CAAgC,UAAA0W,CAAC;WAAIlR,CAAC,CAACkR,CAAD,CAAD,CAAKpV,MAAL,GAAc,CAAlB;GAAjC,CAAjB;;SAEOktB,SAAS,CAACnc,QAAD,CAAhB;;;ACHa,SAASqc,YAAT,CAAsB7uB,GAAtB,EAA2B6B,SAA3B,EAAsC8D,CAAtC,EAAyC;EACtD9D,SAAS,GAAGA,SAAS,IAAIC,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CAAzB;mBACqB6B,SAFiC;MAE9CmJ,QAF8C,cAE9CA,QAF8C;MAGhD8jB,UAAU,GAAG9jB,QAAQ,CACxB7J,KADgB,CACV,GADU,EAEhB+B,KAFgB,CAEV,CAAC,CAFS,EAGhBN,IAHgB,CAGX,GAHW,CAAnB;SAMEgT,aAAa,CAAC5K,QAAD,CAAb,IACA4K,aAAa,CAACkZ,UAAD,CADb,IAEAC,UAAU,CAAC/jB,QAAD,CAFV,IAGA+jB,UAAU,CAACD,UAAD,CAHV,IAIAF,YAAY,CAACjpB,CAAD,CAJZ,IAKAwoB,gBANF;;;ACVK,SAASa,gBAAT,CAA0Bve,QAA1B,EAAoC9K,CAApC,QAAkD;MAATuO,KAAS,QAATA,KAAS;MACnD,CAACA,KAAL,EAAY,OAAOzD,QAAP;EAEZ9K,CAAC,CAACuO,KAAK,CAACtR,IAAN,CAAW,GAAX,CAAD,EAAkB6N,QAAlB,CAAD,CAA6BtI,MAA7B;SAEOsI,QAAP;;;AAIF,AAAO,SAASwe,iBAAT,CAA2Bxe,QAA3B,EAAqC9K,CAArC,SAAwD;MAAdoQ,UAAc,SAAdA,UAAc;MACzD,CAACA,UAAL,EAAiB,OAAOtF,QAAP;;mBAEDsF,UAAhB,EAA4BhI,OAA5B,CAAoC,UAAA7D,GAAG,EAAI;QACnCglB,QAAQ,GAAGvpB,CAAC,CAACuE,GAAD,EAAMuG,QAAN,CAAlB;QACMvK,KAAK,GAAG6P,UAAU,CAAC7L,GAAD,CAAxB,CAFyC;;QAKrC,OAAOhE,KAAP,KAAiB,QAArB,EAA+B;MAC7BgpB,QAAQ,CAACppB,IAAT,CAAc,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;QAC7BuD,gBAAa,CAAC5D,CAAC,CAACK,IAAD,CAAF,EAAUL,CAAV,EAAaoQ,UAAU,CAAC7L,GAAD,CAAvB,CAAb;OADF;KADF,MAIO,IAAI,OAAOhE,KAAP,KAAiB,UAArB,EAAiC;;MAEtCgpB,QAAQ,CAACppB,IAAT,CAAc,UAACxE,KAAD,EAAQ0E,IAAR,EAAiB;YACvBuO,MAAM,GAAGrO,KAAK,CAACP,CAAC,CAACK,IAAD,CAAF,EAAUL,CAAV,CAApB,CAD6B;;YAGzB,OAAO4O,MAAP,KAAkB,QAAtB,EAAgC;UAC9BhL,gBAAa,CAAC5D,CAAC,CAACK,IAAD,CAAF,EAAUL,CAAV,EAAa4O,MAAb,CAAb;;OAJJ;;GAXJ;;SAqBO9D,QAAP;;;AAGF,SAAS0e,oBAAT,CAA8BxpB,CAA9B,EAAiC2M,SAAjC,EAA4C8c,WAA5C,EAAyDC,aAAzD,EAAwE;SAC/D/c,SAAS,CAACnS,IAAV,CAAe,UAAAqS,QAAQ,EAAI;QAC5B,eAAcA,QAAd,CAAJ,EAA6B;UACvB4c,WAAJ,EAAiB;eACR5c,QAAQ,CAACnQ,MAAT,CAAgB,UAACC,GAAD,EAAMuU,CAAN;iBAAYvU,GAAG,IAAIqD,CAAC,CAACkR,CAAD,CAAD,CAAKpV,MAAL,GAAc,CAAjC;SAAhB,EAAoD,IAApD,CAAP;;;qCAGgB+Q,QALS;UAKpBqE,CALoB;UAKjB1Q,IALiB;;aAOzB,CAACkpB,aAAa,IAAK,CAACA,aAAD,IAAkB1pB,CAAC,CAACkR,CAAD,CAAD,CAAKpV,MAAL,KAAgB,CAArD,KACAkE,CAAC,CAACkR,CAAD,CAAD,CAAK1Q,IAAL,CAAUA,IAAV,CADA,IAEAR,CAAC,CAACkR,CAAD,CAAD,CACG1Q,IADH,CACQA,IADR,EAEGrG,IAFH,OAEc,EALhB;;;WAUA,CAACuvB,aAAa,IAAK,CAACA,aAAD,IAAkB1pB,CAAC,CAAC6M,QAAD,CAAD,CAAY/Q,MAAZ,KAAuB,CAA5D,KACAkE,CAAC,CAAC6M,QAAD,CAAD,CACG5S,IADH,GAEGE,IAFH,OAEc,EAJhB;GAhBK,CAAP;;;AAyBF,AAAO,SAASwvB,MAAT,CAAgBrI,IAAhB,EAAsB;MACnBthB,CADmB,GAC8BshB,IAD9B,CACnBthB,CADmB;MAChBiM,IADgB,GAC8BqV,IAD9B,CAChBrV,IADgB;MACV2d,cADU,GAC8BtI,IAD9B,CACVsI,cADU;0BAC8BtI,IAD9B,CACMmI,WADN;MACMA,WADN,kCACoB,KADpB;;MAGvB,CAACG,cAAL,EAAqB,OAAO,IAAP,CAHM;;;MAOvB,OAAOA,cAAP,KAA0B,QAA9B,EAAwC,OAAOA,cAAP;MAEhCjd,SATmB,GASiCid,cATjC,CASnBjd,SATmB;8BASiCid,cATjC,CASR/Y,cATQ;MASRA,cATQ,sCASS,IATT;MASe6Y,aATf,GASiCE,cATjC,CASeF,aATf;MAWrBG,qBAAqB,GAAG5d,IAAI,KAAK,gBAAT,IAA6Byd,aAA3D;MAEMI,gBAAgB,GAAGN,oBAAoB,CAC3CxpB,CAD2C,EAE3C2M,SAF2C,EAG3C8c,WAH2C,EAI3CI,qBAJ2C,CAA7C;MAOI,CAACC,gBAAL,EAAuB,OAAO,IAAP;;WAEdC,iBAAT,CAA2BzpB,KAA3B,EAAkC;IAChCgL,oBAAiB,CAAChL,KAAD,EAAQN,CAAR,EAAWshB,IAAI,CAACjnB,GAAL,IAAY,EAAvB,CAAjB;IACAgvB,gBAAgB,CAAC/oB,KAAD,EAAQN,CAAR,EAAW4pB,cAAX,CAAhB;IACAN,iBAAiB,CAAChpB,KAAD,EAAQN,CAAR,EAAW4pB,cAAX,CAAjB;WACOtpB,KAAP;;;WAGO0pB,UAAT,GAAsB;;;QAGhBlf,QAAJ,CAHoB;;;;;QAShB,eAAcgf,gBAAd,CAAJ,EAAqC;MACnChf,QAAQ,GAAG9K,CAAC,CAAC8pB,gBAAgB,CAAC7sB,IAAjB,CAAsB,GAAtB,CAAD,CAAZ;UACMgtB,QAAQ,GAAGjqB,CAAC,CAAC,aAAD,CAAlB;MACA8K,QAAQ,CAAC3K,IAAT,CAAc,UAACC,CAAD,EAAIuC,OAAJ,EAAgB;QAC5BsnB,QAAQ,CAACnhB,MAAT,CAAgBnG,OAAhB;OADF;MAIAmI,QAAQ,GAAGmf,QAAX;KAPF,MAQO;MACLnf,QAAQ,GAAG9K,CAAC,CAAC8pB,gBAAD,CAAZ;KAlBkB;;;IAsBpBhf,QAAQ,CAACof,IAAT,CAAclqB,CAAC,CAAC,aAAD,CAAf;IACA8K,QAAQ,GAAGA,QAAQ,CAAChF,MAAT,EAAX;IACAgF,QAAQ,GAAGif,iBAAiB,CAACjf,QAAD,CAA5B;;QACIoW,QAAQ,CAACjV,IAAD,CAAZ,EAAoB;MAClBiV,QAAQ,CAACjV,IAAD,CAAR,CAAenB,QAAf,oBAA8BwW,IAA9B;QAAoCzQ,cAAc,EAAdA;;;;QAGlC6Y,aAAJ,EAAmB;aACV5e,QAAQ,CACZnH,QADI,GAEJyI,OAFI,GAGJ9H,GAHI,CAGA,UAAA6lB,EAAE;eAAInqB,CAAC,CAACwE,IAAF,CAAOxE,CAAC,CAACmqB,EAAD,CAAR,CAAJ;OAHF,CAAP;;;WAMKnqB,CAAC,CAACwE,IAAF,CAAOsG,QAAP,CAAP;;;MAGE2e,WAAJ,EAAiB;WACRO,UAAU,CAACF,gBAAD,CAAjB;;;MAGEM,MAAJ;MACIxb,MAAJ,CAzE2B;;;MA4EvB,eAAckb,gBAAd,CAAJ,EAAqC;2CACCA,gBADD;QAC5Bjd,QAD4B;QAClBrM,IADkB;QACZ6pB,SADY;;IAEnCD,MAAM,GAAGpqB,CAAC,CAAC6M,QAAD,CAAV;IACAud,MAAM,GAAGL,iBAAiB,CAACK,MAAD,CAA1B;IACAxb,MAAM,GAAGwb,MAAM,CAAC9lB,GAAP,CAAW,UAAClE,CAAD,EAAI+pB,EAAJ,EAAW;UACvBG,IAAI,GAAGtqB,CAAC,CAACmqB,EAAD,CAAD,CACV3pB,IADU,CACLA,IADK,EAEVrG,IAFU,EAAb;aAGOkwB,SAAS,GAAGA,SAAS,CAACC,IAAD,CAAZ,GAAqBA,IAArC;KAJO,CAAT;GAJF,MAUO;IACLF,MAAM,GAAGpqB,CAAC,CAAC8pB,gBAAD,CAAV;IACAM,MAAM,GAAGL,iBAAiB,CAACK,MAAD,CAA1B;IACAxb,MAAM,GAAGwb,MAAM,CAAC9lB,GAAP,CAAW,UAAClE,CAAD,EAAI+pB,EAAJ;aAClBnqB,CAAC,CAACmqB,EAAD,CAAD,CACGlwB,IADH,GAEGE,IAFH,EADkB;KAAX,CAAT;;;EAOFyU,MAAM,GACJ,eAAcA,MAAM,CAACxC,OAAP,EAAd,KAAmCsd,aAAnC,GACI9a,MAAM,CAACxC,OAAP,EADJ,GAEIwC,MAAM,CAAC,CAAD,CAHZ,CAhG2B;;;MAsGvBiC,cAAc,IAAIqQ,QAAQ,CAACjV,IAAD,CAA9B,EAAsC;WAC7BiV,QAAQ,CAACjV,IAAD,CAAR,CAAe2C,MAAf,oBAA4B0S,IAA5B,EAAqCsI,cAArC,EAAP;;;SAGKhb,MAAP;;AAGF,AAAO,SAAS2b,mBAAT,CAA6BjP,MAA7B,EAAqCgG,IAArC,EAA2C;MAC1CkJ,OAAO,GAAG,EAAhB;;mBACgBlP,MAAhB,EAAwBlT,OAAxB,CAAgC,UAAAqiB,CAAC,EAAI;QAC/B,CAACD,OAAO,CAACC,CAAD,CAAZ,EAAiB;MACfD,OAAO,CAACC,CAAD,CAAP,GAAad,MAAM,mBAAMrI,IAAN;QAAYrV,IAAI,EAAEwe,CAAlB;QAAqBb,cAAc,EAAEtO,MAAM,CAACmP,CAAD;SAA9D;;GAFJ;;SAKOD,OAAP;;;AAGF,SAASE,aAAT,CAAuBpJ,IAAvB,EAA6B;MACnBrV,IADmB,GACkBqV,IADlB,CACnBrV,IADmB;MACb2D,SADa,GACkB0R,IADlB,CACb1R,SADa;uBACkB0R,IADlB,CACFqJ,QADE;MACFA,QADE,+BACS,IADT;MAGrB/b,MAAM,GAAG+a,MAAM,mBAAMrI,IAAN;IAAYsI,cAAc,EAAEha,SAAS,CAAC3D,IAAD;KAA1D,CAH2B;;MAMvB2C,MAAJ,EAAY;WACHA,MAAP;GAPyB;;;;MAYvB+b,QAAJ,EAAc,OAAOnC,gBAAgB,CAACvc,IAAD,CAAhB,CAAuBqV,IAAvB,CAAP;SAEP,IAAP;;;AAGF,IAAMsJ,aAAa,GAAG;EACpBlJ,OADoB,qBACwB;QAApC9R,SAAoC,uEAAxB4Y,gBAAwB;QAANlH,IAAM;gBACFA,IADE;QAClCuJ,WADkC,SAClCA,WADkC;QACrBC,cADqB,SACrBA,cADqB;;QAGtClb,SAAS,CAACE,MAAV,KAAqB,GAAzB,EAA8B,OAAOF,SAAS,CAAC8R,OAAV,CAAkBJ,IAAlB,CAAP;IAE9BA,IAAI,qBACCA,IADD;MAEF1R,SAAS,EAATA;MAFF;;QAKIib,WAAJ,EAAiB;UACTxtB,QAAO,GAAGqtB,aAAa,mBACxBpJ,IADwB;QAE3BrV,IAAI,EAAE,SAFqB;QAG3Bwd,WAAW,EAAE,IAHc;QAI3Btf,KAAK,EAAE2gB;SAJT;;aAMO;QACLztB,OAAO,EAAPA;OADF;;;QAIE0tB,eAAe,GAAG,EAAtB;;QACInb,SAAS,CAAC0L,MAAd,EAAsB;MACpByP,eAAe,GAAGR,mBAAmB,CAAC3a,SAAS,CAAC0L,MAAX,EAAmBgG,IAAnB,CAArC;;;QAEInX,KAAK,GAAGugB,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE;OAA7C;QACMsE,cAAc,GAAGma,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE;OAAtD;QACMqE,MAAM,GAAGoa,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE;OAA9C;QACMoF,aAAa,GAAGqZ,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE;OAArD;QACM5O,OAAO,GAAGqtB,aAAa,mBACxBpJ,IADwB;MAE3BrV,IAAI,EAAE,SAFqB;MAG3Bwd,WAAW,EAAE,IAHc;MAI3Btf,KAAK,EAALA;OAJF;QAMMiH,cAAc,GAAGsZ,aAAa,mBAC/BpJ,IAD+B;MAElCrV,IAAI,EAAE,gBAF4B;MAGlC5O,OAAO,EAAPA;OAHF;QAKMiU,OAAO,GAAGoZ,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE,SAAlB;MAA6B5O,OAAO,EAAPA;OAA1D;QACMsT,GAAG,GAAG+Z,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE,KAAlB;MAAyB5O,OAAO,EAAPA,OAAzB;MAAkCiU,OAAO,EAAPA;OAA3D;QACMqX,UAAU,GAAG+B,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE,YAAlB;MAAgC5O,OAAO,EAAPA;OAAhE;QACMurB,SAAS,GAAG8B,aAAa,mBAAMpJ,IAAN;MAAYrV,IAAI,EAAE,WAAlB;MAA+B9B,KAAK,EAALA;OAA9D;;gBACwBugB,aAAa,mBAChCpJ,IADgC;MAEnCrV,IAAI,EAAE;OAFgB,IAGlB;MAAE5R,GAAG,EAAE,IAAP;MAAayV,MAAM,EAAE;KA/Ce;QA4ClCzV,GA5CkC,SA4ClCA,GA5CkC;QA4C7ByV,MA5C6B,SA4C7BA,MA5C6B;;;MAkDxC3F,KAAK,EAALA,KADF;MAEE9M,OAAO,EAAPA,OAFF;MAGEiT,MAAM,EAANA,MAHF;MAIEC,cAAc,EAAdA,cAJF;MAKEa,cAAc,EAAdA,cALF;MAMET,GAAG,EAAHA,GANF;MAOEU,aAAa,EAAbA,aAPF;MAQEhX,GAAG,EAAHA,GARF;MASEyV,MAAM,EAANA,MATF;MAUEwB,OAAO,EAAPA,OAVF;MAWEqX,UAAU,EAAVA,UAXF;MAYEC,SAAS,EAATA;OACGmC,eAbL;;CAlDJ;;SCtM8BC,eAA9B;;;;;;;2BAAe;;;;;;YACb3Z,aADa,QACbA,aADa,EAEb7M,IAFa,QAEbA,IAFa,EAGbxE,CAHa,QAGbA,CAHa,EAIbmiB,SAJa,QAIbA,SAJa,EAKbvT,MALa,QAKbA,MALa,EAMbqc,SANa,QAMbA,SANa,EAOb9gB,KAPa,QAObA,KAPa,EAQb9P,GARa,QAQbA,GARa;;YAWT6wB,KAXS,GAWD,CAXC;YAYP3E,YAZO,GAYQ,CAAChrB,YAAY,CAAClB,GAAD,CAAb,CAZR;;;;kBAeNgX,aAAa,IAAI6Z,KAAK,GAAG,EAfnB;;;;;YAgBXA,KAAK,IAAI,CAAT,CAhBW;;;mBAkBD1c,QAAQ,CAACC,MAAT,CAAgB4C,aAAhB,CAlBC;;;YAkBXrR,CAlBW;YAmBXwE,IAAI,GAAGxE,CAAC,CAACwE,IAAF,EAAP;YAEM2mB,aArBK,GAqBW;cACpB9wB,GAAG,EAAEgX,aADe;cAEpB7M,IAAI,EAAJA,IAFoB;cAGpBxE,CAAC,EAADA,CAHoB;cAIpBmiB,SAAS,EAATA,SAJoB;cAKpB2I,cAAc,EAAE3gB,KALI;cAMpBoc,YAAY,EAAZA;aA3BS;YA8BL6E,cA9BK,GA8BYR,aAAa,CAAClJ,OAAd,CAAsBuJ,SAAtB,EAAiCE,aAAjC,CA9BZ;YAgCX5E,YAAY,CAACvpB,IAAb,CAAkBqU,aAAlB;YACAzC,MAAM,qBACDA,MADC;cAEJvR,OAAO,YAAKuR,MAAM,CAACvR,OAAZ,0BAAmC6tB,KAAnC,kBACLE,cAAc,CAAC/tB,OADV;cAFT,CAjCW;;YAyCXgU,aAAa,GAAG+Z,cAAc,CAAC/Z,aAA/B;;;;;YAGIsX,UA5CO,GA4CMH,gBAAgB,CAACG,UAAjB,CAA4B;cAC7CtrB,OAAO,iBAAUuR,MAAM,CAACvR,OAAjB;aADU,CA5CN;+DAgDRuR,MAhDQ;cAiDXyc,WAAW,EAAEH,KAjDF;cAkDXI,cAAc,EAAEJ,KAlDL;cAmDXvC,UAAU,EAAVA;;;;;;;;;;;;;AC7CJ,IAAM4C,MAAM,GAAG;EACPnvB,KADO;;;8CACD/B,GADC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EACwB,EADxB,EACMmK,IADN,QACMA,IADN,EACe8c,IADf;oCASPA,IATO,CAGTkK,aAHS,EAGTA,aAHS,oCAGO,IAHP,yCASPlK,IATO,CAITqJ,QAJS,EAITA,QAJS,+BAIE,IAJF,uCASPrJ,IATO,CAKTniB,WALS,EAKTA,WALS,kCAKK,MALL,sCASPmiB,IATO,CAMTpiB,OANS,EAMTA,OANS,8BAMC,EAND,kBAOToc,MAPS,GASPgG,IATO,CAOThG,MAPS,EAQTmQ,eARS,GASPnK,IATO,CAQTmK,eARS;;;;kBAcP,CAACpxB,GAAD,IAAQyD,OAAO,CAACC,OAApB,EAA6B;gBAC3B1D,GAAG,GAAGuF,MAAM,CAAC8rB,QAAP,CAAgBnsB,IAAtB,CAD2B;;gBAE3BiF,IAAI,GAAGA,IAAI,IAAI1G,OAAO,CAAC0G,IAAR,EAAf;;;cAGItI,SAnBK,GAmBOC,GAAG,CAACC,KAAJ,CAAU/B,GAAV,CAnBP;;kBAqBNqV,WAAW,CAACxT,SAAD,CArBL;;;;;+CAsBF;gBACL+C,KAAK,EAAE,IADF;gBAELa,OAAO,EACL;eAzBK;;;;qBA6BK0O,QAAQ,CAACC,MAAT,CAAgBpU,GAAhB,EAAqBmK,IAArB,EAA2BtI,SAA3B,EAAsCgD,OAAtC,CA7BL;;;cA6BLc,CA7BK;;mBAgCPA,CAAC,CAAC8O,MAhCK;;;;;+CAiCF9O,CAjCE;;;;kBAqCPyrB,eAAJ,EAAqB;gBACnBE,YAAkB,CAACF,eAAD,CAAlB;;;cAGIR,SAzCK,GAyCO/B,YAAY,CAAC7uB,GAAD,EAAM6B,SAAN,EAAiB8D,CAAjB,CAzCnB;;;;kBA8CP,CAACwE,IAAL,EAAW;gBACTA,IAAI,GAAGxE,CAAC,CAACwE,IAAF,EAAP;eA/CS;;;;cAoDL2d,SApDK,GAoDOniB,CAAC,CAAC,MAAD,CAAD,CACfsE,GADe,CACX,UAAClE,CAAD,EAAIC,IAAJ;uBAAaL,CAAC,CAACK,IAAD,CAAD,CAAQG,IAAR,CAAa,MAAb,CAAb;eADW,EAEf4L,OAFe,EApDP;cAwDPwf,aAxDO,GAwDS,EAxDT;;kBAyDPtQ,MAAJ,EAAY;gBACVsQ,aAAa,GAAGrB,mBAAmB,CAACjP,MAAD,EAAS;kBAAEtb,CAAC,EAADA,CAAF;kBAAK3F,GAAG,EAAHA,GAAL;kBAAUmK,IAAI,EAAJA;iBAAnB,CAAnC;;;cAGEoK,MA7DO,GA6DEgc,aAAa,CAAClJ,OAAd,CAAsBuJ,SAAtB,EAAiC;gBAC5C5wB,GAAG,EAAHA,GAD4C;gBAE5CmK,IAAI,EAAJA,IAF4C;gBAG5CxE,CAAC,EAADA,CAH4C;gBAI5CmiB,SAAS,EAATA,SAJ4C;gBAK5CjmB,SAAS,EAATA,SAL4C;gBAM5CyuB,QAAQ,EAARA,QAN4C;gBAO5CxrB,WAAW,EAAXA;eAPW,CA7DF;wBAuEsByP,MAvEtB,EAuEHzE,KAvEG,WAuEHA,KAvEG,EAuEIkH,aAvEJ,WAuEIA,aAvEJ;;oBA0EPma,aAAa,IAAIna,aA1EV;;;;;;qBA2EM2Z,eAAe,CAAC;gBAC7BC,SAAS,EAATA,SAD6B;gBAE7B5Z,aAAa,EAAbA,aAF6B;gBAG7B7M,IAAI,EAAJA,IAH6B;gBAI7BxE,CAAC,EAADA,CAJ6B;gBAK7BmiB,SAAS,EAATA,SAL6B;gBAM7BvT,MAAM,EAANA,MAN6B;gBAO7BzE,KAAK,EAALA,KAP6B;gBAQ7B9P,GAAG,EAAHA;eAR4B,CA3ErB;;;cA2ETuU,MA3ES;;;;;cAsFTA,MAAM,qBACDA,MADC;gBAEJyc,WAAW,EAAE,CAFT;gBAGJC,cAAc,EAAE;gBAHlB;;;kBAOEnsB,WAAW,KAAK,UAApB,EAAgC;gBACxB0sB,eADwB,GACN,IAAIC,eAAJ,EADM;gBAE9Bld,MAAM,CAACvR,OAAP,GAAiBwuB,eAAe,CAACE,QAAhB,CAAyBnd,MAAM,CAACvR,OAAhC,CAAjB;eAFF,MAGO,IAAI8B,WAAW,KAAK,MAApB,EAA4B;gBACjCyP,MAAM,CAACvR,OAAP,GAAiB2C,CAAC,CAAC/F,IAAF,CAAO+F,CAAC,CAAC4O,MAAM,CAACvR,OAAR,CAAR,CAAjB;;;iEAGUuR,MApGD,EAoGYgd,aApGZ;;;;;;;;;;;;;;;;EAuGb7tB,OAAO,EAAE,CAAC,CAACD,OAAO,CAACC,OAvGN;;;EA2GbsB,aA3Ga,yBA2GChF,GA3GD,EA2GM;WACVmU,QAAQ,CAACC,MAAT,CAAgBpU,GAAhB,CAAP;GA5GW;EA+Gb6V,YA/Ga,2BA+GAN,SA/GA,EA+GW;WACf+b,YAAkB,CAAC/b,SAAD,CAAzB;;CAhHJ;;;;"} \ No newline at end of file