diff --git a/browser/.eslintrc.js b/browser/.eslintrc.js index 7194832a7d33..d3d2f320b18b 100644 --- a/browser/.eslintrc.js +++ b/browser/.eslintrc.js @@ -4,4 +4,12 @@ module.exports = { "extends": [ "../toolkit/.eslintrc.js" ], + + "rules": { + "no-unused-vars": ["error", { + "vars": "local", + "varsIgnorePattern": "^Cc|Ci|Cu|Cr|EXPORTED_SYMBOLS", + "args": "none", + }] + } }; diff --git a/browser/app/blocklist.xml b/browser/app/blocklist.xml index b536cdd9237d..532c1e0e75b2 100644 --- a/browser/app/blocklist.xml +++ b/browser/app/blocklist.xml @@ -1,95 +1,27 @@ - + - + - + - + - - - - - - - - - - - - - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -97,284 +29,25 @@ - - - - - - - - - - - - - - - - - + browser.startup.homepage browser.search.defaultenginename - + - - - - - - - - - - - - - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - + - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - security.csp.enable - security.fileuri.strict_origin_policy - security.mixed_content.block_active_content - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - app.update.auto @@ -384,762 +57,59 @@ - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - - - - - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - browser.startup.homepage - - - - - - - - - - - - - - - - - - - - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - - - - - - - - - - - - - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + - - - browser.startup.homepage - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - - - - + + - - - - - + - + - + - - - browser.startup.homepage - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -1147,23 +117,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + + - + - + - + - + - + + + + + @@ -1174,133 +254,362 @@ - + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + - - - - - + - + + + + + - + + + + + - + + + + + - - - - - - - - - - - - - - - browser.search.defaultenginename - - - - + - + - - - - - + + + + + - + + + + + + + + + - + - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - browser.startup.homepage - browser.search.defaultenginename - + + - + - + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + browser.startup.homepage + + + + + + security.csp.enable + security.fileuri.strict_origin_policy + security.mixed_content.block_active_content + + + + + + + @@ -1309,11 +618,59 @@ - + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1321,82 +678,346 @@ - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + browser.startup.homepage browser.search.defaultenginename - + - + - - - - - - - - - + - + - + - + + + + + - + + + + + + + + + + + + + + + + browser.search.defaultenginename + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + + + + + + + + + browser.startup.homepage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + - - - - - - - - - - - - - - - - - + - + + + + + - + + + + + + + + @@ -1404,6 +1025,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1412,95 +1119,28 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + browser.startup.homepage browser.search.defaultenginename - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - + - - - - - + - + - + @@ -1509,426 +1149,18 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - browser.search.defaultenginename - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + browser.startup.homepage browser.search.defaultenginename - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - browser.startup.homepage - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - browser.startup.homepage - browser.search.defaultenginename - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -1939,31 +1171,306 @@ - + - + + + + + + - - - - - - - - - + - + + + + + - + + + + + + + + + + + + + - + + + + + + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1971,25 +1478,518 @@ + + + + + + + + + + + + + + + + + + + browser.startup.homepage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + browser.startup.homepage + + + + + + + - + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + browser.startup.homepage + browser.search.defaultenginename + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3417,179 +3417,584 @@ - - L79XLVO2ZmtAu7FAG8Wmzw== - - - fWK0j/Vi8vNWg3VAGjc02w== - - - ESCLRVuhcUZaluIgIVlRJx+O + + Os2rnHWYhryvdOXfgan06A== - TurPPI6eivtNeGYdM0ZWXQ== + d8AtKymQwkOPDBj+hjPzFg== - - YNOos6YJoPC77qwSGCpb7w== + + BAAAAAABHkSHlSo= + + + VLm3Xe60+1YgPpXCGtXLng== + + + ESBqoILo90ntDW7OTK43MS2F + + + BAAAAAABIBnBjWg= + + + e0bEFhI16xx9U1yvlI56rA== + + + cDggUYfwJ3A1YcdoeT6s4A== + + + BAAAAAABK84ykc0= + + + BAAAAAABL07hTcY= + + + BAAAAAABKUXDqxw= + + + D9UltDPl4XVfSSqQOvdiwQ== + + + BAAAAAABMYnGRuw= DHmmaw== + + Bydp0g== + + + Ermwxw== + + + BAAAAAABL07hUBg= + + + CrTHPEE6AZSfI3jysin2bA== + + + AJiWmg== + AN9bfYOvlR1t - - a9/VeyVWrzFD7rM2PEHwQA== + + BAAAAAABJZbEU4I= - - Qh/QbQ== + + CqL7CA== - - dItWlz2V62Philqj9m6Pbg== + + BAAAAAABHhw1vwc= - - EA== + + ESJJweWBPhoXAaB9c8SHwI4O - - BAAAAAABJ/v3ZwA= + + GN2Hrh9Ltm4= - - STMAjg== + + P6G7IYSL2RZxtzTh8I6qPA== + + + BAAAAAABJQcQRNU= + + + RurwlgVMxeP6Zepun0LGZA== + + + AQAAAAU= + + + BAAAAAABAJmPjfQ= UUFV3S2cUidOOv7ESN65Ng== - AQAAAAM= + AQAAAAQ= - - Bydr0Q== + + CcHC1w== - - GdXz4L1b6FKNCMG9Jz2tjA== + + O2S99lVUxErLSk56GvWRv+E= - - BAAAAAABMxvC9bk= + + ARQ= + + + CjM= + + + F5BhE0zbgQ== + + + UW3oKZKTDsrPy/rfwmGNaQ== + + + TA6BjA== + + + H08= + + + ESISuBo/wdW2tBztKmHdFCFz BAAAAAABFqoAZoI= - - GN2Hrh9LtnM= - - - 45KI4WIxyXfNrdtdj7C6 - - ESByNJZ5TPjg9iZyL6a/h5Zx + ESCEUbthDurBjJw0/h/FfuNY - - ESCyHU+xOECnh9Rf2IvgR8zS + + U3t2Vk8pfxTcaUPpIq0seQ== - - BAAAAAABI54PryQ= + + Gd/pPu+qLnXUdvP9sW73CQ== - - CeFU2w== + + Byc68g== - - KjoVfZ3by6+pL8fssyfM6A== + + BAAAAAABGMG0Gmw= + + + By7fBTreouRwX/qrpgSUsg== - ATFEdg== + ATFpsA== + + + QZCrvA== + + + a12RvBNhznU= + + + GN2Hrh9LtnI= + + + OhrtngFwotLcm4i+z00SjA== + + + Eg== fwAAAQAAAUrz/HmrAAAAAg== - - BAAAAAABHkSl5AQ= + + Bydxog== - - ESCis569omrbb20yySF39+aE - - - L7tgs/W85vnhV7I7qJ6N/g== + + GdXz4L1b6FKNCMG9Jz2tjA== - BA== + EA== + + + CqZgEvHAsnzkT//QV9KjXw== + + + ESCyHU+xOECnh9Rf2IvgR8zS + + + CqnbFQ== + + + Jq6jgeApiT9O4W2Tx/NTRQ== + + + YRJNfMoc12IpmW+Enpv3Pdo= + + + YNOos6YJoPC77qwSGCpb7w== + + + F7PAjw2k0dTX5escPnyVOBo= + + + BAAAAAABHkSl6mw= + + + CcL+EA== + + + Cd/dug== + + + Sx51x7V8pYe8rp7PMP/3qg== + + + BAAAAAABMrS7t2g= + + + F5Bg/C8eXg== + + + VOcIuNbTqkpOMUyI108FOg== + + + fMTRbGCp280pnyE/u53zbA== + + + HZyLf+K70FKc+jomm8DiDw== + + + GN2Hrh9Ltms= + + + ATFEdg== + + + BAAAAAABIg08D3U= + + + Aa8e+91erglSMgsk/mtVaA== A9GPKQ8jv9oIxfwiOy7qxQ== + + LnfcUaXG/pxV2CpXM5+YSg== + + + AImQERVYPoeb + + + BGU= + + + UU3AP1SMxmyhBFq7MRFZmf0= + + + BHk= + + + ESByNJZ5TPjg9iZyL6a/h5Zx + + + XLhHIg7vP+tWfRqvuKeAxw== + + + BAAAAAABJpQ0AbA= + + + BAAAAAAA+X/GIyk= + + + NTgf4iwIfeyJPIomw2dwSXEwtxQ= + + + Xbevr3ut3Z9m1GuXC9SonA== + + + Mq0P6o03FDk0B2bnJ+mYPGo= + + + F5Bg6C237Q== + + + DYifRdP6aQQ8MLbXZY2f5g== + + + Cfk9lw== + + + U3t2Vk8pfxTcaUPpIq0seQ== + + + EqthLKdUgwI= + + + BAAAAAABCFiEp9s= + + + BAAAAAABJ/ufRdg= + + + M64Z5ufZzDRVTHkJR1uXzw== + + + RurwlgVMxeP6Zepun0LGZA== + + + BAAAAAABGMGjftY= + + + TqfXw+FkhxfVgE9GVMgjWQ== + + + ESC8DawWRiAyEMd38UXbfgPR + + + EAdmaA== + + + BAAAAAABJ/ufQg8= + + + BAAAAAABLM/7qjk= + + + BAAAAAABHkSl7L4= + + + F5Bg+EziQQ== + + + Aw== + + + IIxFSyNM6mWtCgTG0IL3Og== + + + DjIvBkX+ECVbB/C3i6w2Gg== + + + Cbssdw== + + + ESAyW/JX3+hZIp44EAMlXU2b + + + BAAAAAABKB/OGqI= + + + bzTw0uq05TUYEGS98bh0Ww== + + + BydKkg== + + + QZCrvQ== + + + Qh/QbQ== + + + BAAAAAABHkSl6Co= + + + F5BhENPfVw== + + + U3SgRR3J+D6575WuCxuXeQ== + + + Qh/SnQ== + + + ZgwfEqZnBsUNvNuZ77FbQA== + + + ByfHkw== + + + ESCVop+Q4/OBgtf4WJkr01Gh + + + BA== + + + CSU= + + + OqQ2rV0ISTc308Z/oQgzFw== + + + FJl6tXgNpSk= + + + TA6EVg== + + + BQ== + + + 45KI4WIxyXfNrdtdj7C6 + + + BAAAAAABHkSl5ao= + + + L79XLVO2ZmtAu7FAG8Wmzw== + + + bAOrKSMsmA0MLJyAJ5BRsUM= + + + BAAAAAABF2Tb8Bc= + + + BAAAAAABK84yjs8= + + + TurPPI6eivtNeGYdM0ZWXQ== + + + BAAAAAABHJRKNmk= + + + Rvm2CEw2IC2Mu/ax0A46QQ== + + + ATE3ew== + + + ESByYNtAIfizf2L3NMzCH8zZ + + + J2La+q+JOURNWkX60OP2lQ== + + + LTRcDHabRHU= + + + BAAAAAABHkSHjz8= + + + RUT1Gehd1KKYPfqOlgspoQ== + + + ESCC9oPNcRdPOox+SjWm9dTX + + + TrKEMhb2PKktH8lHg0AV5A== + + + WD1AyQAAAAAAJQ== + + + BAAAAAABFUtaxac= + + + NMpMcEnex3eXx4ohk9glcQ== + + + UoRGnb96CUDTxIqVry6LBg== + + + VfTSum25nb65YPlpuhJAvg== + + + BAAAAAABMxvC9bk= + + + JpUvYJyWjdGmeoH7YcYunw== + + + OnvXX72mvUI2Id/NMzegmg== + + + acI1CFIgmwSFBoU5+ahDgg== + GtXUVojhwOTkaQ4bTKblEQ== + + buROL/l2GuXISv+/JVLkdA== + + + BAAAAAABA/A35EU= + + + ORFgmCj072NjcJnrxOMfQA== + + + BYyEX2b5+K+myAIR7eXaRQ== + + + Cfk9qg== + + + e/fIfg2Dj2tkYIWVu2r82Cc= + + + BAAAAAABJ/v3ZwA= + + + SdegFrLaFTCsoMAW5ED+zA== + XhcFm2g619rt8Sro+a4rHA== - - ESBqoILo90ntDW7OTK43MS2F + + AuhvPsYZfVP6UDsuyjeZ4Q== - - ARQ= + + bx/XHJqcwxDOptxJ2lh5vw== + + + WX89jn8yGZVvoKTD9jDfRQ== + + + BAAAAAABCUVQ9No= AQAAAAA= - BYyEX2b5+K+myAIR7eXaRQ== + fWK0j/Vi8vNWg3VAGjc02w== - - BAAAAAABLF5/Gog= - - - COwoDFvz7GD8R2K7Lo0rYQ== - - - CqnbFQ== - - - VN2yeFexyXjPf34fHGmbhg== - - - TA6BjA== - - - R4af5A== - - - BAAAAAABLF5/HXY= - - - BAAAAAABMYnGRuw= - - - BAAAAAABBHYoIFs= - - - D/wZ7+m1Mv8SONSEFcs73w== - - - Ermwxw== - - - WD1AyQAAAAAAJQ== - - - eR1nUEz8k+nDSBD+bb5uIQ== - - - IyIVazG4RE9AERkb+ekH8w== - - - NvEJoRYL2yvAZrAjbDIipQ== - - - Byd5cg== + + BXA= STMAeg== - - EM8bDLBnnoYe4LnWpLIhS4esr3I= + + EEpERSryZFMagbsNw/WoWQ== + + + OUvvVscW0/NltofkmV9qmg== + + + ESCLRVuhcUZaluIgIVlRJx+O + + + BAAAAAABJQdAjik= + + + F6QlB/yX+A== + + + Bydr0Q== + + + cXXMzbWDHMIdCotb3h64yw== + + + ESCis569omrbb20yySF39+aE + + + dItWlz2V62Philqj9m6Pbg== + + + cpqpXVWPk5AXzGw+zNIcBw== + + + YR3YYQAAAAAABA== + + + BYOGvG32ukb1Yxj2oKoFyw== + + + NvEJoRYL2yvAZrAjbDIipQ== + + + GN2Hrh9LtnA= - bAOrKSMsmA0MLJyAJ5BRsUM= + DAk9hy8DhHSo+aQetvPB/fY= + + + CSY= + + + QZBvapTZFvmYktEPsBYLQQ== + + + PAdKZPiaac2CvPxbOrsHOw== BydeGg== @@ -3597,629 +4002,224 @@ Bg== - - Cfk9oA== - - - Sx51x7V8pYe8rp7PMP/3qg== - - - BAAAAAABHJRKMpA= - - - BAAAAAABAJmPjfQ= - - - XLhHIg7vP+tWfRqvuKeAxw== - - - BAAAAAABHkSl7L4= - - - JpUvYJyWjdGmeoH7YcYunw== - - - BAAAAAABJQdAjik= - - - TA6EVg== - - - Eg== - - - BAAAAAABHJRKNmk= - - - CeagHQ== - - - BAAAAAABHkSl5ao= - - - Bydxog== - - - BAAAAAABJQcQQN0= - - - OnvXX72mvUI2Id/NMzegmg== - - - ESCVop+Q4/OBgtf4WJkr01Gh - - - DAk9hy8DhHSo+aQetvPB/fY= - - - ESD9YhzIEOwiOT7Nwip+E1KI - - - BXA= - - - CSY= - - - By7fBTreouRwX/qrpgSUsg== - - - F5Bg/C8eXg== - - - Gd/pPu+qLnXUdvP9sW73CQ== - - - F5Bg6C237Q== - - - J2La+q+JOURNWkX60OP2lQ== - - - ESByYNtAIfizf2L3NMzCH8zZ - - - Ai7cBJYqBE0I9NdyoZfRrw== - - - AImQERVYPoeb - - - CdWFNw== - - - ESC8DawWRiAyEMd38UXbfgPR - - - BYOGvG32ukb1Yxj2oKoFyw== - - - a12RvBNhznU= - - - BAAAAAABK84ykc0= - - - BAAAAAABHkSHki0= - - - AQAAAAI= - - - O2S99lVUxErLSk56GvWRv+E= - - - OqQ2rV0ISTc308Z/oQgzFw== - - - Aw1SPC56593ZCZ9vCNHKwQ== - - - RUT1Gehd1KKYPfqOlgspoQ== - - - AQAAAAQ= - - - OE4/d+p3YRzzcSl+kmZ8Mw== - - - bx/XHJqcwxDOptxJ2lh5vw== - - - U3t2Vk8pfxTcaUPpIq0seQ== - - - OYBKgxEHpW/8XGAGAlvJyMA= - - - ByeQ9g== - - - LnfcUaXG/pxV2CpXM5+YSg== - - - bzTw0uq05TUYEGS98bh0Ww== - - - EEpERSryZFMagbsNw/WoWQ== - - - Aw== - - - sPNcCSE9Nkg3jy5IN1xe2Q== - - - CSU= - - - BAAAAAABHkSHlSo= - - - BAAAAAABCfhiO+s= - - - Bydp0g== - - - ZgwfEqZnBsUNvNuZ77FbQA== - - - RurwlgVMxeP6Zepun0LGZA== - - - Jq6jgeApiT9O4W2Tx/NTRQ== - BAAAAAABM6d3Z0s= - - BAAAAAABGMG0Gmw= - - - ANygrItIJ2rcKlyS3Lue07U= - - - CjM= - - - ATFpsA== - - - BAAAAAABHkSl6Co= - - - CWhp - - - ESCEUbthDurBjJw0/h/FfuNY - - - cpqpXVWPk5AXzGw+zNIcBw== - - - cDggUYfwJ3A1YcdoeT6s4A== - - - BAAAAAABFUtaxac= - - - CrTHPEE6AZSfI3jysin2bA== - - - U3t2Vk8pfxTcaUPpIq0seQ== - - - ATE3ew== - - - BAAAAAABL07hTcY= - - - E5I2y6sIonl4a+TmlXc7fw== - - - AygWP2Fgd2T+iLbmAlKT6g== - - - UVKsEezpGWOVQ4W9esstng== - - - BAAAAAABHkSl6mw= - - - Ikdj3zYXXGsC/Afm9Tvx+g== - - - BAAAAAABCUVQ9No= - - - U4P1tUoxl/XkztlVHdtdgw== - - - TqfXw+FkhxfVgE9GVMgjWQ== - - - ByfHkw== - - - YRJNfMoc12IpmW+Enpv3Pdo= - - - VfTSum25nb65YPlpuhJAvg== - - - UW3oKZKTDsrPy/rfwmGNaQ== - - - E77H6yvyFQjO0PcN3x0H+Q== - - - OUvvVscW0/NltofkmV9qmg== - - - Cbssdw== - - - EDQMI0tR4kSntv1O37N10g== - JV/LVzSKI/wsDgg3UuZHlA== - - WX89jn8yGZVvoKTD9jDfRQ== - - - ESISuBo/wdW2tBztKmHdFCFz - - - NMpMcEnex3eXx4ohk9glcQ== - - - CgFBQgAAAUFcf/EVAAAAAg== - - - F6QlB/yX+A== - - - Os2rnHWYhryvdOXfgan06A== - - - GN2Hrh9LtnA= - - - TrKEMhb2PKktH8lHg0AV5A== - - - AuhvPsYZfVP6UDsuyjeZ4Q== - - - BAAAAAABJ/ufRdg= + + FNISyWWTGi5Yco6fGh58/A== FJl6tXgNpSg= + + ByeQ9g== + + + VN2yeFexyXjPf34fHGmbhg== + - BAAAAAABIBnBjWg= + BAAAAAABLF5/Gog= - - F5BhE0zbgQ== + + EM8bDLBnnoYe4LnWpLIhS4esr3I= - - VLm3Xe60+1YgPpXCGtXLng== - - - e/fIfg2Dj2tkYIWVu2r82Cc= + + IyIVazG4RE9AERkb+ekH8w== - UMUwXwT1Z4juyQ/CNTf4mw== + E77H6yvyFQjO0PcN3x0H+Q== - - BAAAAAABJZbEU4I= - - - d8AtKymQwkOPDBj+hjPzFg== - - - IIxFSyNM6mWtCgTG0IL3Og== + + AQAAAAI= Ew1ee9Jq7Q/Dig3ACF4V6Q== - - ORFgmCj072NjcJnrxOMfQA== - - - BAAAAAABL07hUBg= - - - UoRGnb96CUDTxIqVry6LBg== - - - ESDYXNBhF+dePFjojs7u2vj1 - - - F5Bg+EziQQ== - - - ATE0vw== - - - Cfk9qg== - - - F7PAjw2k0dTX5escPnyVOBo= - - - Aa8e+91erglSMgsk/mtVaA== - - - TXxtAQ== - - - CskruA== - - - U3SgRR3J+D6575WuCxuXeQ== - - - Cd/dug== - - - BAAAAAABAPpuVh0= - - - Byc68g== - - - SdegFrLaFTCsoMAW5ED+zA== - - - EAdmaA== - - - EQ== - - - BAAAAAABGMGjftY= - - - BAAAAAABF2Tb8Bc= - - - BAAAAAABHkSHjz8= - - - BUrYjru5px1ym4QUN33TOQ== - - - RurwlgVMxeP6Zepun0LGZA== - - - P6G7IYSL2RZxtzTh8I6qPA== - - - YR3YYQAAAAAABA== - - - BHk= - - - EqthLKdUgwI= - - - M64Z5ufZzDRVTHkJR1uXzw== - - - BydKkg== - - - LdbnCbsA9sOgI4mkUpWXPw== - - - FNISyWWTGi5Yco6fGh58/A== - - - cXXMzbWDHMIdCotb3h64yw== - - - BAAAAAABEAuMoRs= - - - QZCrvA== - - - BAAAAAABA/A35EU= - - - AJiWmg== - - - BQ== - - - BAAAAAABJpQ0AbA= - - - NTgf4iwIfeyJPIomw2dwSXEwtxQ= - - - acI1CFIgmwSFBoU5+ahDgg== - - - ESDu2nhlLPzfx+LYgjlYFP/k - - - buROL/l2GuXISv+/JVLkdA== - - - CqZgEvHAsnzkT//QV9KjXw== - - HZyLf+K70FKc+jomm8DiDw== - - - Qh/SnQ== - - - BAAAAAABKUXDqA8= + a9/VeyVWrzFD7rM2PEHwQA== Xrr31RF0DoIzMKXS6XtD+g== + + UV9aaDeNRNtQuXjRYk4Skhg= + + + ESDItX4ruWiLnrlz0rk4/bmz + + + Aw1SPC56593ZCZ9vCNHKwQ== + + + UVKsEezpGWOVQ4W9esstng== + - PAdKZPiaac2CvPxbOrsHOw== + UMUwXwT1Z4juyQ/CNTf4mw== - - BAAAAAABCFiEp9s= - - - M0VSOewW3WI= - - - CcHC/g== - - - Xbevr3ut3Z9m1GuXC9SonA== - - - AQAAAAU= - - - BAAAAAABKUXDqxw= - - - Cfk9lw== - - - fMTRbGCp280pnyE/u53zbA== - - - QZBvapTZFvmYktEPsBYLQQ== - - - Cyr1PA== - - - CqL7CA== - - - DYifRdP6aQQ8MLbXZY2f5g== + + STMAjg== UKKK5ol/rKBZchAAOnZjaA== - BAAAAAABLM/7qjk= - - - H08= - - - BAAAAAABKB/OGqI= - - - HNo1DR4XCe4mS1iUMsY6Wg== - - - Rvm2CEw2IC2Mu/ax0A46QQ== + BAAAAAABLF5/HXY= - F5BhENPfVw== + CcHC/g== + + + COwoDFvz7GD8R2K7Lo0rYQ== + + + ANygrItIJ2rcKlyS3Lue07U= + + + CgFBQgAAAUFcf/EVAAAAAg== + + + ESD9YhzIEOwiOT7Nwip+E1KI + + + CeagHQ== + + + OYBKgxEHpW/8XGAGAlvJyMA= + + + D/wZ7+m1Mv8SONSEFcs73w== + + + LdbnCbsA9sOgI4mkUpWXPw== - GN2Hrh9Ltm4= + GN2Hrh9LtnM= Os2rnHWYhryvdOXfgan06A== - ESJJweWBPhoXAaB9c8SHwI4O + ESDu2nhlLPzfx+LYgjlYFP/k - - OhrtngFwotLcm4i+z00SjA== + + EQ== - - BGU= + + BAAAAAABHkSl5AQ= - - CcL+EA== + + BAAAAAABHkSHki0= + + + BAAAAAABCfhiO+s= + + + AygWP2Fgd2T+iLbmAlKT6g== + + + L7tgs/W85vnhV7I7qJ6N/g== + + + BAAAAAABI54PryQ= + + + BAAAAAABKUXDqA8= + + + AQAAAAM= + + + R4af5A== - BAAAAAABJQcQRNU= + BAAAAAABJQcQQN0= - - VOcIuNbTqkpOMUyI108FOg== + + EDQMI0tR4kSntv1O37N10g== - - e0bEFhI16xx9U1yvlI56rA== + + Cfk9oA== + + + Ikdj3zYXXGsC/Afm9Tvx+g== + + + CeFU2w== + + + CskruA== + + + BUrYjru5px1ym4QUN33TOQ== + + + TXxtAQ== + + + Aw== + + + Cyr1PA== + + + U4P1tUoxl/XkztlVHdtdgw== + + + sPNcCSE9Nkg3jy5IN1xe2Q== + + + E5I2y6sIonl4a+TmlXc7fw== + + + Byd5cg== + + + CdWFNw== + + + M0VSOewW3WI= + + + KjoVfZ3by6+pL8fssyfM6A== + + + BAAAAAABBHYoIFs= + + + BAAAAAABHJRKMpA= + + + eR1nUEz8k+nDSBD+bb5uIQ== + + + Ai7cBJYqBE0I9NdyoZfRrw== + + + ESDYXNBhF+dePFjojs7u2vj1 ezdAeCxKH7BFs7vn3byYaw== - - CcHC1w== - - - UV9aaDeNRNtQuXjRYk4Skhg= - - - BAAAAAABK84yjs8= - - - FJl6tXgNpSk= + + ATE0vw== - BAAAAAAA+X/GIyk= + BAAAAAABAPpuVh0= - - DjIvBkX+ECVbB/C3i6w2Gg== + + OE4/d+p3YRzzcSl+kmZ8Mw== - - ESCC9oPNcRdPOox+SjWm9dTX - - - BAAAAAABHhw1vwc= - - - UU3AP1SMxmyhBFq7MRFZmf0= - - - ESDItX4ruWiLnrlz0rk4/bmz + + HNo1DR4XCe4mS1iUMsY6Wg== - BAAAAAABIg08D3U= + BAAAAAABEAuMoRs= - - GN2Hrh9LtnI= - - - BAAAAAABJ/ufQg8= - - - QZCrvQ== - - - BAAAAAABMrS7t2g= - - - D9UltDPl4XVfSSqQOvdiwQ== - - - LTRcDHabRHU= - - - Mq0P6o03FDk0B2bnJ+mYPGo= - - - ESAyW/JX3+hZIp44EAMlXU2b - - - Aw== - - - GN2Hrh9Ltms= + + CWhp diff --git a/browser/base/content/test/general/browser_addKeywordSearch.js b/browser/base/content/test/general/browser_addKeywordSearch.js index 8a8f0b36be08..f38050b43274 100644 --- a/browser/base/content/test/general/browser_addKeywordSearch.js +++ b/browser/base/content/test/general/browser_addKeywordSearch.js @@ -1,67 +1,69 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - var testData = [ - /* baseURI, field name, expected */ - [ 'http://example.com/', 'q', 'http://example.com/?q=%s' ], - [ 'http://example.com/new-path-here/', 'q', 'http://example.com/new-path-here/?q=%s' ], - [ '', 'q', 'http://example.org/browser/browser/base/content/test/general/dummy_page.html?q=%s' ], - // Tests for proper behaviour when called on a form whose action contains a question mark. - [ 'http://example.com/search?oe=utf-8', 'q', 'http://example.com/search?oe=utf-8&q=%s' ], + { desc: "No path", + action: "http://example.com/", + param: "q", + }, + { desc: "With path", + action: "http://example.com/new-path-here/", + param: "q", + }, + { desc: "No action", + action: "", + param: "q", + }, + { desc: "With Query String", + action: "http://example.com/search?oe=utf-8", + param: "q", + }, ]; add_task(function*() { - yield BrowserTestUtils.withNewTab({ - gBrowser, - url: "http://example.org/browser/browser/base/content/test/general/dummy_page.html", - }, function* (browser) { - yield ContentTask.spawn(browser, null, function* () { - let doc = content.document; - let base = doc.createElement("base"); - doc.head.appendChild(base); - }); + const TEST_URL = "http://example.org/browser/browser/base/content/test/general/dummy_page.html"; + let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_URL); - var mm = browser.messageManager; + let count = 0; + for (let method of ["GET", "POST"]) { + for (let {desc, action, param } of testData) { + info(`Running ${method} keyword test '${desc}'`); + let id = `keyword-form-${count++}`; + let contextMenu = document.getElementById("contentAreaContextMenu"); + let contextMenuPromise = + BrowserTestUtils.waitForEvent(contextMenu, "popupshown") + .then(() => gContextMenuContentData.popupNode); - for (let [baseURI, fieldName, expected] of testData) { - let popupShownPromise = BrowserTestUtils.waitForEvent(document.getElementById("contentAreaContextMenu"), - "popupshown"); - - yield ContentTask.spawn(browser, { baseURI, fieldName }, function* (args) { + yield ContentTask.spawn(tab.linkedBrowser, + { action, param, method, id }, function* (args) { let doc = content.document; - - let base = doc.querySelector('head > base'); - base.href = args.baseURI; - let form = doc.createElement("form"); - form.id = "keyword-form"; + form.id = args.id; + form.method = args.method; + form.action = args.action; let element = doc.createElement("input"); element.setAttribute("type", "text"); - element.setAttribute("name", args.fieldName); + element.setAttribute("name", args.param); form.appendChild(element); doc.body.appendChild(form); - - /* Open context menu so chrome can access the element */ - const domWindowUtils = - content.QueryInterface(Components.interfaces.nsIInterfaceRequestor) - .getInterface(Components.interfaces.nsIDOMWindowUtils); - let rect = element.getBoundingClientRect(); - let left = rect.left + rect.width / 2; - let top = rect.top + rect.height / 2; - domWindowUtils.sendMouseEvent("contextmenu", left, top, 2, - 1, 0, false, 0, 0, true); }); - yield popupShownPromise; + yield BrowserTestUtils.synthesizeMouseAtCenter(`#${id} > input`, + { type : "contextmenu", button : 2 }, + tab.linkedBrowser); + let target = yield contextMenuPromise; - let target = gContextMenuContentData.popupNode; - - let urlCheck = new Promise((resolve, reject) => { + yield new Promise(resolve => { + let url = action || tab.linkedBrowser.currentURI.spec; + let mm = tab.linkedBrowser.messageManager; let onMessage = (message) => { mm.removeMessageListener("ContextMenu:SearchFieldBookmarkData:Result", onMessage); - - is(message.data.spec, expected, - `Bookmark spec for search field named ${fieldName} and baseURI ${baseURI} incorrect`); + if (method == "GET") { + ok(message.data.spec.endsWith(`${param}=%s`), + `Check expected url for field named ${param} and action ${action}`); + } else { + is(message.data.spec, url, + `Check expected url for field named ${param} and action ${action}`); + is(message.data.postData, `${param}%3D%25s`, + `Check expected POST data for field named ${param} and action ${action}`); + } resolve(); }; mm.addMessageListener("ContextMenu:SearchFieldBookmarkData:Result", onMessage); @@ -69,14 +71,11 @@ add_task(function*() { mm.sendAsyncMessage("ContextMenu:SearchFieldBookmarkData", null, { target }); }); - yield urlCheck; - - document.getElementById("contentAreaContextMenu").hidePopup(); - - yield ContentTask.spawn(browser, null, function* () { - let doc = content.document; - doc.body.removeChild(doc.getElementById("keyword-form")); - }); + let popupHiddenPromise = BrowserTestUtils.waitForEvent(contextMenu, "popuphidden"); + contextMenu.hidePopup(); + yield popupHiddenPromise; } - }); + } + + yield BrowserTestUtils.removeTab(tab); }); diff --git a/browser/base/content/test/urlbar/browser.ini b/browser/base/content/test/urlbar/browser.ini index ca6d70f401a9..983eb6e4ca2d 100644 --- a/browser/base/content/test/urlbar/browser.ini +++ b/browser/base/content/test/urlbar/browser.ini @@ -7,6 +7,8 @@ support-files = skip-if = (os == "linux" || os == "mac") && debug # bug 970052, bug 970053 [browser_action_keyword.js] skip-if = os == "linux" # Bug 1188154 +support-files = + print_postdata.sjs [browser_action_keyword_override.js] [browser_action_searchengine.js] [browser_action_searchengine_alias.js] diff --git a/browser/base/content/test/urlbar/browser_action_keyword.js b/browser/base/content/test/urlbar/browser_action_keyword.js index bc1d5b084e27..854a7b82f974 100644 --- a/browser/base/content/test/urlbar/browser_action_keyword.js +++ b/browser/base/content/test/urlbar/browser_action_keyword.js @@ -1,8 +1,3 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -var gOnSearchComplete = null; - function* promise_first_result(inputText) { yield promiseAutocompleteResultPopup(inputText); @@ -10,41 +5,47 @@ function* promise_first_result(inputText) { return firstResult; } +const TEST_URL = "http://mochi.test:8888/browser/browser/base/content/test/urlbar/print_postdata.sjs"; -add_task(function*() { - let tab = gBrowser.selectedTab = gBrowser.addTab("about:mozilla"); - let tabs = [tab]; +add_task(function* setup() { + yield PlacesUtils.keywords.insert({ keyword: "get", + url: TEST_URL + "?q=%s" }); + yield PlacesUtils.keywords.insert({ keyword: "post", + url: TEST_URL, + postData: "q=%s" }); registerCleanupFunction(function* () { - for (let tab of tabs) - gBrowser.removeTab(tab); - yield PlacesUtils.bookmarks.remove(bm); + yield PlacesUtils.keywords.remove("get"); + yield PlacesUtils.keywords.remove("post"); + while (gBrowser.tabs.length > 1) { + yield BrowserTestUtils.removeTab(gBrowser.selectedTab); + } }); +}); - yield BrowserTestUtils.browserLoaded(tab.linkedBrowser); +add_task(function* get_keyword() { + let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla"); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, - url: "http://example.com/?q=%s", - title: "test" }); - yield PlacesUtils.keywords.insert({ keyword: "keyword", - url: "http://example.com/?q=%s" }); - - let result = yield promise_first_result("keyword something"); + let result = yield promise_first_result("get something"); isnot(result, null, "Expect a keyword result"); let types = new Set(result.getAttribute("type").split(/\s+/)); Assert.ok(types.has("keyword")); is(result.getAttribute("actiontype"), "keyword", "Expect correct `actiontype` attribute"); - is(result.getAttribute("title"), "example.com", "Expect correct title"); + is(result.getAttribute("title"), "mochi.test:8888", "Expect correct title"); // We need to make a real URI out of this to ensure it's normalised for // comparison. let uri = NetUtil.newURI(result.getAttribute("url")); - is(uri.spec, PlacesUtils.mozActionURI("keyword", {url: "http://example.com/?q=something", input: "keyword something"}), "Expect correct url"); + is(uri.spec, PlacesUtils.mozActionURI("keyword", + { url: TEST_URL + "?q=something", + input: "get something"}), + "Expect correct url"); let titleHbox = result._titleText.parentNode.parentNode; ok(titleHbox.classList.contains("ac-title"), "Title hbox element sanity check"); is_element_visible(titleHbox, "Title element should be visible"); - is(result._titleText.textContent, "example.com: something", "Node should contain the name of the bookmark and query"); + is(result._titleText.textContent, "mochi.test:8888: something", + "Node should contain the name of the bookmark and query"); let urlHbox = result._urlText.parentNode.parentNode; ok(urlHbox.classList.contains("ac-url"), "URL hbox element sanity check"); @@ -60,22 +61,59 @@ add_task(function*() { let tabPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser); EventUtils.synthesizeMouseAtCenter(result, {}); yield tabPromise; - is(tab.linkedBrowser.currentURI.spec, "http://example.com/?q=something", "Tab should have loaded from clicking on result"); + is(tab.linkedBrowser.currentURI.spec, TEST_URL + "?q=something", + "Tab should have loaded from clicking on result"); // Middle-click on the result info("Middle-click on result"); - result = yield promise_first_result("keyword somethingmore"); + result = yield promise_first_result("get somethingmore"); isnot(result, null, "Expect a keyword result"); // We need to make a real URI out of this to ensure it's normalised for // comparison. uri = NetUtil.newURI(result.getAttribute("url")); - is(uri.spec, PlacesUtils.mozActionURI("keyword", {url: "http://example.com/?q=somethingmore", input: "keyword somethingmore"}), "Expect correct url"); + is(uri.spec, PlacesUtils.mozActionURI("keyword", + { url: TEST_URL + "?q=somethingmore", + input: "get somethingmore" }), + "Expect correct url"); tabPromise = BrowserTestUtils.waitForEvent(gBrowser.tabContainer, "TabOpen"); EventUtils.synthesizeMouseAtCenter(result, {button: 1}); let tabOpenEvent = yield tabPromise; let newTab = tabOpenEvent.target; - tabs.push(newTab); yield BrowserTestUtils.browserLoaded(newTab.linkedBrowser); - is(newTab.linkedBrowser.currentURI.spec, "http://example.com/?q=somethingmore", "Tab should have loaded from middle-clicking on result"); + is(newTab.linkedBrowser.currentURI.spec, + TEST_URL + "?q=somethingmore", + "Tab should have loaded from middle-clicking on result"); +}); + + +add_task(function* post_keyword() { + let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla"); + + let result = yield promise_first_result("post something"); + isnot(result, null, "Expect a keyword result"); + + let types = new Set(result.getAttribute("type").split(/\s+/)); + Assert.ok(types.has("keyword")); + is(result.getAttribute("actiontype"), "keyword", "Expect correct `actiontype` attribute"); + is(result.getAttribute("title"), "mochi.test:8888", "Expect correct title"); + + is(result.getAttribute("url"), + PlacesUtils.mozActionURI("keyword", { url: TEST_URL, + input: "post something", + "postData": "q=something" }), + "Expect correct url"); + + // Click on the result + info("Normal click on result"); + let tabPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser); + EventUtils.synthesizeMouseAtCenter(result, {}); + yield tabPromise; + is(tab.linkedBrowser.currentURI.spec, TEST_URL, + "Tab should have loaded from clicking on result"); + + let postData = yield ContentTask.spawn(tab.linkedBrowser, null, function* () { + return content.document.body.textContent; + }); + is(postData, "q=something", "post data was submitted correctly"); }); diff --git a/browser/base/content/test/urlbar/print_postdata.sjs b/browser/base/content/test/urlbar/print_postdata.sjs new file mode 100644 index 000000000000..4175a248055c --- /dev/null +++ b/browser/base/content/test/urlbar/print_postdata.sjs @@ -0,0 +1,22 @@ +const CC = Components.Constructor; +const BinaryInputStream = CC("@mozilla.org/binaryinputstream;1", + "nsIBinaryInputStream", + "setInputStream"); + +function handleRequest(request, response) { + response.setHeader("Content-Type", "text/plain", false); + if (request.method == "GET") { + response.write(request.queryString); + } else { + var body = new BinaryInputStream(request.bodyInputStream); + + var avail; + var bytes = []; + + while ((avail = body.available()) > 0) + Array.prototype.push.apply(bytes, body.readByteArray(avail)); + + var data = String.fromCharCode.apply(null, bytes); + response.bodyOutputStream.write(data, data.length); + } +} diff --git a/browser/base/content/urlbarBindings.xml b/browser/base/content/urlbarBindings.xml index d08f39ec0b01..837892d418c3 100644 --- a/browser/base/content/urlbarBindings.xml +++ b/browser/base/content/urlbarBindings.xml @@ -444,7 +444,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. break; case "keyword": if (action.params.postData) { - postData = getPostDataStream(postData); + postData = getPostDataStream(action.params.postData); } mayInheritPrincipal = true; url = action.params.url; diff --git a/browser/base/content/utilityOverlay.js b/browser/base/content/utilityOverlay.js index 9f1d40d68e30..e0793aa67b0d 100644 --- a/browser/base/content/utilityOverlay.js +++ b/browser/base/content/utilityOverlay.js @@ -373,7 +373,7 @@ function openLinkIn(url, where, params) { } if (aForceAboutBlankViewerInCurrent) { - w.gBrowser.selectedBrowser.createAboutBlankContentViewer(aPrincipal); + aCurrentBrowser.createAboutBlankContentViewer(aPrincipal); } aCurrentBrowser.loadURIWithFlags(url, { diff --git a/browser/components/extensions/ext-browserAction.js b/browser/components/extensions/ext-browserAction.js index 7b9f6a55e937..97c6fd22c556 100644 --- a/browser/components/extensions/ext-browserAction.js +++ b/browser/components/extensions/ext-browserAction.js @@ -471,9 +471,6 @@ extensions.registerSchemaAPI("browserAction", "addon_parent", context => { setIcon: function(details) { let tab = details.tabId !== null ? TabManager.getTab(details.tabId, context) : null; - // Note: the caller in the child process has already normalized - // `details` to not contain an `imageData` property, so the icon can - // safely be normalized here without errors. let icon = IconDetails.normalize(details, extension, context); BrowserAction.for(extension).setProperty(tab, "icon", icon); }, diff --git a/browser/components/extensions/ext-c-browserAction.js b/browser/components/extensions/ext-c-browserAction.js deleted file mode 100644 index fffbb84e180e..000000000000 --- a/browser/components/extensions/ext-c-browserAction.js +++ /dev/null @@ -1,26 +0,0 @@ -/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* vim: set sts=2 sw=2 et tw=80: */ -"use strict"; - -Cu.import("resource://gre/modules/ExtensionUtils.jsm"); -var { - IconDetails, -} = ExtensionUtils; - -extensions.registerSchemaAPI("browserAction", "addon_child", context => { - return { - browserAction: { - setIcon: function(details) { - // This needs to run in the addon process because normalization requires - // the use of . - let normalizedDetails = { - tabId: details.tabId, - path: IconDetails.normalize(details, context.extension, context), - }; - return context.childManager.callParentAsyncFunction("browserAction.setIcon", [ - normalizedDetails, - ]); - }, - }, - }; -}); diff --git a/browser/components/extensions/ext-c-pageAction.js b/browser/components/extensions/ext-c-pageAction.js deleted file mode 100644 index a64e6793609b..000000000000 --- a/browser/components/extensions/ext-c-pageAction.js +++ /dev/null @@ -1,26 +0,0 @@ -/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* vim: set sts=2 sw=2 et tw=80: */ -"use strict"; - -Cu.import("resource://gre/modules/ExtensionUtils.jsm"); -var { - IconDetails, -} = ExtensionUtils; - -extensions.registerSchemaAPI("pageAction", "addon_child", context => { - return { - pageAction: { - setIcon: function(details) { - // This needs to run in the addon process because normalization requires - // the use of . - let normalizedDetails = { - tabId: details.tabId, - path: IconDetails.normalize(details, context.extension, context), - }; - return context.childManager.callParentAsyncFunction("pageAction.setIcon", [ - normalizedDetails, - ]); - }, - }, - }; -}); diff --git a/browser/components/extensions/ext-pageAction.js b/browser/components/extensions/ext-pageAction.js index 9f32a51c090e..153f05d7a870 100644 --- a/browser/components/extensions/ext-pageAction.js +++ b/browser/components/extensions/ext-pageAction.js @@ -260,9 +260,6 @@ extensions.registerSchemaAPI("pageAction", "addon_parent", context => { setIcon(details) { let tab = TabManager.getTab(details.tabId, context); - // Note: the caller in the child process has already normalized - // `details` to not contain an `imageData` property, so the icon can - // safely be normalized here without errors. let icon = IconDetails.normalize(details, extension, context); PageAction.for(extension).setProperty(tab, "icon", icon); }, diff --git a/browser/components/extensions/extensions-browser.manifest b/browser/components/extensions/extensions-browser.manifest index ef1f2cecfe2d..e0fe414cc289 100644 --- a/browser/components/extensions/extensions-browser.manifest +++ b/browser/components/extensions/extensions-browser.manifest @@ -12,9 +12,7 @@ category webextension-scripts utils chrome://browser/content/ext-utils.js category webextension-scripts windows chrome://browser/content/ext-windows.js # scripts that must run in the same process as addon code. -category webextension-scripts-addon browserAction chrome://browser/content/ext-c-browserAction.js category webextension-scripts-addon contextMenus chrome://browser/content/ext-c-contextMenus.js -category webextension-scripts-addon pageAction chrome://browser/content/ext-c-pageAction.js category webextension-scripts-addon tabs chrome://browser/content/ext-c-tabs.js # schemas diff --git a/browser/components/extensions/jar.mn b/browser/components/extensions/jar.mn index ef8a2a967b80..943f91fd4292 100644 --- a/browser/components/extensions/jar.mn +++ b/browser/components/extensions/jar.mn @@ -23,7 +23,5 @@ browser.jar: content/browser/ext-tabs.js content/browser/ext-utils.js content/browser/ext-windows.js - content/browser/ext-c-browserAction.js content/browser/ext-c-contextMenus.js - content/browser/ext-c-pageAction.js content/browser/ext-c-tabs.js diff --git a/browser/components/extensions/schemas/browser_action.json b/browser/components/extensions/schemas/browser_action.json index 180f26cce770..1a7da956a13b 100644 --- a/browser/components/extensions/schemas/browser_action.json +++ b/browser/components/extensions/schemas/browser_action.json @@ -60,6 +60,7 @@ "type": "object", "isInstanceOf": "ImageData", "additionalProperties": { "type": "any" }, + "postprocess": "convertImageDataToURL", "description": "Pixel data for an image. Must be an ImageData object (for example, from a canvas element)." } ], diff --git a/browser/components/extensions/schemas/page_action.json b/browser/components/extensions/schemas/page_action.json index c17f29687f4b..f4f9ee8dbef3 100644 --- a/browser/components/extensions/schemas/page_action.json +++ b/browser/components/extensions/schemas/page_action.json @@ -49,6 +49,7 @@ "type": "object", "isInstanceOf": "ImageData", "additionalProperties": { "type": "any" }, + "postprocess": "convertImageDataToURL", "description": "Pixel data for an image. Must be an ImageData object (for example, from a canvas element)." } ], diff --git a/browser/components/nsBrowserGlue.js b/browser/components/nsBrowserGlue.js index 13b7ca1162e2..5376d55e77c2 100644 --- a/browser/components/nsBrowserGlue.js +++ b/browser/components/nsBrowserGlue.js @@ -648,12 +648,6 @@ BrowserGlue.prototype = { this._sanitizer.onStartup(); // check if we're in safe mode if (Services.appinfo.inSafeMode) { - // See https://bugzilla.mozilla.org/show_bug.cgi?id=1231112#c7 . We need to - // register the observer early if we have to migrate tab groups - let currentUIVersion = 0; - try { - currentUIVersion = Services.prefs.getIntPref("browser.migration.version"); - } catch (ex) {} Services.ww.openWindow(null, "chrome://browser/content/safeMode.xul", "_blank", "chrome,centerscreen,modal,resizable=no", null); } diff --git a/browser/components/places/content/places.js b/browser/components/places/content/places.js index dbe7df82fa4e..aa43b20e6880 100644 --- a/browser/components/places/content/places.js +++ b/browser/components/places/content/places.js @@ -643,23 +643,6 @@ var PlacesOrganizer = { if (selectedNode && !PlacesUtils.nodeIsSeparator(selectedNode)) { detailsDeck.selectedIndex = 1; - // Using the concrete itemId is arguably wrong. The bookmarks API - // does allow setting properties for folder shortcuts as well, but since - // the UI does not distinct between the couple, we better just show - // the concrete item properties for shortcuts to root nodes. - let concreteId = PlacesUtils.getConcreteItemId(selectedNode); - var isRootItem = concreteId != -1 && PlacesUtils.isRootItem(concreteId); - var readOnly = isRootItem || - selectedNode.parent.itemId == PlacesUIUtils.leftPaneFolderId; - var useConcreteId = isRootItem || - PlacesUtils.nodeIsTagQuery(selectedNode); - var itemId = -1; - if (concreteId != -1 && useConcreteId) - itemId = concreteId; - else if (selectedNode.itemId != -1) - itemId = selectedNode.itemId; - else - itemId = PlacesUtils._uri(selectedNode.uri); gEditItemOverlay.initPanel({ node: selectedNode , hiddenRows: ["folderPicker"] }); @@ -1059,9 +1042,6 @@ var ViewMenu = { var popup = event.target; var pivot = this._clean(popup, startID, endID); - // If no column is "sort-active", the "Unsorted" item needs to be checked, - // so track whether or not we find a column that is sort-active. - var isSorted = false; var content = document.getElementById("placeContent"); var columns = content.columns; for (var i = 0; i < columns.count; ++i) { @@ -1087,7 +1067,6 @@ var ViewMenu = { // This column is the sort key. Its item is checked. if (column.getAttribute("sortDirection") != "") { menuitem.setAttribute("checked", "true"); - isSorted = true; } } else if (type == "checkbox") { diff --git a/browser/components/preferences/containers.js b/browser/components/preferences/containers.js index 8502f3c36426..6ca5853f7f82 100644 --- a/browser/components/preferences/containers.js +++ b/browser/components/preferences/containers.js @@ -147,7 +147,6 @@ let gContainersManager = { let icon = document.getElementById("icon").value; let color = document.getElementById("color").value; let name = document.getElementById("name").value; - let userContextId = false; if (this.icons.indexOf(icon) == -1) { throw "Internal error. The icon value doesn't match."; diff --git a/browser/modules/DirectoryLinksProvider.jsm b/browser/modules/DirectoryLinksProvider.jsm index 34caa71a6ed0..117564099d94 100644 --- a/browser/modules/DirectoryLinksProvider.jsm +++ b/browser/modules/DirectoryLinksProvider.jsm @@ -526,7 +526,6 @@ var DirectoryLinksProvider = { * @return download promise */ reportSitesAction: function DirectoryLinksProvider_reportSitesAction(sites, action, triggeringSiteIndex) { - let pastImpressions; // Check if the suggested tile was shown if (action == "view") { sites.slice(0, triggeringSiteIndex + 1).filter(s => s).forEach(site => { @@ -544,13 +543,6 @@ var DirectoryLinksProvider = { // suggested tile has targetedSite, or frecent_sites if it was pinned let {frecent_sites, targetedSite, url} = sites[triggeringSiteIndex].link; if (frecent_sites || targetedSite) { - // skip past_impressions for "unpin" to avoid chance of tracking - if (this._frequencyCaps[url] && action != "unpin") { - pastImpressions = { - total: this._frequencyCaps[url].totalViews, - daily: this._frequencyCaps[url].dailyViews - }; - } this._setFrequencyCapClick(url); } } diff --git a/config/external/nss/nss.symbols b/config/external/nss/nss.symbols index 1336c75d866b..cad42c331694 100644 --- a/config/external/nss/nss.symbols +++ b/config/external/nss/nss.symbols @@ -692,6 +692,7 @@ SSL_SetSRTPCiphers SSL_SetStapledOCSPResponses SSL_SetURL SSL_ShutdownServerSessionIDCache +SSL_SignatureSchemePrefSet SSL_SNISocketConfigHook SSL_VersionRangeGet SSL_VersionRangeGetDefault diff --git a/db/sqlite3/src/moz.build b/db/sqlite3/src/moz.build index 2bf1b5bd6e3a..1c26db9c43a0 100644 --- a/db/sqlite3/src/moz.build +++ b/db/sqlite3/src/moz.build @@ -65,6 +65,7 @@ if CONFIG['MOZ_THUNDERBIRD'] or CONFIG['MOZ_SUITE']: # Turn on SQLite's assertions in debug builds. if CONFIG['MOZ_DEBUG']: DEFINES['SQLITE_DEBUG'] = 1 + DEFINES['SQLITE_ENABLE_API_ARMOR'] = True if CONFIG['OS_TARGET'] == 'Android': # default to user readable only to fit Android security model diff --git a/devtools/client/aboutdebugging/initializer.js b/devtools/client/aboutdebugging/initializer.js index fb193ad18bed..f1b91f14d13b 100644 --- a/devtools/client/aboutdebugging/initializer.js +++ b/devtools/client/aboutdebugging/initializer.js @@ -24,8 +24,8 @@ const { require } = BrowserLoader({ window }); -const { createFactory, render, unmountComponentAtNode } = - require("devtools/client/shared/vendor/react"); +const { createFactory } = require("devtools/client/shared/vendor/react"); +const { render, unmountComponentAtNode } = require("devtools/client/shared/vendor/react-dom"); const AboutDebuggingApp = createFactory(require("./components/aboutdebugging")); diff --git a/devtools/client/aboutdebugging/test/browser_addons_reload.js b/devtools/client/aboutdebugging/test/browser_addons_reload.js index a9c81dfd02fa..506495a60cf3 100644 --- a/devtools/client/aboutdebugging/test/browser_addons_reload.js +++ b/devtools/client/aboutdebugging/test/browser_addons_reload.js @@ -170,8 +170,8 @@ add_task(function* reloadButtonRefreshesMetadata() { // Wait for the add-on list to be updated with the reloaded name. const onReInstall = promiseAddonEvent("onInstalled"); - const onAddonReloaded = waitForMutation(getAddonList(document), - { childList: true, subtree: true }); + const onAddonReloaded = waitForContentMutation(getAddonList(document)); + const reloadButton = getReloadButton(document, manifestBase.name); reloadButton.click(); diff --git a/devtools/client/aboutdebugging/test/browser_tabs.js b/devtools/client/aboutdebugging/test/browser_tabs.js index c500bbc7f82c..8cdeef17d6bf 100644 --- a/devtools/client/aboutdebugging/test/browser_tabs.js +++ b/devtools/client/aboutdebugging/test/browser_tabs.js @@ -39,7 +39,7 @@ add_task(function* () { // Then wait for title update, but on slow test runner, the title may already // be set to the expected value if (newTabTarget.textContent != "foo") { - yield waitForMutation(newTabTarget, { childList: true }); + yield waitForContentMutation(newTabTarget); } // Check that the new tab appears in the UI diff --git a/devtools/client/aboutdebugging/test/head.js b/devtools/client/aboutdebugging/test/head.js index d52548538e7f..001d36e34961 100644 --- a/devtools/client/aboutdebugging/test/head.js +++ b/devtools/client/aboutdebugging/test/head.js @@ -3,7 +3,7 @@ /* eslint-env browser */ /* exported openAboutDebugging, changeAboutDebuggingHash, closeAboutDebugging, - installAddon, uninstallAddon, waitForMutation, assertHasTarget, + installAddon, uninstallAddon, waitForMutation, waitForContentMutation, assertHasTarget, getServiceWorkerList, getTabList, openPanel, waitForInitialAddonList, waitForServiceWorkerRegistered, unregisterServiceWorker, waitForDelayedStartupFinished, setupTestAboutDebuggingWebExtension, @@ -229,6 +229,22 @@ function waitForMutation(target, mutationOptions) { }); } +/** + * Returns a promise that will resolve after receiving a mutation in the subtree of the + * provided target. Depending on the current React implementation, a text change might be + * observable as a childList mutation or a characterData mutation. + * + * @param {Node} target + * @return {Promise} + */ +function waitForContentMutation(target) { + return waitForMutation(target, { + characterData: true, + childList: true, + subtree: true + }); +} + /** * Checks if an about:debugging TargetList element contains a Target element * corresponding to the specified name. diff --git a/devtools/client/framework/selection.js b/devtools/client/framework/selection.js index a2d47dc5aa91..8125f85088d5 100644 --- a/devtools/client/framework/selection.js +++ b/devtools/client/framework/selection.js @@ -42,7 +42,6 @@ var EventEmitter = require("devtools/shared/event-emitter"); * * Events: * "new-node-front" when the inner node changed - * "before-new-node-front" when the inner node is set to change * "attribute-changed" when an attribute is changed * "detached-front" when the node (or one of its parents) is removed from * the document @@ -124,7 +123,6 @@ Selection.prototype = { value = parentNode; } - this.emit("before-new-node-front", value, reason); this._nodeFront = value; this.emit("new-node-front", value, this.reason); }, diff --git a/devtools/client/framework/test/browser_toolbox_remoteness_change.js b/devtools/client/framework/test/browser_toolbox_remoteness_change.js index 1303d5c87044..b30d633faaa4 100644 --- a/devtools/client/framework/test/browser_toolbox_remoteness_change.js +++ b/devtools/client/framework/test/browser_toolbox_remoteness_change.js @@ -38,5 +38,6 @@ add_task(function* () { let console = yield toolbox.selectTool("webconsole"); let { jsterm } = console.hud; let url = yield jsterm.execute("document.location.href"); - is(url.textContent, URL_2, "The console inspects the second document"); + // Uses includes as the old console frontend prints a timestamp + ok(url.textContent.includes(URL_2), "The console inspects the second document"); }); diff --git a/devtools/client/inspector/inspector.js b/devtools/client/inspector/inspector.js index 6060500ee28f..63709d949e9a 100644 --- a/devtools/client/inspector/inspector.js +++ b/devtools/client/inspector/inspector.js @@ -103,7 +103,6 @@ function Inspector(toolbox) { this.onTextBoxContextMenu = this.onTextBoxContextMenu.bind(this); this._updateSearchResultsLabel = this._updateSearchResultsLabel.bind(this); this.onNewSelection = this.onNewSelection.bind(this); - this.onBeforeNewSelection = this.onBeforeNewSelection.bind(this); this.onDetached = this.onDetached.bind(this); this.onPaneToggleButtonClicked = this.onPaneToggleButtonClicked.bind(this); this._onMarkupFrameLoad = this._onMarkupFrameLoad.bind(this); @@ -223,7 +222,6 @@ Inspector.prototype = { this.walker.on("new-root", this.onNewRoot); this.selection.on("new-node-front", this.onNewSelection); - this.selection.on("before-new-node-front", this.onBeforeNewSelection); this.selection.on("detached-front", this.onDetached); if (this.target.isLocalTab) { @@ -855,16 +853,6 @@ Inspector.prototype = { this._updateProgress = null; }, - /** - * When a new node is selected, before the selection has changed. - */ - onBeforeNewSelection: function (event, node) { - if (this.breadcrumbs.indexOf(node) == -1) { - // only clear locks if we'd have to update breadcrumbs - this.clearPseudoClasses(); - } - }, - /** * When a node is deleted, select its parent node or the defaultNode if no * parent is found (may happen when deleting an iframe inside which the @@ -928,7 +916,6 @@ Inspector.prototype = { this.teardownToolbar(); this.breadcrumbs.destroy(); this.selection.off("new-node-front", this.onNewSelection); - this.selection.off("before-new-node-front", this.onBeforeNewSelection); this.selection.off("detached-front", this.onDetached); let markupDestroyer = this._destroyMarkup(); this.panelWin.inspector = null; @@ -1557,16 +1544,6 @@ Inspector.prototype = { }); }, - /** - * Clear any pseudo-class locks applied to the current hierarchy. - */ - clearPseudoClasses: function () { - if (!this.walker) { - return promise.resolve(); - } - return this.walker.clearPseudoClassLocks().catch(this._handleRejectionIfNotDestroyed); - }, - /** * Edit the outerHTML of the selected Node. */ diff --git a/devtools/client/inspector/test/browser_inspector_pseudoclass-lock.js b/devtools/client/inspector/test/browser_inspector_pseudoclass-lock.js index 17b6b13eba1b..bd98bd58f4ba 100644 --- a/devtools/client/inspector/test/browser_inspector_pseudoclass-lock.js +++ b/devtools/client/inspector/test/browser_inspector_pseudoclass-lock.js @@ -31,15 +31,29 @@ add_task(function* () { yield selectNode("#div-1", inspector); yield togglePseudoClass(inspector); - yield assertPseudoAddedToNode(inspector, testActor, view); + yield assertPseudoAddedToNode(inspector, testActor, view, "#div-1"); yield togglePseudoClass(inspector); - yield assertPseudoRemovedFromNode(testActor); - yield assertPseudoRemovedFromView(inspector, testActor, view); + yield assertPseudoRemovedFromNode(testActor, "#div-1"); + yield assertPseudoRemovedFromView(inspector, testActor, view, "#div-1"); yield togglePseudoClass(inspector); yield testNavigate(inspector, testActor, view); + info("Toggle pseudo on the parent and ensure everything is toggled off"); + yield selectNode("#parent-div", inspector); + yield togglePseudoClass(inspector); + yield assertPseudoRemovedFromNode(testActor, "#div-1"); + yield assertPseudoRemovedFromView(inspector, testActor, view, "#div-1"); + + yield togglePseudoClass(inspector); + info("Assert pseudo is dismissed when toggling it on a sibling node"); + yield selectNode("#div-2", inspector); + yield togglePseudoClass(inspector); + yield assertPseudoAddedToNode(inspector, testActor, view, "#div-2"); + let hasLock = yield testActor.hasPseudoClassLock("#div-1", PSEUDO); + ok(!hasLock, "pseudo-class lock has been removed for the previous locked node"); + info("Destroying the toolbox"); let tab = toolbox.target.tab; yield toolbox.destroy(); @@ -47,7 +61,8 @@ add_task(function* () { // As the toolbox get detroyed, we need to fetch a new test-actor testActor = yield getTestActorWithoutToolbox(tab); - yield assertPseudoRemovedFromNode(testActor); + yield assertPseudoRemovedFromNode(testActor, "#div-1"); + yield assertPseudoRemovedFromNode(testActor, "#div-2"); }); function* togglePseudoClass(inspector) { @@ -75,17 +90,14 @@ function* testNavigate(inspector, testActor, ruleview) { ok((yield testActor.hasPseudoClassLock("#div-1", PSEUDO)), "pseudo-class lock is still applied after inspecting ancestor"); - let onPseudo = inspector.selection.once("pseudoclass"); yield selectNode("#div-2", inspector); - yield onPseudo; - info("Make sure the pseudoclass is removed after navigating to a " + + info("Make sure the pseudoclass is still set after navigating to a " + "non-hierarchy node"); - ok(!(yield testActor.hasPseudoClassLock("#div-1", PSEUDO)), - "pseudo-class lock is removed after inspecting sibling node"); + ok(yield testActor.hasPseudoClassLock("#div-1", PSEUDO), + "pseudo-class lock is still on after inspecting sibling node"); yield selectNode("#div-1", inspector); - yield togglePseudoClass(inspector); } function* showPickerOn(selector, inspector) { @@ -93,10 +105,10 @@ function* showPickerOn(selector, inspector) { yield inspector.highlighter.showBoxModel(nodeFront); } -function* assertPseudoAddedToNode(inspector, testActor, ruleview) { - info("Make sure the pseudoclass lock is applied to #div-1 and its ancestors"); +function* assertPseudoAddedToNode(inspector, testActor, ruleview, selector) { + info("Make sure the pseudoclass lock is applied to " + selector + " and its ancestors"); - let hasLock = yield testActor.hasPseudoClassLock("#div-1", PSEUDO); + let hasLock = yield testActor.hasPseudoClassLock(selector, PSEUDO); ok(hasLock, "pseudo-class lock has been applied"); hasLock = yield testActor.hasPseudoClassLock("#parent-div", PSEUDO); ok(hasLock, "pseudo-class lock has been applied"); @@ -111,8 +123,8 @@ function* assertPseudoAddedToNode(inspector, testActor, ruleview) { is(rules[1]._ruleEditor.rule.selectorText, "div:hover", "rule view is showing " + PSEUDO + " rule"); - info("Show the highlighter on #div-1"); - yield showPickerOn("#div-1", inspector); + info("Show the highlighter on " + selector); + yield showPickerOn(selector, inspector); info("Check that the infobar selector contains the pseudo-class"); let value = yield testActor.getHighlighterNodeTextContent( @@ -121,11 +133,11 @@ function* assertPseudoAddedToNode(inspector, testActor, ruleview) { yield inspector.highlighter.hideBoxModel(); } -function* assertPseudoRemovedFromNode(testActor) { +function* assertPseudoRemovedFromNode(testActor, selector) { info("Make sure the pseudoclass lock is removed from #div-1 and its " + "ancestors"); - let hasLock = yield testActor.hasPseudoClassLock("#div-1", PSEUDO); + let hasLock = yield testActor.hasPseudoClassLock(selector, PSEUDO); ok(!hasLock, "pseudo-class lock has been removed"); hasLock = yield testActor.hasPseudoClassLock("#parent-div", PSEUDO); ok(!hasLock, "pseudo-class lock has been removed"); @@ -133,13 +145,13 @@ function* assertPseudoRemovedFromNode(testActor) { ok(!hasLock, "pseudo-class lock has been removed"); } -function* assertPseudoRemovedFromView(inspector, testActor, ruleview) { +function* assertPseudoRemovedFromView(inspector, testActor, ruleview, selector) { info("Check that the ruleview no longer contains the pseudo-class rule"); let rules = ruleview.element.querySelectorAll( ".ruleview-rule.theme-separator"); is(rules.length, 2, "rule view is showing 2 rules after removing lock"); - yield showPickerOn("#div-1", inspector); + yield showPickerOn(selector, inspector); let value = yield testActor.getHighlighterNodeTextContent( "box-model-infobar-pseudo-classes"); diff --git a/devtools/client/shared/shim/Services.js b/devtools/client/shared/shim/Services.js index c30fceb3c671..97ea514338ed 100644 --- a/devtools/client/shared/shim/Services.js +++ b/devtools/client/shared/shim/Services.js @@ -584,6 +584,22 @@ const Services = { } }, }, + + /** + * An implementation of Services.wm that provides a shim for + * getMostRecentWindow. + */ + wm: { + getMostRecentWindow: function () { + // Having the returned object implement openUILinkIn is + // sufficient for our purposes. + return { + openUILinkIn: function (url) { + window.open(url, "_blank"); + }, + }; + }, + }, }; /** diff --git a/devtools/client/shared/shim/test/file_service_wm.html b/devtools/client/shared/shim/test/file_service_wm.html new file mode 100644 index 000000000000..24753e7103dd --- /dev/null +++ b/devtools/client/shared/shim/test/file_service_wm.html @@ -0,0 +1,20 @@ + + + + + + + + + + diff --git a/devtools/client/shared/shim/test/mochitest.ini b/devtools/client/shared/shim/test/mochitest.ini index aa804d696b96..4ba5cd6c155d 100644 --- a/devtools/client/shared/shim/test/mochitest.ini +++ b/devtools/client/shared/shim/test/mochitest.ini @@ -1,8 +1,10 @@ [DEFAULT] support-files = + file_service_wm.html prefs-wrapper.js [test_service_appinfo.html] [test_service_focus.html] [test_service_prefs.html] [test_service_prefs_defaults.html] +[test_service_wm.html] diff --git a/devtools/client/shared/shim/test/test_service_wm.html b/devtools/client/shared/shim/test/test_service_wm.html new file mode 100644 index 000000000000..4db602f7e454 --- /dev/null +++ b/devtools/client/shared/shim/test/test_service_wm.html @@ -0,0 +1,36 @@ + + + + + Test for Bug 1310279 - replace Services.wm + + + + + + + + + + + + diff --git a/devtools/client/webconsole/new-console-output/test/fixtures/moz.build b/devtools/client/webconsole/new-console-output/test/fixtures/moz.build index d9f8deb0c40a..ff41d6c80557 100644 --- a/devtools/client/webconsole/new-console-output/test/fixtures/moz.build +++ b/devtools/client/webconsole/new-console-output/test/fixtures/moz.build @@ -4,5 +4,6 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. DIRS += [ - 'stub-generators' + 'stub-generators', + 'stubs' ] diff --git a/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/head.js b/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/head.js index 613055b7b82c..be988b9d8e36 100644 --- a/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/head.js +++ b/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/head.js @@ -18,18 +18,120 @@ registerCleanupFunction(() => { }); const { prepareMessage } = require("devtools/client/webconsole/new-console-output/utils/messages"); +const { stubPackets } = require("devtools/client/webconsole/new-console-output/test/fixtures/stubs/index.js"); const BASE_PATH = "../../../../devtools/client/webconsole/new-console-output/test/fixtures"; const TEMP_FILE_PATH = OS.Path.join(`${BASE_PATH}/stub-generators`, "test-tempfile.js"); +let cachedPackets = {}; + +function getCleanedPacket(key, packet) { + if(Object.keys(cachedPackets).includes(key)) { + return cachedPackets[key]; + } + + // Strip escaped characters. + let safeKey = key + .replace(/\\n/g, "\n") + .replace(/\\r/g, "\r") + .replace(/\\\"/g, `\"`) + .replace(/\\\'/g, `\'`); + + // If the stub already exist, we want to ignore irrelevant properties + // (actor, timeStamp, timer, ...) that might changed and "pollute" + // the diff resulting from this stub generation. + let res; + if(stubPackets.has(safeKey)) { + + let existingPacket = stubPackets.get(safeKey); + res = Object.assign({}, packet, { + from: existingPacket.from + }); + + // Clean root timestamp. + if(res.timestamp) { + res.timestamp = existingPacket.timestamp; + } + + if (res.message) { + // Clean timeStamp on the message prop. + res.message.timeStamp = existingPacket.message.timeStamp; + if (res.message.timer) { + // Clean timer properties on the message. + // Those properties are found on console.time and console.timeEnd calls, + // and those time can vary, which is why we need to clean them. + if (res.message.timer.started) { + res.message.timer.started = existingPacket.message.timer.started; + } + if (res.message.timer.duration) { + res.message.timer.duration = existingPacket.message.timer.duration; + } + } + + if(Array.isArray(res.message.arguments)) { + // Clean actor ids on each message.arguments item. + res.message.arguments.forEach((argument, i) => { + if (argument && argument.actor) { + argument.actor = existingPacket.message.arguments[i].actor; + } + }); + } + } + + if (res.result) { + // Clean actor ids on evaluation result messages. + res.result.actor = existingPacket.result.actor; + if (res.result.preview) { + if(res.result.preview.timestamp) { + // Clean timestamp there too. + res.result.preview.timestamp = existingPacket.result.preview.timestamp; + } + } + } + + if (res.exception) { + // Clean actor ids on exception messages. + res.exception.actor = existingPacket.exception.actor; + if (res.exception.preview) { + if(res.exception.preview.timestamp) { + // Clean timestamp there too. + res.exception.preview.timestamp = existingPacket.exception.preview.timestamp; + } + } + } + + if (res.eventActor) { + // Clean actor ids, timeStamp and startedDateTime on network messages. + res.eventActor.actor = existingPacket.eventActor.actor; + res.eventActor.startedDateTime = existingPacket.eventActor.startedDateTime; + res.eventActor.timeStamp = existingPacket.eventActor.timeStamp; + } + + if (res.pageError) { + // Clean timeStamp on pageError messages. + res.pageError.timeStamp = existingPacket.pageError.timeStamp; + } + + } else { + res = packet; + } + + cachedPackets[key] = res; + return res; +} + function formatPacket(key, packet) { return ` -stubPackets.set("${key}", ${JSON.stringify(packet, null, "\t")}); +stubPackets.set("${key}", ${JSON.stringify(getCleanedPacket(key, packet), null, "\t")}); `; } -function formatStub(key, message) { - let prepared = prepareMessage(message, {getNextId: () => "1"}); +function formatStub(key, packet) { + let prepared = prepareMessage( + getCleanedPacket(key, packet), + {getNextId: () => "1"} + ); + return ` stubPreparedMessages.set("${key}", new ConsoleMessage(${JSON.stringify(prepared, null, "\t")})); `; diff --git a/devtools/client/webconsole/new-console-output/test/fixtures/stubs/moz.build b/devtools/client/webconsole/new-console-output/test/fixtures/stubs/moz.build new file mode 100644 index 000000000000..88e9c46dfaa4 --- /dev/null +++ b/devtools/client/webconsole/new-console-output/test/fixtures/stubs/moz.build @@ -0,0 +1,11 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +DevToolsModules( + 'consoleApi.js', + 'evaluationResult.js', + 'index.js', + 'networkEvent.js', + 'pageError.js', +) diff --git a/devtools/server/actors/inspector.js b/devtools/server/actors/inspector.js index ca881bd27c9c..20a227a40dd0 100644 --- a/devtools/server/actors/inspector.js +++ b/devtools/server/actors/inspector.js @@ -1754,6 +1754,14 @@ var WalkerActor = protocol.ActorClassWithSpec(walkerSpec, { return; } + // There can be only one node locked per pseudo, so dismiss all existing + // ones + for (let locked of this._activePseudoClassLocks) { + if (DOMUtils.hasPseudoClassLock(locked.rawNode, pseudo)) { + this._removePseudoClassLock(locked, pseudo); + } + } + this._addPseudoClassLock(node, pseudo); if (!options.parents) { @@ -1838,6 +1846,15 @@ var WalkerActor = protocol.ActorClassWithSpec(walkerSpec, { this._removePseudoClassLock(node, pseudo); + // Remove pseudo class for children as we don't want to allow + // turning it on for some childs without setting it on some parents + for (let locked of this._activePseudoClassLocks) { + if (node.rawNode.contains(locked.rawNode) && + DOMUtils.hasPseudoClassLock(locked.rawNode, pseudo)) { + this._removePseudoClassLock(locked, pseudo); + } + } + if (!options.parents) { return; } diff --git a/dom/animation/KeyframeEffect.cpp b/dom/animation/KeyframeEffect.cpp index e88d7fa110ab..decbf63050c0 100644 --- a/dom/animation/KeyframeEffect.cpp +++ b/dom/animation/KeyframeEffect.cpp @@ -46,6 +46,14 @@ KeyframeEffect::Constructor( aOptions, aRv); } +/* static */ already_AddRefed +KeyframeEffect::Constructor(const GlobalObject& aGlobal, + KeyframeEffectReadOnly& aSource, + ErrorResult& aRv) +{ + return ConstructKeyframeEffect(aGlobal, aSource, aRv); +} + /* static */ already_AddRefed KeyframeEffect::Constructor( const GlobalObject& aGlobal, diff --git a/dom/animation/KeyframeEffect.h b/dom/animation/KeyframeEffect.h index 19055bb512d9..3c704a82025c 100644 --- a/dom/animation/KeyframeEffect.h +++ b/dom/animation/KeyframeEffect.h @@ -47,6 +47,11 @@ public: const UnrestrictedDoubleOrKeyframeEffectOptions& aOptions, ErrorResult& aRv); + static already_AddRefed + Constructor(const GlobalObject& aGlobal, + KeyframeEffectReadOnly& aSource, + ErrorResult& aRv); + // Variant of Constructor that accepts a KeyframeAnimationOptions object // for use with for Animatable.animate. // Not exposed to content. diff --git a/dom/animation/KeyframeEffectReadOnly.cpp b/dom/animation/KeyframeEffectReadOnly.cpp index 25f2b20a7c31..639e0b2b0dc3 100644 --- a/dom/animation/KeyframeEffectReadOnly.cpp +++ b/dom/animation/KeyframeEffectReadOnly.cpp @@ -273,40 +273,7 @@ KeyframeEffectReadOnly::UpdateProperties(nsStyleContext* aStyleContext) { MOZ_ASSERT(aStyleContext); - nsTArray properties; - if (mTarget) { - // When GetComputedKeyframeValues or GetAnimationPropertiesFromKeyframes - // calculate computed values from |mKeyframes|, they could possibly - // trigger a subsequent restyle in which we rebuild animations. If that - // happens we could find that |mKeyframes| is overwritten while it is - // being iterated over. Normally that shouldn't happen but just in case we - // make a copy of |mKeyframes| first and iterate over that instead. - auto keyframesCopy(mKeyframes); - - nsTArray computedValues = - KeyframeUtils::GetComputedKeyframeValues(keyframesCopy, - mTarget->mElement, - aStyleContext); - - if (mEffectOptions.mSpacingMode == SpacingMode::paced) { - KeyframeUtils::ApplySpacing(keyframesCopy, SpacingMode::paced, - mEffectOptions.mPacedProperty, - computedValues, aStyleContext); - } - - properties = - KeyframeUtils::GetAnimationPropertiesFromKeyframes(keyframesCopy, - computedValues, - aStyleContext); - -#ifdef DEBUG - MOZ_ASSERT(SpecifiedKeyframeArraysAreEqual(mKeyframes, keyframesCopy), - "Apart from the computed offset members, the keyframes array" - " should not be modified"); -#endif - - mKeyframes.SwapElements(keyframesCopy); - } + nsTArray properties = BuildProperties(aStyleContext); if (mProperties == properties) { return; @@ -613,6 +580,87 @@ KeyframeEffectReadOnly::ConstructKeyframeEffect( return effect.forget(); } +template +/* static */ already_AddRefed +KeyframeEffectReadOnly::ConstructKeyframeEffect(const GlobalObject& aGlobal, + KeyframeEffectReadOnly& aSource, + ErrorResult& aRv) +{ + nsIDocument* doc = AnimationUtils::GetCurrentRealmDocument(aGlobal.Context()); + if (!doc) { + aRv.Throw(NS_ERROR_FAILURE); + return nullptr; + } + + // Create a new KeyframeEffectReadOnly object with aSource's target, + // iteration composite operation, composite operation, and spacing mode. + // The constructor creates a new AnimationEffect(ReadOnly) object by + // aSource's TimingParams. + // Note: we don't need to re-throw exceptions since the value specified on + // aSource's timing object can be assumed valid. + RefPtr effect = + new KeyframeEffectType(doc, + aSource.mTarget, + aSource.SpecifiedTiming(), + aSource.mEffectOptions); + // Copy cumulative change hint. mCumulativeChangeHint should be the same as + // the source one because both of targets are the same. + effect->mCumulativeChangeHint = aSource.mCumulativeChangeHint; + + // Copy aSource's keyframes and animation properties. + // Note: We don't call SetKeyframes directly, which might revise the + // computed offsets and rebuild the animation properties. + // FIXME: Bug 1314537: We have to make sure SharedKeyframeList is handled + // properly. + effect->mKeyframes = aSource.mKeyframes; + effect->mProperties = aSource.mProperties; + return effect.forget(); +} + +nsTArray +KeyframeEffectReadOnly::BuildProperties(nsStyleContext* aStyleContext) +{ + MOZ_ASSERT(aStyleContext); + + nsTArray result; + // If mTarget is null, return an empty property array. + if (!mTarget) { + return result; + } + + // When GetComputedKeyframeValues or GetAnimationPropertiesFromKeyframes + // calculate computed values from |mKeyframes|, they could possibly + // trigger a subsequent restyle in which we rebuild animations. If that + // happens we could find that |mKeyframes| is overwritten while it is + // being iterated over. Normally that shouldn't happen but just in case we + // make a copy of |mKeyframes| first and iterate over that instead. + auto keyframesCopy(mKeyframes); + + nsTArray computedValues = + KeyframeUtils::GetComputedKeyframeValues(keyframesCopy, + mTarget->mElement, + aStyleContext); + + if (mEffectOptions.mSpacingMode == SpacingMode::paced) { + KeyframeUtils::ApplySpacing(keyframesCopy, SpacingMode::paced, + mEffectOptions.mPacedProperty, + computedValues, aStyleContext); + } + + result = KeyframeUtils::GetAnimationPropertiesFromKeyframes(keyframesCopy, + computedValues, + aStyleContext); + +#ifdef DEBUG + MOZ_ASSERT(SpecifiedKeyframeArraysAreEqual(mKeyframes, keyframesCopy), + "Apart from the computed offset members, the keyframes array" + " should not be modified"); +#endif + + mKeyframes.SwapElements(keyframesCopy); + return result; +} + void KeyframeEffectReadOnly::UpdateTargetRegistration() { @@ -716,6 +764,14 @@ KeyframeEffectReadOnly::Constructor( aRv); } +/* static */ already_AddRefed +KeyframeEffectReadOnly::Constructor(const GlobalObject& aGlobal, + KeyframeEffectReadOnly& aSource, + ErrorResult& aRv) +{ + return ConstructKeyframeEffect(aGlobal, aSource, aRv); +} + void KeyframeEffectReadOnly::GetTarget( Nullable& aRv) const diff --git a/dom/animation/KeyframeEffectReadOnly.h b/dom/animation/KeyframeEffectReadOnly.h index 3f6900a95671..889159b38743 100644 --- a/dom/animation/KeyframeEffectReadOnly.h +++ b/dom/animation/KeyframeEffectReadOnly.h @@ -121,14 +121,16 @@ struct AnimationPropertySegment StyleAnimationValue mFromValue, mToValue; Maybe mTimingFunction; - bool operator==(const AnimationPropertySegment& aOther) const { + bool operator==(const AnimationPropertySegment& aOther) const + { return mFromKey == aOther.mFromKey && mToKey == aOther.mToKey && mFromValue == aOther.mFromValue && mToValue == aOther.mToValue && mTimingFunction == aOther.mTimingFunction; } - bool operator!=(const AnimationPropertySegment& aOther) const { + bool operator!=(const AnimationPropertySegment& aOther) const + { return !(*this == aOther); } }; @@ -152,17 +154,31 @@ struct AnimationProperty InfallibleTArray mSegments; + // The copy constructor/assignment doesn't copy mIsRunningOnCompositor and + // mPerformanceWarning. + AnimationProperty() = default; + AnimationProperty(const AnimationProperty& aOther) + : mProperty(aOther.mProperty), mSegments(aOther.mSegments) { } + AnimationProperty& operator=(const AnimationProperty& aOther) + { + mProperty = aOther.mProperty; + mSegments = aOther.mSegments; + return *this; + } + // NOTE: This operator does *not* compare the mIsRunningOnCompositor member. // This is because AnimationProperty objects are compared when recreating // CSS animations to determine if mutation observer change records need to // be created or not. However, at the point when these objects are compared // the mIsRunningOnCompositor will not have been set on the new objects so // we ignore this member to avoid generating spurious change records. - bool operator==(const AnimationProperty& aOther) const { + bool operator==(const AnimationProperty& aOther) const + { return mProperty == aOther.mProperty && mSegments == aOther.mSegments; } - bool operator!=(const AnimationProperty& aOther) const { + bool operator!=(const AnimationProperty& aOther) const + { return !(*this == aOther); } }; @@ -198,6 +214,11 @@ public: const UnrestrictedDoubleOrKeyframeEffectOptions& aOptions, ErrorResult& aRv); + static already_AddRefed + Constructor(const GlobalObject& aGlobal, + KeyframeEffectReadOnly& aSource, + ErrorResult& aRv); + void GetTarget(Nullable& aRv) const; Maybe GetTarget() const { @@ -320,6 +341,17 @@ protected: const OptionsType& aOptions, ErrorResult& aRv); + template + static already_AddRefed + ConstructKeyframeEffect(const GlobalObject& aGlobal, + KeyframeEffectReadOnly& aSource, + ErrorResult& aRv); + + // Build properties by recalculating from |mKeyframes| using |aStyleContext| + // to resolve specified values. This function also applies paced spacing if + // needed. + nsTArray BuildProperties(nsStyleContext* aStyleContext); + // This effect is registered with its target element so long as: // // (a) It has a target element, and diff --git a/dom/audiochannel/AudioChannelAgent.cpp b/dom/audiochannel/AudioChannelAgent.cpp index 9faf1f90f171..9d04ffae11b4 100644 --- a/dom/audiochannel/AudioChannelAgent.cpp +++ b/dom/audiochannel/AudioChannelAgent.cpp @@ -162,7 +162,7 @@ AudioChannelAgent::InitInternal(nsPIDOMWindowInner* aWindow, } if (NS_WARN_IF(!aWindow)) { - return NS_OK; + return NS_ERROR_FAILURE; } MOZ_ASSERT(aWindow->IsInnerWindow()); diff --git a/dom/base/moz.build b/dom/base/moz.build index 9ad9a25133df..ef1a5a17771a 100644 --- a/dom/base/moz.build +++ b/dom/base/moz.build @@ -469,10 +469,6 @@ include('/ipc/chromium/chromium-config.mozbuild') FINAL_LIBRARY = 'xul' -for var in ('MOZ_B2G_RIL'): - if CONFIG[var]: - DEFINES[var] = True - if CONFIG['MOZ_BUILD_APP'] in ['browser', 'mobile/android', 'xulrunner']: DEFINES['HAVE_SIDEBAR'] = True diff --git a/dom/html/HTMLCanvasElement.cpp b/dom/html/HTMLCanvasElement.cpp index abd4a6464637..88b41bce0a0c 100644 --- a/dom/html/HTMLCanvasElement.cpp +++ b/dom/html/HTMLCanvasElement.cpp @@ -1304,7 +1304,9 @@ HTMLCanvasElement::GetCompositorBackendType() const nsIWidget* docWidget = nsContentUtils::WidgetForDocument(OwnerDoc()); if (docWidget) { layers::LayerManager* layerManager = docWidget->GetLayerManager(); - return layerManager->GetCompositorBackendType(); + if (layerManager) { + return layerManager->GetCompositorBackendType(); + } } return LayersBackend::LAYERS_NONE; diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp index 04c9d1f9e301..bc25185e7d95 100644 --- a/dom/html/HTMLMediaElement.cpp +++ b/dom/html/HTMLMediaElement.cpp @@ -2952,7 +2952,7 @@ HTMLMediaElement::HTMLMediaElement(already_AddRefed& aNo mWatchManager.Watch(mReadyState, &HTMLMediaElement::UpdateReadyStateInternal); mShutdownObserver->Subscribe(this); - CreateAudioChannelAgent(); + MaybeCreateAudioChannelAgent(); } HTMLMediaElement::~HTMLMediaElement() @@ -2993,6 +2993,7 @@ HTMLMediaElement::~HTMLMediaElement() } WakeLockRelease(); + mAudioChannelAgent = nullptr; } void HTMLMediaElement::StopSuspendingAfterFirstFrame() @@ -3752,10 +3753,6 @@ nsresult HTMLMediaElement::InitializeDecoderAsClone(MediaDecoder* aOriginal) LOG(LogLevel::Debug, ("%p Cloned decoder %p from %p", this, decoder.get(), aOriginal)); - decoder->SetMediaSeekable(aOriginal->IsMediaSeekable()); - decoder->SetMediaSeekableOnlyInBufferedRanges( - aOriginal->IsMediaSeekableOnlyInBufferedRanges()); - RefPtr resource = originalResource->CloneData(decoder->GetResourceCallback()); @@ -5759,17 +5756,26 @@ ImageContainer* HTMLMediaElement::GetImageContainer() return container ? container->GetImageContainer() : nullptr; } -void -HTMLMediaElement::CreateAudioChannelAgent() +bool +HTMLMediaElement::MaybeCreateAudioChannelAgent() { if (mAudioChannelAgent) { - return; + return true; } mAudioChannelAgent = new AudioChannelAgent(); - mAudioChannelAgent->InitWithWeakCallback(OwnerDoc()->GetInnerWindow(), + nsresult rv = mAudioChannelAgent->InitWithWeakCallback(OwnerDoc()->GetInnerWindow(), static_cast(mAudioChannel), this); + if (NS_WARN_IF(NS_FAILED(rv))) { + mAudioChannelAgent = nullptr; + MOZ_LOG(AudioChannelService::GetAudioChannelLog(), LogLevel::Debug, + ("HTMLMediaElement, Fail to initialize the audio channel agent," + " this = %p\n", this)); + return false; + } + + return true; } bool @@ -5825,6 +5831,10 @@ HTMLMediaElement::UpdateAudioChannelPlayingState(bool aForcePlaying) aForcePlaying || IsPlayingThroughTheAudioChannel(); if (playingThroughTheAudioChannel != mPlayingThroughTheAudioChannel) { + if (!MaybeCreateAudioChannelAgent()) { + return; + } + mPlayingThroughTheAudioChannel = playingThroughTheAudioChannel; NotifyAudioChannelAgent(mPlayingThroughTheAudioChannel); } @@ -6035,7 +6045,7 @@ HTMLMediaElement::IsAllowedToPlay() // If the tab hasn't been activated yet, the media element in that tab can't // be playback now until the tab goes to foreground first time or user clicks // the unblocking tab icon. - if (!IsTabActivated()) { + if (MaybeCreateAudioChannelAgent() && !IsTabActivated()) { // Even we haven't start playing yet, we still need to notify the audio // channe system because we need to receive the resume notification later. UpdateAudioChannelPlayingState(true /* force to start */); @@ -6048,6 +6058,7 @@ HTMLMediaElement::IsAllowedToPlay() bool HTMLMediaElement::IsTabActivated() const { + MOZ_ASSERT(mAudioChannelAgent); return !mAudioChannelAgent->ShouldBlockMedia(); } @@ -6459,9 +6470,8 @@ HTMLMediaElement::SetAudibleState(bool aAudible) void HTMLMediaElement::NotifyAudioPlaybackChanged(AudibleChangedReasons aReason) { - MOZ_ASSERT(mAudioChannelAgent); - - if (!mAudioChannelAgent->IsPlayingStarted()) { + if (MaybeCreateAudioChannelAgent() && + !mAudioChannelAgent->IsPlayingStarted()) { return; } @@ -6504,6 +6514,7 @@ HTMLMediaElement::MaybeNotifyMediaResumed(SuspendTypes aSuspend) return; } + MOZ_ASSERT(mAudioChannelAgent); uint64_t windowID = mAudioChannelAgent->WindowID(); NS_DispatchToMainThread(NS_NewRunnableFunction([windowID]() -> void { nsCOMPtr observerService = @@ -6580,14 +6591,13 @@ HTMLMediaElement::SetMediaInfo(const MediaInfo& aInfo) void HTMLMediaElement::AudioCaptureStreamChangeIfNeeded() { - MOZ_ASSERT(mAudioChannelAgent); - // No need to capture a silence media element. if (!HasAudio()) { return; } - if (!mAudioChannelAgent->IsPlayingStarted()) { + if (MaybeCreateAudioChannelAgent() && + !mAudioChannelAgent->IsPlayingStarted()) { return; } diff --git a/dom/html/HTMLMediaElement.h b/dom/html/HTMLMediaElement.h index 221104e6ad52..5264dc401d29 100644 --- a/dom/html/HTMLMediaElement.h +++ b/dom/html/HTMLMediaElement.h @@ -1229,9 +1229,11 @@ protected: // Notifies the audio channel agent when the element starts or stops playing. void NotifyAudioChannelAgent(bool aPlaying); - // Creates the audio channel agent in the beginning and this agent would be - // used to communicate with the AudioChannelService. - void CreateAudioChannelAgent(); + // True if we create the audio channel agent successfully or we already have + // one. The agent is used to communicate with the AudioChannelService. eg. + // notify we are playing/audible and receive muted/unmuted/suspend/resume + // commands from AudioChannelService. + bool MaybeCreateAudioChannelAgent(); // Determine if the element should be paused because of suspend conditions. bool ShouldElementBePaused(); diff --git a/dom/media/MediaDecoder.cpp b/dom/media/MediaDecoder.cpp index d0947f02a0b9..a49f237e7428 100644 --- a/dom/media/MediaDecoder.cpp +++ b/dom/media/MediaDecoder.cpp @@ -173,15 +173,6 @@ MediaDecoder::ResourceCallback::SetInfinite(bool aInfinite) } } -void -MediaDecoder::ResourceCallback::SetMediaSeekable(bool aMediaSeekable) -{ - MOZ_ASSERT(NS_IsMainThread()); - if (mDecoder) { - mDecoder->SetMediaSeekable(aMediaSeekable); - } -} - void MediaDecoder::ResourceCallback::NotifyNetworkError() { @@ -421,8 +412,6 @@ MediaDecoder::MediaDecoder(MediaDecoderOwner* aOwner) , INIT_CANONICAL(mPlaybackBytesPerSecond, 0.0) , INIT_CANONICAL(mPlaybackRateReliable, true) , INIT_CANONICAL(mDecoderPosition, 0) - , INIT_CANONICAL(mMediaSeekable, true) - , INIT_CANONICAL(mMediaSeekableOnlyInBufferedRanges, false) , INIT_CANONICAL(mIsVisible, !aOwner->IsHidden()) , mTelemetryReported(false) { @@ -806,8 +795,8 @@ MediaDecoder::MetadataLoaded(nsAutoPtr aInfo, aInfo->mAudio.mChannels, aInfo->mAudio.mRate, aInfo->HasAudio(), aInfo->HasVideo()); - SetMediaSeekable(aInfo->mMediaSeekable); - SetMediaSeekableOnlyInBufferedRanges(aInfo->mMediaSeekableOnlyInBufferedRanges); + mMediaSeekable = aInfo->mMediaSeekable; + mMediaSeekableOnlyInBufferedRanges = aInfo->mMediaSeekableOnlyInBufferedRanges; mInfo = aInfo.forget(); ConstructMediaTracks(); @@ -1301,18 +1290,6 @@ MediaDecoder::UpdateEstimatedMediaDuration(int64_t aDuration) mEstimatedDuration = Some(TimeUnit::FromMicroseconds(aDuration)); } -void -MediaDecoder::SetMediaSeekable(bool aMediaSeekable) { - MOZ_ASSERT(NS_IsMainThread()); - mMediaSeekable = aMediaSeekable; -} - -void -MediaDecoder::SetMediaSeekableOnlyInBufferedRanges(bool aMediaSeekableOnlyInBufferedRanges){ - MOZ_ASSERT(NS_IsMainThread()); - mMediaSeekableOnlyInBufferedRanges = aMediaSeekableOnlyInBufferedRanges; -} - bool MediaDecoder::IsTransportSeekable() { @@ -1328,13 +1305,6 @@ MediaDecoder::IsMediaSeekable() return mMediaSeekable; } -bool -MediaDecoder::IsMediaSeekableOnlyInBufferedRanges() -{ - MOZ_ASSERT(NS_IsMainThread()); - return mMediaSeekableOnlyInBufferedRanges; -} - media::TimeIntervals MediaDecoder::GetSeekable() { @@ -1348,7 +1318,7 @@ MediaDecoder::GetSeekable() // We can seek in buffered range if the media is seekable. Also, we can seek // in unbuffered ranges if the transport level is seekable (local file or the // server supports range requests, etc.) or in cue-less WebMs - if (IsMediaSeekableOnlyInBufferedRanges()) { + if (mMediaSeekableOnlyInBufferedRanges) { return GetBuffered(); } else if (!IsMediaSeekable()) { return media::TimeIntervals(); diff --git a/dom/media/MediaDecoder.h b/dom/media/MediaDecoder.h index 0108d57fc8be..5343269555b9 100644 --- a/dom/media/MediaDecoder.h +++ b/dom/media/MediaDecoder.h @@ -82,7 +82,6 @@ public: /* MediaResourceCallback functions */ MediaDecoderOwner* GetMediaOwner() const override; void SetInfinite(bool aInfinite) override; - void SetMediaSeekable(bool aMediaSeekable) override; void NotifyNetworkError() override; void NotifyDecodeError() override; void NotifyDataArrived() override; @@ -252,17 +251,9 @@ protected: void UpdateEstimatedMediaDuration(int64_t aDuration) override; public: - // Set a flag indicating whether random seeking is supported - void SetMediaSeekable(bool aMediaSeekable); - // Set a flag indicating whether seeking is supported only in buffered ranges - void SetMediaSeekableOnlyInBufferedRanges(bool aMediaSeekableOnlyInBufferedRanges); - // Returns true if this media supports random seeking. False for example with // chained ogg files. bool IsMediaSeekable(); - // Returns true if this media supports seeking only in buffered ranges. True - // for example in WebMs with no cues - bool IsMediaSeekableOnlyInBufferedRanges(); // Returns true if seeking is supported on a transport level (e.g. the server // supports range requests, we are playing a file, etc.). bool IsTransportSeekable(); @@ -576,7 +567,7 @@ private: void OnMediaNotSeekable() { - SetMediaSeekable(false); + mMediaSeekable = false; } void FinishShutdown(); @@ -673,6 +664,13 @@ protected: // True if we've already fired metadataloaded. bool mFiredMetadataLoaded; + // True if the media is seekable (i.e. supports random access). + bool mMediaSeekable = true; + + // True if the media is only seekable within its buffered ranges + // like WebMs with no cues. + bool mMediaSeekableOnlyInBufferedRanges = false; + // Stores media info, including info of audio tracks and video tracks, should // only be accessed from main thread. nsAutoPtr mInfo; @@ -772,12 +770,6 @@ protected: // back again. Canonical mDecoderPosition; - // True if the media is seekable (i.e. supports random access). - Canonical mMediaSeekable; - - // True if the media is only seekable within its buffered ranges. - Canonical mMediaSeekableOnlyInBufferedRanges; - // True if the decoder is visible. Canonical mIsVisible; @@ -819,12 +811,6 @@ public: AbstractCanonical* CanonicalDecoderPosition() { return &mDecoderPosition; } - AbstractCanonical* CanonicalMediaSeekable() { - return &mMediaSeekable; - } - AbstractCanonical* CanonicalMediaSeekableOnlyInBufferedRanges() { - return &mMediaSeekableOnlyInBufferedRanges; - } AbstractCanonical* CanonicalIsVisible() { return &mIsVisible; } diff --git a/dom/media/MediaDecoderStateMachine.cpp b/dom/media/MediaDecoderStateMachine.cpp index 52a62c29094e..b29e64d8fd05 100644 --- a/dom/media/MediaDecoderStateMachine.cpp +++ b/dom/media/MediaDecoderStateMachine.cpp @@ -193,26 +193,15 @@ public: virtual State GetState() const = 0; // Event handlers for various events. - // Return true if the event is handled by this state object. - virtual bool HandleDormant(bool aDormant); - - virtual bool HandleCDMProxyReady() { return false; } - - virtual bool HandleAudioDecoded(MediaData* aAudio) { return false; } - - virtual bool HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) - { - return false; - } - - virtual bool HandleEndOfStream() { return false; } - - virtual bool HandleWaitingForData() { return false; } + virtual void HandleCDMProxyReady() {} + virtual void HandleAudioDecoded(MediaData* aAudio) {} + virtual void HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) {} + virtual void HandleEndOfStream() {} + virtual void HandleWaitingForData() {} + virtual void HandleAudioCaptured() {} virtual RefPtr HandleSeek(SeekTarget aTarget) = 0; - virtual bool HandleAudioCaptured() { return false; } - virtual RefPtr HandleShutdown(); virtual void HandleVideoSuspendTimeout() = 0; @@ -278,7 +267,6 @@ protected: * Transition to other states when decoding metadata is done: * SHUTDOWN if failing to decode metadata. * WAIT_FOR_CDM if the media is encrypted and CDM is not available. - * DORMANT if any pending dormant request. * DECODING_FIRSTFRAME otherwise. */ class MediaDecoderStateMachine::DecodeMetadataState @@ -318,12 +306,6 @@ public: return DECODER_STATE_DECODING_METADATA; } - bool HandleDormant(bool aDormant) override - { - mPendingDormant = aDormant; - return true; - } - RefPtr HandleSeek(SeekTarget aTarget) override { MOZ_DIAGNOSTIC_ASSERT(false, "Can't seek while decoding metadata."); @@ -352,18 +334,12 @@ private: } MozPromiseRequestHolder mMetadataRequest; - - // True if we need to enter dormant state after reading metadata. Note that - // we can't enter dormant state until reading metadata is done for some - // limitations of the reader. - bool mPendingDormant = false; }; /** * Purpose: wait for the CDM to start decoding. * * Transition to other states when CDM is ready: - * DORMANT if any pending dormant request. * DECODING_FIRSTFRAME otherwise. */ class MediaDecoderStateMachine::WaitForCDMState @@ -372,10 +348,9 @@ class MediaDecoderStateMachine::WaitForCDMState public: explicit WaitForCDMState(Master* aPtr) : StateObject(aPtr) {} - void Enter(bool aPendingDormant) + void Enter() { MOZ_ASSERT(!mMaster->mVideoDecodeSuspended); - mPendingDormant = aPendingDormant; } void Exit() override @@ -390,9 +365,7 @@ public: return DECODER_STATE_WAIT_FOR_CDM; } - bool HandleDormant(bool aDormant) override; - - bool HandleCDMProxyReady() override; + void HandleCDMProxyReady() override; RefPtr HandleSeek(SeekTarget aTarget) override { @@ -414,7 +387,6 @@ public: } private: - bool mPendingDormant = false; SeekJob mPendingSeek; }; @@ -443,8 +415,8 @@ public: void Exit() override { - // mPendingSeek is either moved in HandleDormant() or should be rejected - // here before transition to SHUTDOWN. + // mPendingSeek is either moved when exiting dormant or + // should be rejected here before transition to SHUTDOWN. mPendingSeek.RejectIfExists(__func__); } @@ -453,8 +425,6 @@ public: return DECODER_STATE_DORMANT; } - bool HandleDormant(bool aDormant) override; - RefPtr HandleSeek(SeekTarget aTarget) override; void HandleVideoSuspendTimeout() override @@ -467,13 +437,7 @@ public: // Do nothing since we won't resume decoding until exiting dormant. } - void HandlePlayStateChanged(MediaDecoder::PlayState aPlayState) override - { - if (aPlayState == MediaDecoder::PLAY_STATE_PLAYING) { - // Exit dormant when the user wants to play. - HandleDormant(false); - } - } + void HandlePlayStateChanged(MediaDecoder::PlayState aPlayState) override; private: SeekJob mPendingSeek; @@ -483,7 +447,6 @@ private: * Purpose: decode the 1st audio and video frames to fire the 'loadeddata' event. * * Transition to: - * DORMANT if any dormant request. * SHUTDOWN if any decode error. * SEEKING if any pending seek and seek is possible. * DECODING when the 'loadeddata' event is fired. @@ -498,7 +461,7 @@ public: void Exit() override { - // mPendingSeek is either moved before transition to SEEKING or DORMANT, + // mPendingSeek is either moved before transition to SEEKING, // or should be rejected here before transition to SHUTDOWN. mPendingSeek.RejectIfExists(__func__); } @@ -508,30 +471,25 @@ public: return DECODER_STATE_DECODING_FIRSTFRAME; } - bool HandleAudioDecoded(MediaData* aAudio) override + void HandleAudioDecoded(MediaData* aAudio) override { mMaster->Push(aAudio, MediaData::AUDIO_DATA); MaybeFinishDecodeFirstFrame(); - return true; } - bool HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) override + void HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) override { mMaster->Push(aVideo, MediaData::VIDEO_DATA); MaybeFinishDecodeFirstFrame(); - return true; } - bool HandleEndOfStream() override + void HandleEndOfStream() override { MaybeFinishDecodeFirstFrame(); - return true; } RefPtr HandleSeek(SeekTarget aTarget) override; - bool HandleDormant(bool aDormant) override; - void HandleVideoSuspendTimeout() override { // Do nothing for we need to decode the 1st video frame to get the dimensions. @@ -555,7 +513,7 @@ private: * Purpose: decode audio/video data for playback. * * Transition to: - * DORMANT if any dormant request. + * DORMANT if playback is paused for a while. * SEEKING if any seek request. * SHUTDOWN if any decode error. * BUFFERING if playback can't continue due to lack of decoded data. @@ -610,37 +568,33 @@ public: return DECODER_STATE_DECODING; } - bool HandleAudioDecoded(MediaData* aAudio) override + void HandleAudioDecoded(MediaData* aAudio) override { mMaster->Push(aAudio, MediaData::AUDIO_DATA); MaybeStopPrerolling(); - return true; } - bool HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) override + void HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) override { mMaster->Push(aVideo, MediaData::VIDEO_DATA); MaybeStopPrerolling(); CheckSlowDecoding(aDecodeStart); - return true; } RefPtr HandleSeek(SeekTarget aTarget) override; - bool HandleEndOfStream() override; + void HandleEndOfStream() override; - bool HandleWaitingForData() override + void HandleWaitingForData() override { MaybeStopPrerolling(); - return true; } - bool HandleAudioCaptured() override + void HandleAudioCaptured() override { MaybeStopPrerolling(); // MediaSink is changed. Schedule Step() to check if we can start playback. mMaster->ScheduleStateMachine(); - return true; } void HandleVideoSuspendTimeout() override @@ -730,6 +684,20 @@ private: } } + void EnterDormant() + { + auto t = mMaster->mMediaSink->IsStarted() + ? mMaster->GetClock() + : mMaster->GetMediaTime(); + SeekJob seekJob; + seekJob.mTarget = SeekTarget(t, SeekTarget::Accurate, + MediaDecoderEventVisibility::Suppressed); + // SeekJob asserts |mTarget.IsValid() == !mPromise.IsEmpty()| so we + // need to create the promise even it is not used at all. + RefPtr unused = seekJob.mPromise.Ensure(__func__); + SetState(Move(seekJob)); + } + void StartDormantTimer() { auto timeout = MediaPrefs::DormantOnPauseTimeout(); @@ -738,7 +706,7 @@ private: return; } else if (timeout == 0) { // Enter dormant immediately without scheduling a timer. - HandleDormant(true); + EnterDormant(); return; } @@ -748,7 +716,7 @@ private: mDormantTimer.Ensure(target, [this] () { mDormantTimer.CompleteRequest(); - HandleDormant(true); + EnterDormant(); }, [this] () { mDormantTimer.CompleteRequest(); }); @@ -774,7 +742,6 @@ private: * Purpose: seek to a particular new playback position. * * Transition to: - * DORMANT if any dormant request. * SEEKING if any new seek request. * SHUTDOWN if seek failed. * COMPLETED if the new playback position is the end of the media resource. @@ -871,18 +838,14 @@ public: return DECODER_STATE_SEEKING; } - bool HandleDormant(bool aDormant) override; - - bool HandleAudioDecoded(MediaData* aAudio) override + void HandleAudioDecoded(MediaData* aAudio) override { MOZ_ASSERT(false); - return true; } - bool HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) override + void HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) override { MOZ_ASSERT(false); - return true; } RefPtr HandleSeek(SeekTarget aTarget) override; @@ -952,7 +915,6 @@ private: * Purpose: stop playback until enough data is decoded to continue playback. * * Transition to: - * DORMANT if any dormant request. * SEEKING if any seek request. * SHUTDOWN if any decode error. * COMPLETED when having decoded all audio/video data. @@ -987,25 +949,23 @@ public: return DECODER_STATE_BUFFERING; } - bool HandleAudioDecoded(MediaData* aAudio) override + void HandleAudioDecoded(MediaData* aAudio) override { // This might be the sample we need to exit buffering. // Schedule Step() to check it. mMaster->Push(aAudio, MediaData::AUDIO_DATA); mMaster->ScheduleStateMachine(); - return true; } - bool HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) override + void HandleVideoDecoded(MediaData* aVideo, TimeStamp aDecodeStart) override { // This might be the sample we need to exit buffering. // Schedule Step() to check it. mMaster->Push(aVideo, MediaData::VIDEO_DATA); mMaster->ScheduleStateMachine(); - return true; } - bool HandleEndOfStream() override; + void HandleEndOfStream() override; RefPtr HandleSeek(SeekTarget aTarget) override; @@ -1030,7 +990,6 @@ private: * Purpose: play all the decoded data and fire the 'ended' event. * * Transition to: - * DORMANT if any dormant request. * SEEKING if any seek request. */ class MediaDecoderStateMachine::CompletedState @@ -1102,11 +1061,10 @@ public: RefPtr HandleSeek(SeekTarget aTarget) override; - bool HandleAudioCaptured() override + void HandleAudioCaptured() override { // MediaSink is changed. Schedule Step() to check if we can start playback. mMaster->ScheduleStateMachine(); - return true; } void HandleVideoSuspendTimeout() override @@ -1153,11 +1111,6 @@ public: return DECODER_STATE_SHUTDOWN; } - bool HandleDormant(bool aDormant) override - { - return true; - } - RefPtr HandleSeek(SeekTarget aTarget) override { MOZ_DIAGNOSTIC_ASSERT(false, "Can't seek in shutdown state."); @@ -1181,27 +1134,6 @@ public: } }; -bool -MediaDecoderStateMachine:: -StateObject::HandleDormant(bool aDormant) -{ - if (!aDormant) { - return true; - } - SeekJob seekJob; - int64_t seekTargetTime = mMaster->mMediaSink->IsStarted() - ? mMaster->GetClock() : mMaster->GetMediaTime(); - - seekJob.mTarget = SeekTarget(seekTargetTime, - SeekTarget::Accurate, - MediaDecoderEventVisibility::Suppressed); - // SeekJob asserts |mTarget.IsValid() == !mPromise.IsEmpty()| so we - // need to create the promise even it is not used at all. - RefPtr unused = seekJob.mPromise.Ensure(__func__); - SetState(Move(seekJob)); - return true; -} - RefPtr MediaDecoderStateMachine:: StateObject::HandleShutdown() @@ -1292,6 +1224,8 @@ DecodeMetadataState::OnMetadataRead(MetadataHolder* aMetadata) mMaster->mInfo = Some(aMetadata->mInfo); mMaster->mMetadataTags = aMetadata->mTags.forget(); + mMaster->mMediaSeekable = Info().mMediaSeekable; + mMaster->mMediaSeekableOnlyInBufferedRanges = Info().mMediaSeekableOnlyInBufferedRanges; if (Info().mMetadataDuration.isSome()) { mMaster->RecomputeDuration(); @@ -1336,33 +1270,12 @@ DecodeMetadataState::OnMetadataRead(MetadataHolder* aMetadata) if (waitingForCDM) { // Metadata parsing was successful but we're still waiting for CDM caps // to become available so that we can build the correct decryptor/decoder. - SetState(mPendingDormant); - } else if (mPendingDormant) { - SetState(SeekJob{}); + SetState(); } else { SetState(SeekJob{}); } } -bool -MediaDecoderStateMachine:: -WaitForCDMState::HandleDormant(bool aDormant) -{ - mPendingDormant = aDormant; - return true; -} - -bool -MediaDecoderStateMachine:: -DormantState::HandleDormant(bool aDormant) -{ - if (!aDormant) { - MOZ_ASSERT(!Info().IsEncrypted() || mMaster->mCDMProxy); - SetState(Move(mPendingSeek)); - } - return true; -} - RefPtr MediaDecoderStateMachine:: DormantState::HandleSeek(SeekTarget aTarget) @@ -1374,16 +1287,22 @@ DormantState::HandleSeek(SeekTarget aTarget) return SetState(Move(seekJob)); } -bool +void +MediaDecoderStateMachine:: +DormantState::HandlePlayStateChanged(MediaDecoder::PlayState aPlayState) +{ + if (aPlayState == MediaDecoder::PLAY_STATE_PLAYING) { + // Exit dormant when the user wants to play. + MOZ_ASSERT(!Info().IsEncrypted() || mMaster->mCDMProxy); + SetState(Move(mPendingSeek)); + } +} + +void MediaDecoderStateMachine:: WaitForCDMState::HandleCDMProxyReady() { - if (mPendingDormant) { - SetState(Move(mPendingSeek)); - } else { - SetState(Move(mPendingSeek)); - } - return true; + SetState(Move(mPendingSeek)); } void @@ -1437,16 +1356,6 @@ DecodingFirstFrameState::HandleSeek(SeekTarget aTarget) return SetState(Move(seekJob)); } -bool -MediaDecoderStateMachine:: -DecodingFirstFrameState::HandleDormant(bool aDormant) -{ - if (aDormant) { - SetState(Move(mPendingSeek)); - } - return true; -} - void MediaDecoderStateMachine:: DecodingFirstFrameState::MaybeFinishDecodeFirstFrame() @@ -1511,7 +1420,7 @@ DecodingState::HandleSeek(SeekTarget aTarget) return SetState(Move(seekJob)); } -bool +void MediaDecoderStateMachine:: DecodingState::HandleEndOfStream() { @@ -1520,7 +1429,6 @@ DecodingState::HandleEndOfStream() } else { MaybeStopPrerolling(); } - return true; } void @@ -1557,26 +1465,6 @@ DecodingState::MaybeStartBuffering() } } -bool -MediaDecoderStateMachine:: -SeekingState::HandleDormant(bool aDormant) -{ - if (!aDormant) { - return true; - } - MOZ_ASSERT(mSeekJob.Exists()); - // Because both audio and video decoders are going to be reset in this - // method later, we treat a VideoOnly seek task as a normal Accurate - // seek task so that while it is resumed, both audio and video playback - // are handled. - if (mSeekJob.mTarget.IsVideoOnly()) { - mSeekJob.mTarget.SetType(SeekTarget::Accurate); - mSeekJob.mTarget.SetVideoOnly(false); - } - SetState(Move(mSeekJob)); - return true; -} - RefPtr MediaDecoderStateMachine:: SeekingState::HandleSeek(SeekTarget aTarget) @@ -1712,7 +1600,7 @@ BufferingState::Step() SetState(); } -bool +void MediaDecoderStateMachine:: BufferingState::HandleEndOfStream() { @@ -1722,7 +1610,6 @@ BufferingState::HandleEndOfStream() // Check if we can exit buffering. mMaster->ScheduleStateMachine(); } - return true; } RefPtr @@ -1776,6 +1663,7 @@ ShutdownState::Enter() master->mAudioQueueListener.Disconnect(); master->mVideoQueueListener.Disconnect(); master->mMetadataManager.Disconnect(); + master->mOnMediaNotSeekable.Disconnect(); // Disconnect canonicals and mirrors before shutting down our task queue. master->mBuffered.DisconnectIfConnected(); @@ -1790,8 +1678,6 @@ ShutdownState::Enter() master->mPlaybackBytesPerSecond.DisconnectIfConnected(); master->mPlaybackRateReliable.DisconnectIfConnected(); master->mDecoderPosition.DisconnectIfConnected(); - master->mMediaSeekable.DisconnectIfConnected(); - master->mMediaSeekableOnlyInBufferedRanges.DisconnectIfConnected(); master->mIsVisible.DisconnectIfConnected(); master->mDuration.DisconnectAll(); @@ -1863,8 +1749,6 @@ MediaDecoderStateMachine::MediaDecoderStateMachine(MediaDecoder* aDecoder, INIT_MIRROR(mPlaybackBytesPerSecond, 0.0), INIT_MIRROR(mPlaybackRateReliable, true), INIT_MIRROR(mDecoderPosition, 0), - INIT_MIRROR(mMediaSeekable, true), - INIT_MIRROR(mMediaSeekableOnlyInBufferedRanges, false), INIT_MIRROR(mIsVisible, true), INIT_CANONICAL(mDuration, NullableTimeUnit()), INIT_CANONICAL(mIsShutdown, false), @@ -1920,8 +1804,6 @@ MediaDecoderStateMachine::InitializationTask(MediaDecoder* aDecoder) mPlaybackBytesPerSecond.Connect(aDecoder->CanonicalPlaybackBytesPerSecond()); mPlaybackRateReliable.Connect(aDecoder->CanonicalPlaybackRateReliable()); mDecoderPosition.Connect(aDecoder->CanonicalDecoderPosition()); - mMediaSeekable.Connect(aDecoder->CanonicalMediaSeekable()); - mMediaSeekableOnlyInBufferedRanges.Connect(aDecoder->CanonicalMediaSeekableOnlyInBufferedRanges()); // Initialize watchers. mWatchManager.Watch(mBuffered, &MediaDecoderStateMachine::BufferedRangeUpdated); @@ -2301,6 +2183,11 @@ nsresult MediaDecoderStateMachine::Init(MediaDecoder* aDecoder) mMetadataManager.Connect(mReader->TimedMetadataEvent(), OwnerThread()); + mOnMediaNotSeekable = mReader->OnMediaNotSeekable().Connect( + OwnerThread(), [this] () { + mMediaSeekable = false; + }); + mMediaSink = CreateMediaSink(mAudioCaptured); mCDMProxyPromise.Begin(aDecoder->RequestCDMProxy()->Then( @@ -2512,13 +2399,6 @@ void MediaDecoderStateMachine::RecomputeDuration() mDuration = Some(duration); } -void -MediaDecoderStateMachine::SetDormant(bool aDormant) -{ - MOZ_ASSERT(OnTaskQueue()); - mStateObj->HandleDormant(aDormant); -} - RefPtr MediaDecoderStateMachine::Shutdown() { @@ -2968,7 +2848,7 @@ MediaDecoderStateMachine::FinishDecodeFirstFrame() DECODER_LOG("Media duration %lld, " "transportSeekable=%d, mediaSeekable=%d", - Duration().ToMicroseconds(), mResource->IsTransportSeekable(), mMediaSeekable.Ref()); + Duration().ToMicroseconds(), mResource->IsTransportSeekable(), mMediaSeekable); // Get potentially updated metadata mReader->ReadUpdatedMetadata(mInfo.ptr()); diff --git a/dom/media/MediaDecoderStateMachine.h b/dom/media/MediaDecoderStateMachine.h index fe8c1de9caff..3c13ed3eef1c 100644 --- a/dom/media/MediaDecoderStateMachine.h +++ b/dom/media/MediaDecoderStateMachine.h @@ -281,8 +281,6 @@ private: // constructor immediately after the task queue is created. void InitializationTask(MediaDecoder* aDecoder); - void SetDormant(bool aDormant); - void SetAudioCaptured(bool aCaptured); RefPtr Seek(SeekTarget aTarget); @@ -736,6 +734,12 @@ private: // True if video decoding is suspended. bool mVideoDecodeSuspended; + // True if the media is seekable (i.e. supports random access). + bool mMediaSeekable = true; + + // True if the media is seekable only in buffered ranges. + bool mMediaSeekableOnlyInBufferedRanges = false; + // Track enabling video decode suspension via timer DelayedScheduler mVideoDecodeSuspendTimer; @@ -752,6 +756,7 @@ private: MediaEventListener mAudioQueueListener; MediaEventListener mVideoQueueListener; MediaEventListener mAudibleListener; + MediaEventListener mOnMediaNotSeekable; MediaEventProducerExc, nsAutoPtr, @@ -810,12 +815,6 @@ private: // Current decoding position in the stream. Mirror mDecoderPosition; - // True if the media is seekable (i.e. supports random access). - Mirror mMediaSeekable; - - // True if the media is seekable only in buffered ranges. - Mirror mMediaSeekableOnlyInBufferedRanges; - // IsVisible, mirrored from the media decoder. Mirror mIsVisible; diff --git a/dom/media/MediaManager.cpp b/dom/media/MediaManager.cpp index 1ccbdaf11c0c..2e73604fe6cc 100644 --- a/dom/media/MediaManager.cpp +++ b/dom/media/MediaManager.cpp @@ -157,29 +157,6 @@ using media::Refcountable; static Atomic sInShutdown; -static bool -HostInDomain(const nsCString &aHost, const nsCString &aPattern) -{ - int32_t patternOffset = 0; - int32_t hostOffset = 0; - - // Act on '*.' wildcard in the left-most position in a domain pattern. - if (aPattern.Length() > 2 && aPattern[0] == '*' && aPattern[1] == '.') { - patternOffset = 2; - - // Ignore the lowest level sub-domain for the hostname. - hostOffset = aHost.FindChar('.') + 1; - - if (hostOffset <= 1) { - // Reject a match between a wildcard and a TLD or '.foo' form. - return false; - } - } - - nsDependentCString hostRoot(aHost, hostOffset); - return hostRoot.EqualsIgnoreCase(aPattern.BeginReading() + patternOffset); -} - static bool HostIsHttps(nsIURI &docURI) { @@ -191,58 +168,6 @@ HostIsHttps(nsIURI &docURI) return isHttps; } -static bool -HostHasPermission(nsIURI &docURI) -{ - nsAdoptingCString hostName; - docURI.GetAsciiHost(hostName); //normalize UTF8 to ASCII equivalent - nsAdoptingCString domainWhiteList = - Preferences::GetCString("media.getusermedia.screensharing.allowed_domains"); - domainWhiteList.StripWhitespace(); - - if (domainWhiteList.IsEmpty() || hostName.IsEmpty()) { - return false; - } - - // Get UTF8 to ASCII domain name normalization service - nsresult rv; - nsCOMPtr idnService = - do_GetService("@mozilla.org/network/idn-service;1", &rv); - if (NS_WARN_IF(NS_FAILED(rv))) { - return false; - } - - uint32_t begin = 0; - uint32_t end = 0; - nsCString domainName; - /* - Test each domain name in the comma separated list - after converting from UTF8 to ASCII. Each domain - must match exactly or have a single leading '*.' wildcard - */ - do { - end = domainWhiteList.FindChar(',', begin); - if (end == (uint32_t)-1) { - // Last or only domain name in the comma separated list - end = domainWhiteList.Length(); - } - - rv = idnService->ConvertUTF8toACE(Substring(domainWhiteList, begin, end - begin), - domainName); - if (NS_SUCCEEDED(rv)) { - if (HostInDomain(hostName, domainName)) { - return true; - } - } else { - NS_WARNING("Failed to convert UTF-8 host to ASCII"); - } - - begin = end + 1; - } while (end < domainWhiteList.Length()); - - return false; -} - /** * This class is an implementation of MediaStreamListener. This is used * to Start() and Stop() the underlying MediaEngineSource when MediaStreams @@ -2218,8 +2143,7 @@ if (privileged) { !Preferences::GetBool("media.getusermedia.screensharing.allow_on_old_platforms", false) && !IsVistaOrLater()) || #endif - (!privileged && !HostIsHttps(*docURI)) || - (!isChrome && !HostHasPermission(*docURI))) { + (!privileged && !HostIsHttps(*docURI))) { RefPtr error = new MediaStreamError(aWindow, NS_LITERAL_STRING("NotAllowedError")); diff --git a/dom/media/MediaPrefs.h b/dom/media/MediaPrefs.h index 8f887ba7df4f..e31884d483fc 100644 --- a/dom/media/MediaPrefs.h +++ b/dom/media/MediaPrefs.h @@ -122,6 +122,7 @@ private: #endif #ifdef XP_WIN DECL_MEDIA_PREF("media.wmf.enabled", PDMWMFEnabled, bool, true); + DECL_MEDIA_PREF("media.wmf.skip-blacklist", PDMWMFSkipBlacklist, bool, false); DECL_MEDIA_PREF("media.decoder-doctor.wmf-disabled-is-failure", DecoderDoctorWMFDisabledIsFailure, bool, false); DECL_MEDIA_PREF("media.wmf.vp9.enabled", PDMWMFVP9DecoderEnabled, bool, true); DECL_MEDIA_PREF("media.wmf.decoder.thread-count", PDMWMFThreadCount, int32_t, -1); diff --git a/dom/media/MediaResourceCallback.h b/dom/media/MediaResourceCallback.h index 6e4d5df9c4cc..9c126f400c87 100644 --- a/dom/media/MediaResourceCallback.h +++ b/dom/media/MediaResourceCallback.h @@ -34,9 +34,6 @@ public: // Notify is duration is known to this MediaResource. virtual void SetInfinite(bool aInfinite) {} - // Notify if seeking is supported by this MediaResource. - virtual void SetMediaSeekable(bool aMediaSeekable) {} - // Notify that a network error is encountered. virtual void NotifyNetworkError() {} diff --git a/dom/media/eme/MediaKeys.cpp b/dom/media/eme/MediaKeys.cpp index 5737626db666..eedd675e4f88 100644 --- a/dom/media/eme/MediaKeys.cpp +++ b/dom/media/eme/MediaKeys.cpp @@ -15,6 +15,9 @@ #include "mozilla/dom/UnionTypes.h" #include "mozilla/Telemetry.h" #include "GMPCDMProxy.h" +#ifdef MOZ_WIDGET_ANDROID +#include "mozilla/MediaDrmCDMProxy.h" +#endif #include "mozilla/EMEUtils.h" #include "nsContentUtils.h" #include "nsIScriptObjectPrincipal.h" @@ -325,6 +328,28 @@ private: WeakPtr mMediaKeys; }; +already_AddRefed +MediaKeys::CreateCDMProxy() +{ + RefPtr proxy; +#ifdef MOZ_WIDGET_ANDROID + if (IsWidevineKeySystem(mKeySystem)) { + proxy = new MediaDrmCDMProxy(this, + mKeySystem, + mConfig.mDistinctiveIdentifier == MediaKeysRequirement::Required, + mConfig.mPersistentState == MediaKeysRequirement::Required); + } else +#endif + { + proxy = new GMPCDMProxy(this, + mKeySystem, + new MediaKeysGMPCrashHelper(this), + mConfig.mDistinctiveIdentifier == MediaKeysRequirement::Required, + mConfig.mPersistentState == MediaKeysRequirement::Required); + } + return proxy.forget(); +} + already_AddRefed MediaKeys::Init(ErrorResult& aRv) { @@ -334,11 +359,7 @@ MediaKeys::Init(ErrorResult& aRv) return nullptr; } - mProxy = new GMPCDMProxy(this, - mKeySystem, - new MediaKeysGMPCrashHelper(this), - mConfig.mDistinctiveIdentifier == MediaKeysRequirement::Required, - mConfig.mPersistentState == MediaKeysRequirement::Required); + mProxy = CreateCDMProxy(); // Determine principal (at creation time) of the MediaKeys object. nsCOMPtr sop = do_QueryInterface(GetParentObject()); diff --git a/dom/media/eme/MediaKeys.h b/dom/media/eme/MediaKeys.h index 7d26adf4fdfa..a3dbf37df2c3 100644 --- a/dom/media/eme/MediaKeys.h +++ b/dom/media/eme/MediaKeys.h @@ -133,7 +133,9 @@ public: private: - bool IsInPrivateBrowsing(); + // Instantiate CDMProxy instance. + // It could be MediaDrmCDMProxy (Widevine on Fennec) or GMPCDMProxy (the rest). + already_AddRefed CreateCDMProxy(); // Removes promise from mPromises, and returns it. already_AddRefed RetrievePromise(PromiseId aId); diff --git a/dom/media/eme/mediadrm/MediaDrmProxySupport.cpp b/dom/media/eme/mediadrm/MediaDrmProxySupport.cpp index 14b9e67fa8c1..192769470e5b 100644 --- a/dom/media/eme/mediadrm/MediaDrmProxySupport.cpp +++ b/dom/media/eme/mediadrm/MediaDrmProxySupport.cpp @@ -199,12 +199,11 @@ MediaDrmProxySupport::MediaDrmProxySupport(const nsAString& aKeySystem) : mKeySystem(aKeySystem), mDestroyed(false) { mJavaCallbacks = MediaDrmProxy::NativeMediaDrmProxyCallbacks::New(); - // TODO: Bug 1306196 will check the pref to determine if it is oop case. - // Follow the pref flag PDMAndroidRemoteCodecEnabled returned to determine - // it is crossing process CDM or not. + mBridgeProxy = MediaDrmProxy::Create(mKeySystem, - mJavaCallbacks); + mJavaCallbacks, + MediaPrefs::PDMAndroidRemoteCodecEnabled()); } MediaDrmProxySupport::~MediaDrmProxySupport() diff --git a/dom/media/mediasink/VideoSink.cpp b/dom/media/mediasink/VideoSink.cpp index 438f86249b7e..834afbba05ce 100644 --- a/dom/media/mediasink/VideoSink.cpp +++ b/dom/media/mediasink/VideoSink.cpp @@ -24,6 +24,10 @@ using namespace mozilla::layers; namespace media { +// Minimum update frequency is 1/120th of a second, i.e. half the +// duration of a 60-fps frame. +static const int64_t MIN_UPDATE_INTERVAL_US = 1000000 / (60 * 2); + VideoSink::VideoSink(AbstractThread* aThread, MediaSink* aAudioSink, MediaQueue& aVideoQueue, @@ -441,8 +445,9 @@ VideoSink::UpdateRenderedVideoFrames() } int64_t nextFrameTime = frames[1]->mTime; + int64_t delta = std::max((nextFrameTime - clockTime), MIN_UPDATE_INTERVAL_US); TimeStamp target = nowTime + TimeDuration::FromMicroseconds( - (nextFrameTime - clockTime) / mAudioSink->GetPlaybackParams().mPlaybackRate); + delta / mAudioSink->GetPlaybackParams().mPlaybackRate); RefPtr self = this; mUpdateScheduler.Ensure(target, [self] () { diff --git a/dom/media/platforms/wmf/WMFVideoMFTManager.cpp b/dom/media/platforms/wmf/WMFVideoMFTManager.cpp index d36bb01288a7..422417d051d6 100644 --- a/dom/media/platforms/wmf/WMFVideoMFTManager.cpp +++ b/dom/media/platforms/wmf/WMFVideoMFTManager.cpp @@ -18,6 +18,7 @@ #include "mozilla/ClearOnShutdown.h" #include "mozilla/layers/LayersTypes.h" #include "MediaInfo.h" +#include "MediaPrefs.h" #include "mozilla/Logging.h" #include "nsWindowsHelpers.h" #include "gfx2DGlue.h" @@ -66,7 +67,7 @@ const CLSID CLSID_WebmMfVpxDec = }; namespace mozilla { - + LayersBackend GetCompositorBackendType(layers::KnowsCompositor* aKnowsCompositor) { @@ -180,8 +181,8 @@ FindDXVABlacklistedDLL(StaticAutoPtr& aDLLBlacklistingC ClearOnShutdown(&aDLLBlacklistingCache); } - if (aBlacklist.IsEmpty()) { - // Empty blacklist -> No blacklisting. + if (aBlacklist.IsEmpty() || MediaPrefs::PDMWMFSkipBlacklist()) { + // Empty blacklist, or "media.wmf.skip-blacklist"=true -> No blacklisting. aDLLBlacklistingCache->mBlacklistPref.SetLength(0); aDLLBlacklistingCache->mBlacklistedDLL.SetLength(0); return aDLLBlacklistingCache->mBlacklistedDLL; diff --git a/dom/media/test/bug1301226-odd.wav b/dom/media/test/bug1301226-odd.wav new file mode 100644 index 000000000000..dd2df4e4dd7b Binary files /dev/null and b/dom/media/test/bug1301226-odd.wav differ diff --git a/dom/media/test/bug1301226-odd.wav^headers^ b/dom/media/test/bug1301226-odd.wav^headers^ new file mode 100644 index 000000000000..4030ea1d3ddb --- /dev/null +++ b/dom/media/test/bug1301226-odd.wav^headers^ @@ -0,0 +1 @@ +Cache-Control: no-store diff --git a/dom/media/test/bug1301226.wav b/dom/media/test/bug1301226.wav new file mode 100644 index 000000000000..0128486f07b4 Binary files /dev/null and b/dom/media/test/bug1301226.wav differ diff --git a/dom/media/test/bug1301226.wav^headers^ b/dom/media/test/bug1301226.wav^headers^ new file mode 100644 index 000000000000..4030ea1d3ddb --- /dev/null +++ b/dom/media/test/bug1301226.wav^headers^ @@ -0,0 +1 @@ +Cache-Control: no-store diff --git a/dom/media/test/manifest.js b/dom/media/test/manifest.js index e128689684d0..c6d533c1b884 100644 --- a/dom/media/test/manifest.js +++ b/dom/media/test/manifest.js @@ -165,6 +165,10 @@ var gPlayTests = [ { name:"wavedata_alaw.wav", type:"audio/x-wav", duration:1.0 }, // uLaw compressed wave file { name:"wavedata_ulaw.wav", type:"audio/x-wav", duration:1.0 }, + // Data length 0xFFFFFFFF + { name:"bug1301226.wav", type:"audio/x-wav", duration:0.003673 }, + // Data length 0xFFFFFFFF and odd chunk lengths. + { name:"bug1301226-odd.wav", type:"audio/x-wav", duration:0.003673 }, // Ogg stream without eof marker { name:"bug461281.ogg", type:"application/ogg", duration:2.208 }, diff --git a/dom/media/test/mochitest.ini b/dom/media/test/mochitest.ini index d6729f56959c..ddabf78b660c 100644 --- a/dom/media/test/mochitest.ini +++ b/dom/media/test/mochitest.ini @@ -391,6 +391,10 @@ support-files = bug883173.vtt bug1066943.webm bug1066943.webm^headers^ + bug1301226.wav + bug1301226.wav^headers^ + bug1301226-odd.wav + bug1301226-odd.wav^headers^ can_play_type_dash.js can_play_type_ogg.js can_play_type_wave.js diff --git a/dom/media/tests/mochitest/test_getUserMedia_basicScreenshare.html b/dom/media/tests/mochitest/test_getUserMedia_basicScreenshare.html index afc8d6f4f550..90a55356632c 100644 --- a/dom/media/tests/mochitest/test_getUserMedia_basicScreenshare.html +++ b/dom/media/tests/mochitest/test_getUserMedia_basicScreenshare.html @@ -11,10 +11,6 @@ bug: "1211656" }); - var mustFailWith = (msg, reason, f) => - f().then(() => ok(false, msg + " must fail"), - e => is(e.name, reason, msg + " must fail: " + e.message)); - var pushPrefs = (...p) => new Promise(r => SpecialPowers.pushPrefEnv({set: p}, r)); /** @@ -63,15 +59,9 @@ } ]; return Promise.resolve() + // Screensharing must work even without "mochi.test," in allowed_domains .then(() => pushPrefs(["media.getusermedia.screensharing.allowed_domains", "mozilla.github.io,*.bugzilla.mozilla.org"])) - .then(() => mustFailWith("Screensharing if absent in allowed_domains", - "NotAllowedError", - () => navigator.mediaDevices.getUserMedia({ - video: videoConstraints[0], fake: false - }))) - .then(() => pushPrefs(["media.getusermedia.screensharing.allowed_domains", - "mozilla.github.io,mochi.test,*.bugzilla.mozilla.org"])) .then(() => getUserMedia(constraints).then(stream => { var playback = new LocalMediaStreamPlayback(testVideo, stream); return playback.playMediaWithDeprecatedStreamStop(false); diff --git a/dom/media/wave/WaveDemuxer.cpp b/dom/media/wave/WaveDemuxer.cpp index 23aba9a04ca6..387a7567598e 100644 --- a/dom/media/wave/WaveDemuxer.cpp +++ b/dom/media/wave/WaveDemuxer.cpp @@ -133,8 +133,11 @@ WAVTrackDemuxer::Init() } break; } else { + mOffset += aChunkSize; // Skip other irrelevant chunks. + } + if (mOffset & 1) { // Wave files are 2-byte aligned so we need to round up - mOffset += (aChunkSize + 1) & ~1; // Skip other irrelevant chunks. + mOffset += 1; } mHeaderParser.Reset(); } diff --git a/dom/network/moz.build b/dom/network/moz.build index a459fbd31c2a..63e5c75c0cd6 100644 --- a/dom/network/moz.build +++ b/dom/network/moz.build @@ -6,9 +6,6 @@ DIRS += ['interfaces'] -if CONFIG['MOZ_B2G_RIL']: - XPCSHELL_TESTS_MANIFESTS += ['tests/unit_stats/xpcshell.ini'] - MOCHITEST_CHROME_MANIFESTS += ['tests/chrome.ini'] MOCHITEST_MANIFESTS += ['tests/mochitest.ini'] diff --git a/dom/permission/moz.build b/dom/permission/moz.build index ef90d32a45ba..0be8a7535be7 100644 --- a/dom/permission/moz.build +++ b/dom/permission/moz.build @@ -31,9 +31,6 @@ XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini'] MOCHITEST_MANIFESTS += ['tests/mochitest.ini'] -if CONFIG['MOZ_B2G_RIL']: - MOCHITEST_MANIFESTS += ['tests/mochitest-ril.ini'] - if CONFIG['MOZ_TIME_MANAGER']: MOCHITEST_MANIFESTS += ['tests/mochitest-time.ini'] diff --git a/dom/secureelement/moz.build b/dom/secureelement/moz.build index 0b475671543e..a2c87b0140f5 100644 --- a/dom/secureelement/moz.build +++ b/dom/secureelement/moz.build @@ -34,11 +34,6 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['MOZ_SECUREELEMENT']: XPCSHELL_TESTS_MANIFESTS += [ 'tests/unit/xpcshell.ini' ] - if CONFIG['MOZ_B2G_RIL']: - EXTRA_COMPONENTS += [ - 'gonk/UiccConnector.js', - 'gonk/UiccConnector.manifest', - ] include('/ipc/chromium/chromium-config.mozbuild') diff --git a/dom/security/test/hsts/browser.ini b/dom/security/test/hsts/browser.ini index 115c89a29d54..d4fb8762c058 100644 --- a/dom/security/test/hsts/browser.ini +++ b/dom/security/test/hsts/browser.ini @@ -1,4 +1,5 @@ [DEFAULT] +skip-if = (os == 'linux' && debug && bits == 32) # bug 1311599 support-files = head.js file_priming-top.html diff --git a/dom/system/gonk/AudioManager.cpp b/dom/system/gonk/AudioManager.cpp index 9e25770bcfa9..4c8896f8c0e7 100644 --- a/dom/system/gonk/AudioManager.cpp +++ b/dom/system/gonk/AudioManager.cpp @@ -21,9 +21,6 @@ #include "AudioManager.h" #include "nsIObserverService.h" -#ifdef MOZ_B2G_RIL -#include "nsIRadioInterfaceLayer.h" -#endif #include "nsISettingsService.h" #include "nsPrintfCString.h" @@ -694,9 +691,6 @@ AudioManager::AudioManager() , mA2dpSwitchDone(true) #endif , mObserver(new HeadphoneSwitchObserver()) -#ifdef MOZ_B2G_RIL - , mMuteCallToRIL(false) -#endif { for (uint32_t idx = 0; idx < MOZ_ARRAY_LENGTH(kAudioDeviceInfos); ++idx) { mAudioDeviceTableIdMaps.Put(kAudioDeviceInfos[idx].value, idx); @@ -754,13 +748,6 @@ AudioManager::AudioManager() NS_WARNING("Failed to add audio-channel-process-changed observer!"); } -#ifdef MOZ_B2G_RIL - char value[PROPERTY_VALUE_MAX]; - property_get("ro.moz.mute.call.to_ril", value, "false"); - if (!strcmp(value, "true")) { - mMuteCallToRIL = true; - } -#endif } AudioManager::~AudioManager() { @@ -815,13 +802,6 @@ AudioManager::GetInstance() NS_IMETHODIMP AudioManager::GetMicrophoneMuted(bool* aMicrophoneMuted) { -#ifdef MOZ_B2G_RIL - if (mMuteCallToRIL) { - // Simply return cached mIsMicMuted if mute call go via RIL. - *aMicrophoneMuted = mIsMicMuted; - return NS_OK; - } -#endif if (AudioSystem::isMicrophoneMuted(aMicrophoneMuted)) { return NS_ERROR_FAILURE; @@ -833,15 +813,6 @@ NS_IMETHODIMP AudioManager::SetMicrophoneMuted(bool aMicrophoneMuted) { if (!AudioSystem::muteMicrophone(aMicrophoneMuted)) { -#ifdef MOZ_B2G_RIL - if (mMuteCallToRIL) { - // Extra mute request to RIL for specific platform. - nsCOMPtr ril = do_GetService("@mozilla.org/ril;1"); - NS_ENSURE_TRUE(ril, NS_ERROR_FAILURE); - ril->SetMicrophoneMuted(aMicrophoneMuted); - mIsMicMuted = aMicrophoneMuted; - } -#endif return NS_OK; } return NS_ERROR_FAILURE; diff --git a/dom/system/gonk/AudioManager.h b/dom/system/gonk/AudioManager.h index 6b0d46fc2f89..f56eaad6cfb8 100644 --- a/dom/system/gonk/AudioManager.h +++ b/dom/system/gonk/AudioManager.h @@ -141,11 +141,6 @@ protected: private: nsAutoPtr mObserver; -#ifdef MOZ_B2G_RIL - bool mMuteCallToRIL; - // mIsMicMuted is only used for toggling mute call to RIL. - bool mIsMicMuted; -#endif void HandleBluetoothStatusChanged(nsISupports* aSubject, const char* aTopic, diff --git a/dom/system/gonk/GonkGPSGeolocationProvider.cpp b/dom/system/gonk/GonkGPSGeolocationProvider.cpp index c20fd69c84d0..9ce6ce2e5a30 100644 --- a/dom/system/gonk/GonkGPSGeolocationProvider.cpp +++ b/dom/system/gonk/GonkGPSGeolocationProvider.cpp @@ -39,18 +39,6 @@ #include "mozilla/dom/ScriptSettings.h" #include "mozilla/dom/SettingChangeNotificationBinding.h" -#ifdef MOZ_B2G_RIL -#include "mozstumbler/MozStumbler.h" -#include "nsIIccInfo.h" -#include "nsIMobileConnectionInfo.h" -#include "nsIMobileConnectionService.h" -#include "nsIMobileCellInfo.h" -#include "nsIMobileNetworkInfo.h" -#include "nsIRadioInterfaceLayer.h" -#include "nsIIccService.h" -#include "nsIDataCallManager.h" -#endif - #ifdef AGPS_TYPE_INVALID #define AGPS_HAVE_DUAL_APN #endif @@ -70,14 +58,7 @@ using namespace mozilla::dom; static const int kDefaultPeriod = 1000; // ms static bool gDebug_isLoggingEnabled = false; static bool gDebug_isGPSLocationIgnored = false; -#ifdef MOZ_B2G_RIL -static const char* kNetworkConnStateChangedTopic = "network-connection-state-changed"; -#endif static const char* kMozSettingsChangedTopic = "mozsettings-changed"; -#ifdef MOZ_B2G_RIL -static const char* kPrefRilNumRadioInterfaces = "ril.numRadioInterfaces"; -static const char* kSettingRilDefaultServiceId = "ril.data.defaultServiceId"; -#endif // Both of these settings can be toggled in the Gaia Developer settings screen. static const char* kSettingDebugEnabled = "geolocation.debugging.enabled"; static const char* kSettingDebugGpsIgnored = "geolocation.debugging.gps-locations-ignored"; @@ -93,11 +74,6 @@ NS_IMPL_ISUPPORTS(GonkGPSGeolocationProvider, /* static */ GonkGPSGeolocationProvider* GonkGPSGeolocationProvider::sSingleton = nullptr; GpsCallbacks GonkGPSGeolocationProvider::mCallbacks; -#ifdef MOZ_B2G_RIL -AGpsCallbacks GonkGPSGeolocationProvider::mAGPSCallbacks; -AGpsRilCallbacks GonkGPSGeolocationProvider::mAGPSRILCallbacks; -#endif // MOZ_B2G_RIL - void GonkGPSGeolocationProvider::LocationCallback(GpsLocation* location) @@ -156,9 +132,6 @@ GonkGPSGeolocationProvider::LocationCallback(GpsLocation* location) RefPtr event = new UpdateLocationEvent(somewhere); NS_DispatchToMainThread(event); -#ifdef MOZ_B2G_RIL - MozStumble(somewhere); -#endif } class NotifyObserversGPSTask final : public Runnable @@ -280,10 +253,6 @@ GonkGPSGeolocationProvider::SetCapabilitiesCallback(uint32_t capabilities) GonkGPSGeolocationProvider::GetSingleton(); provider->mSupportsScheduling = mCapabilities & GPS_CAPABILITY_SCHEDULING; -#ifdef MOZ_B2G_RIL - provider->mSupportsMSB = mCapabilities & GPS_CAPABILITY_MSB; - provider->mSupportsMSA = mCapabilities & GPS_CAPABILITY_MSA; -#endif provider->mSupportsSingleShot = mCapabilities & GPS_CAPABILITY_SINGLE_SHOT; #ifdef GPS_CAPABILITY_ON_DEMAND_TIME provider->mSupportsTimeInjection = mCapabilities & GPS_CAPABILITY_ON_DEMAND_TIME; @@ -332,90 +301,9 @@ GonkGPSGeolocationProvider::RequestUtcTimeCallback() { } -#ifdef MOZ_B2G_RIL -void -GonkGPSGeolocationProvider::AGPSStatusCallback(AGpsStatus* status) -{ - MOZ_ASSERT(status); - - class AGPSStatusEvent : public Runnable { - public: - AGPSStatusEvent(AGpsStatusValue aStatus) - : mStatus(aStatus) - {} - NS_IMETHOD Run() override { - RefPtr provider = - GonkGPSGeolocationProvider::GetSingleton(); - - switch (mStatus) { - case GPS_REQUEST_AGPS_DATA_CONN: - provider->RequestDataConnection(); - break; - case GPS_RELEASE_AGPS_DATA_CONN: - provider->ReleaseDataConnection(); - break; - } - return NS_OK; - } - private: - AGpsStatusValue mStatus; - }; - - NS_DispatchToMainThread(new AGPSStatusEvent(status->status)); -} - -void -GonkGPSGeolocationProvider::AGPSRILSetIDCallback(uint32_t flags) -{ - class RequestSetIDEvent : public Runnable { - public: - RequestSetIDEvent(uint32_t flags) - : mFlags(flags) - {} - NS_IMETHOD Run() override { - RefPtr provider = - GonkGPSGeolocationProvider::GetSingleton(); - provider->RequestSetID(mFlags); - return NS_OK; - } - private: - uint32_t mFlags; - }; - - NS_DispatchToMainThread(new RequestSetIDEvent(flags)); -} - -void -GonkGPSGeolocationProvider::AGPSRILRefLocCallback(uint32_t flags) -{ - class RequestRefLocEvent : public Runnable { - public: - RequestRefLocEvent() - {} - NS_IMETHOD Run() override { - RefPtr provider = - GonkGPSGeolocationProvider::GetSingleton(); - provider->SetReferenceLocation(); - return NS_OK; - } - }; - - if (flags & AGPS_RIL_REQUEST_REFLOC_CELLID) { - NS_DispatchToMainThread(new RequestRefLocEvent()); - } -} -#endif // MOZ_B2G_RIL - GonkGPSGeolocationProvider::GonkGPSGeolocationProvider() : mStarted(false) , mSupportsScheduling(false) -#ifdef MOZ_B2G_RIL - , mSupportsMSB(false) - , mSupportsMSA(false) - , mRilDataServiceId(0) - , mNumberOfRilServices(1) - , mObservingNetworkConnStateChange(false) -#endif , mObservingSettingsChange(false) , mSupportsSingleShot(false) , mSupportsTimeInjection(false) @@ -464,66 +352,6 @@ GonkGPSGeolocationProvider::GetGPSInterface() return result; } -#ifdef MOZ_B2G_RIL -int32_t -GonkGPSGeolocationProvider::GetDataConnectionState() -{ - if (!mRadioInterface) { - return nsINetworkInfo::NETWORK_STATE_UNKNOWN; - } - - int32_t state; - mRadioInterface->GetDataCallStateByType( - nsINetworkInfo::NETWORK_TYPE_MOBILE_SUPL, &state); - return state; -} - -void -GonkGPSGeolocationProvider::SetAGpsDataConn(nsAString& aApn) -{ - MOZ_ASSERT(NS_IsMainThread()); - MOZ_ASSERT(mAGpsInterface); - - bool hasUpdateNetworkAvailability = false; - if (mAGpsRilInterface && - mAGpsRilInterface->size >= sizeof(AGpsRilInterface) && - mAGpsRilInterface->update_network_availability) { - hasUpdateNetworkAvailability = true; - } - - int32_t connectionState = GetDataConnectionState(); - NS_ConvertUTF16toUTF8 apn(aApn); - if (connectionState == nsINetworkInfo::NETWORK_STATE_CONNECTED) { - // The definition of availability is - // 1. The device is connected to the home network - // 2. The device is connected to a foreign network and data - // roaming is enabled - // RIL turns on/off data connection automatically when the data - // roaming setting changes. - if (hasUpdateNetworkAvailability) { - mAGpsRilInterface->update_network_availability(true, apn.get()); - } -#ifdef AGPS_HAVE_DUAL_APN - mAGpsInterface->data_conn_open(AGPS_TYPE_SUPL, - apn.get(), - AGPS_APN_BEARER_IPV4); -#else - mAGpsInterface->data_conn_open(apn.get()); -#endif - } else if (connectionState == nsINetworkInfo::NETWORK_STATE_DISCONNECTED) { - if (hasUpdateNetworkAvailability) { - mAGpsRilInterface->update_network_availability(false, apn.get()); - } -#ifdef AGPS_HAVE_DUAL_APN - mAGpsInterface->data_conn_closed(AGPS_TYPE_SUPL); -#else - mAGpsInterface->data_conn_closed(); -#endif - } -} - -#endif // MOZ_B2G_RIL - void GonkGPSGeolocationProvider::RequestSettingValue(const char* aKey) { @@ -548,199 +376,6 @@ GonkGPSGeolocationProvider::RequestSettingValue(const char* aKey) } } -#ifdef MOZ_B2G_RIL -void -GonkGPSGeolocationProvider::RequestDataConnection() -{ - MOZ_ASSERT(NS_IsMainThread()); - - if (!mRadioInterface) { - return; - } - - if (GetDataConnectionState() == nsINetworkInfo::NETWORK_STATE_CONNECTED) { - // Connection is already established, we don't need to setup again. - // We just get supl APN and make AGPS data connection state updated. - RequestSettingValue("ril.supl.apn"); - } else { - mRadioInterface->SetupDataCallByType(nsINetworkInfo::NETWORK_TYPE_MOBILE_SUPL); - } -} - -void -GonkGPSGeolocationProvider::ReleaseDataConnection() -{ - MOZ_ASSERT(NS_IsMainThread()); - - if (!mRadioInterface) { - return; - } - - mRadioInterface->DeactivateDataCallByType(nsINetworkInfo::NETWORK_TYPE_MOBILE_SUPL); -} - -void -GonkGPSGeolocationProvider::RequestSetID(uint32_t flags) -{ - MOZ_ASSERT(NS_IsMainThread()); - - if (!mRadioInterface || - !mAGpsInterface) { - return; - } - - AGpsSetIDType type = AGPS_SETID_TYPE_NONE; - - nsCOMPtr iccService = - do_GetService(ICC_SERVICE_CONTRACTID); - NS_ENSURE_TRUE_VOID(iccService); - - nsCOMPtr icc; - iccService->GetIccByServiceId(mRilDataServiceId, getter_AddRefs(icc)); - NS_ENSURE_TRUE_VOID(icc); - - nsAutoString id; - - if (flags & AGPS_RIL_REQUEST_SETID_IMSI) { - type = AGPS_SETID_TYPE_IMSI; - icc->GetImsi(id); - } - - if (flags & AGPS_RIL_REQUEST_SETID_MSISDN) { - nsCOMPtr iccInfo; - icc->GetIccInfo(getter_AddRefs(iccInfo)); - if (iccInfo) { - nsCOMPtr gsmIccInfo = do_QueryInterface(iccInfo); - if (gsmIccInfo) { - type = AGPS_SETID_TYPE_MSISDN; - gsmIccInfo->GetMsisdn(id); - } - } - } - - NS_ConvertUTF16toUTF8 idBytes(id); - mAGpsRilInterface->set_set_id(type, idBytes.get()); -} - -namespace { -int -ConvertToGpsRefLocationType(const nsAString& aConnectionType) -{ - const char* GSM_TYPES[] = { "gsm", "gprs", "edge" }; - const char* UMTS_TYPES[] = { "umts", "hspda", "hsupa", "hspa", "hspa+" }; - - for (auto type: GSM_TYPES) { - if (aConnectionType.EqualsASCII(type)) { - return AGPS_REF_LOCATION_TYPE_GSM_CELLID; - } - } - - for (auto type: UMTS_TYPES) { - if (aConnectionType.EqualsASCII(type)) { - return AGPS_REF_LOCATION_TYPE_UMTS_CELLID; - } - } - - if (gDebug_isLoggingEnabled) { - DBG("geo: Unsupported connection type %s\n", - NS_ConvertUTF16toUTF8(aConnectionType).get()); - } - return AGPS_REF_LOCATION_TYPE_GSM_CELLID; -} -} // namespace - -void -GonkGPSGeolocationProvider::SetReferenceLocation() -{ - MOZ_ASSERT(NS_IsMainThread()); - - if (!mRadioInterface || - !mAGpsRilInterface) { - return; - } - - AGpsRefLocation location; - - nsCOMPtr service = - do_GetService(NS_MOBILE_CONNECTION_SERVICE_CONTRACTID); - if (!service) { - NS_WARNING("Cannot get MobileConnectionService"); - return; - } - - nsCOMPtr connection; - service->GetItemByServiceId(mRilDataServiceId, getter_AddRefs(connection)); - NS_ENSURE_TRUE_VOID(connection); - - nsCOMPtr voice; - connection->GetVoice(getter_AddRefs(voice)); - if (voice) { - nsAutoString connectionType; - nsresult rv = voice->GetType(connectionType); - if (NS_WARN_IF(NS_FAILED(rv))) { - return; - } - location.type = ConvertToGpsRefLocationType(connectionType); - - nsCOMPtr networkInfo; - voice->GetNetwork(getter_AddRefs(networkInfo)); - if (networkInfo) { - nsresult result; - nsAutoString mcc, mnc; - - networkInfo->GetMcc(mcc); - networkInfo->GetMnc(mnc); - - location.u.cellID.mcc = mcc.ToInteger(&result); - if (result != NS_OK) { - NS_WARNING("Cannot parse mcc to integer"); - location.u.cellID.mcc = 0; - } - - location.u.cellID.mnc = mnc.ToInteger(&result); - if (result != NS_OK) { - NS_WARNING("Cannot parse mnc to integer"); - location.u.cellID.mnc = 0; - } - } else { - NS_WARNING("Cannot get mobile network info."); - location.u.cellID.mcc = 0; - location.u.cellID.mnc = 0; - } - - nsCOMPtr cell; - voice->GetCell(getter_AddRefs(cell)); - if (cell) { - int32_t lac; - int64_t cid; - - cell->GetGsmLocationAreaCode(&lac); - // The valid range of LAC is 0x0 to 0xffff which is defined in - // hardware/ril/include/telephony/ril.h - if (lac >= 0x0 && lac <= 0xffff) { - location.u.cellID.lac = lac; - } - - cell->GetGsmCellId(&cid); - // The valid range of cell id is 0x0 to 0xffffffff which is defined in - // hardware/ril/include/telephony/ril.h - if (cid >= 0x0 && cid <= 0xffffffff) { - location.u.cellID.cid = cid; - } - } else { - NS_WARNING("Cannot get mobile gell info."); - location.u.cellID.lac = -1; - location.u.cellID.cid = -1; - } - } else { - NS_WARNING("Cannot get mobile connection info."); - return; - } - mAGpsRilInterface->set_ref_location(&location, sizeof(location)); -} - -#endif // MOZ_B2G_RIL - void GonkGPSGeolocationProvider::InjectLocation(double latitude, double longitude, @@ -784,34 +419,12 @@ GonkGPSGeolocationProvider::Init() mCallbacks.request_utc_time_cb = RequestUtcTimeCallback; #endif -#ifdef MOZ_B2G_RIL - mAGPSCallbacks.status_cb = AGPSStatusCallback; - mAGPSCallbacks.create_thread_cb = CreateThreadCallback; - - mAGPSRILCallbacks.request_setid = AGPSRILSetIDCallback; - mAGPSRILCallbacks.request_refloc = AGPSRILRefLocCallback; - mAGPSRILCallbacks.create_thread_cb = CreateThreadCallback; -#endif } if (mGpsInterface->init(&mCallbacks) != 0) { return; } -#ifdef MOZ_B2G_RIL - mAGpsInterface = - static_cast(mGpsInterface->get_extension(AGPS_INTERFACE)); - if (mAGpsInterface) { - mAGpsInterface->init(&mAGPSCallbacks); - } - - mAGpsRilInterface = - static_cast(mGpsInterface->get_extension(AGPS_RIL_INTERFACE)); - if (mAGpsRilInterface) { - mAGpsRilInterface->init(&mAGPSRILCallbacks); - } -#endif - NS_DispatchToMainThread(NewRunnableMethod(this, &GonkGPSGeolocationProvider::StartGPS)); } @@ -823,24 +436,8 @@ GonkGPSGeolocationProvider::StartGPS() int32_t update = Preferences::GetInt("geo.default.update", kDefaultPeriod); -#ifdef MOZ_B2G_RIL - if (mSupportsMSA || mSupportsMSB) { - SetupAGPS(); - } -#endif - int positionMode = GPS_POSITION_MODE_STANDALONE; -#ifdef MOZ_B2G_RIL - bool singleShot = false; - - // XXX: If we know this is a single shot request, use MSA can be faster. - if (singleShot && mSupportsMSA) { - positionMode = GPS_POSITION_MODE_MS_ASSISTED; - } else if (mSupportsMSB) { - positionMode = GPS_POSITION_MODE_MS_BASED; - } -#endif if (!mSupportsScheduling) { update = kDefaultPeriod; } @@ -856,43 +453,6 @@ GonkGPSGeolocationProvider::StartGPS() mGpsInterface->start(); } -#ifdef MOZ_B2G_RIL -void -GonkGPSGeolocationProvider::SetupAGPS() -{ - MOZ_ASSERT(NS_IsMainThread()); - MOZ_ASSERT(mAGpsInterface); - - const nsAdoptingCString& suplServer = Preferences::GetCString("geo.gps.supl_server"); - int32_t suplPort = Preferences::GetInt("geo.gps.supl_port", -1); - if (!suplServer.IsEmpty() && suplPort > 0) { - mAGpsInterface->set_server(AGPS_TYPE_SUPL, suplServer.get(), suplPort); - } else { - NS_WARNING("Cannot get SUPL server settings"); - return; - } - - // Request RIL date service ID for correct RadioInterface object first due to - // multi-SIM case needs it to handle AGPS related stuffs. For single SIM, 0 - // will be returned as default RIL data service ID. - RequestSettingValue(kSettingRilDefaultServiceId); -} - -void -GonkGPSGeolocationProvider::UpdateRadioInterface() -{ - nsCOMPtr ril = do_GetService("@mozilla.org/ril;1"); - NS_ENSURE_TRUE_VOID(ril); - ril->GetRadioInterface(mRilDataServiceId, getter_AddRefs(mRadioInterface)); -} - -bool -GonkGPSGeolocationProvider::IsValidRilServiceId(uint32_t aServiceId) -{ - return aServiceId < mNumberOfRilServices; -} -#endif // MOZ_B2G_RIL - NS_IMPL_ISUPPORTS(GonkGPSGeolocationProvider::NetworkLocationUpdate, nsIGeolocationUpdate) @@ -1013,9 +573,6 @@ GonkGPSGeolocationProvider::Startup() } mStarted = true; -#ifdef MOZ_B2G_RIL - mNumberOfRilServices = Preferences::GetUint(kPrefRilNumRadioInterfaces, 1); -#endif return NS_OK; } @@ -1046,14 +603,6 @@ GonkGPSGeolocationProvider::Shutdown() nsCOMPtr obs = services::GetObserverService(); if (obs) { nsresult rv; -#ifdef MOZ_B2G_RIL - rv = obs->RemoveObserver(this, kNetworkConnStateChangedTopic); - if (NS_FAILED(rv)) { - NS_WARNING("geo: Gonk GPS network state RemoveObserver failed"); - } else { - mObservingNetworkConnStateChange = false; - } -#endif rv = obs->RemoveObserver(this, kMozSettingsChangedTopic); if (NS_FAILED(rv)) { NS_WARNING("geo: Gonk GPS mozsettings RemoveObserver failed"); @@ -1115,59 +664,6 @@ GonkGPSGeolocationProvider::Observe(nsISupports* aSubject, { MOZ_ASSERT(NS_IsMainThread()); -#ifdef MOZ_B2G_RIL - if (!strcmp(aTopic, kNetworkConnStateChangedTopic)) { - nsCOMPtr info = do_QueryInterface(aSubject); - if (!info) { - return NS_OK; - } - nsCOMPtr rilInfo = do_QueryInterface(aSubject); - if (mAGpsRilInterface && mAGpsRilInterface->update_network_state) { - int32_t state; - int32_t type; - info->GetState(&state); - info->GetType(&type); - bool connected = (state == nsINetworkInfo::NETWORK_STATE_CONNECTED); - bool roaming = false; - int gpsNetworkType = ConvertToGpsNetworkType(type); - if (gpsNetworkType >= 0) { - if (rilInfo) { - do { - nsCOMPtr service = - do_GetService(NS_MOBILE_CONNECTION_SERVICE_CONTRACTID); - if (!service) { - break; - } - - nsCOMPtr connection; - service->GetItemByServiceId(mRilDataServiceId, getter_AddRefs(connection)); - if (!connection) { - break; - } - - nsCOMPtr voice; - connection->GetVoice(getter_AddRefs(voice)); - if (voice) { - voice->GetRoaming(&roaming); - } - } while (0); - } - mAGpsRilInterface->update_network_state( - connected, - gpsNetworkType, - roaming, - /* extra_info = */ nullptr); - } - } - // No data connection - if (!rilInfo) { - return NS_OK; - } - - RequestSettingValue("ril.supl.apn"); - } -#endif - if (!strcmp(aTopic, kMozSettingsChangedTopic)) { // Read changed setting value RootedDictionary setting(RootingCx()); @@ -1189,18 +685,6 @@ GonkGPSGeolocationProvider::Observe(nsISupports* aSubject, setting.mValue.isBoolean() ? setting.mValue.toBoolean() : false; return NS_OK; } -#ifdef MOZ_B2G_RIL - else if (setting.mKey.EqualsASCII(kSettingRilDefaultServiceId)) { - if (!setting.mValue.isNumber() || - !IsValidRilServiceId(setting.mValue.toNumber())) { - return NS_ERROR_UNEXPECTED; - } - - mRilDataServiceId = setting.mValue.toNumber(); - UpdateRadioInterface(); - return NS_OK; - } -#endif } return NS_OK; @@ -1212,50 +696,6 @@ NS_IMETHODIMP GonkGPSGeolocationProvider::Handle(const nsAString& aName, JS::Handle aResult) { -#ifdef MOZ_B2G_RIL - if (aName.EqualsLiteral("ril.supl.apn")) { - // When we get the APN, we attempt to call data_call_open of AGPS. - if (aResult.isString()) { - JSContext *cx = nsContentUtils::GetCurrentJSContext(); - NS_ENSURE_TRUE(cx, NS_OK); - - // NB: No need to enter a compartment to read the contents of a string. - nsAutoJSString apn; - if (!apn.init(cx, aResult.toString())) { - return NS_ERROR_FAILURE; - } - if (!apn.IsEmpty()) { - SetAGpsDataConn(apn); - } - } - } else if (aName.EqualsASCII(kSettingRilDefaultServiceId)) { - uint32_t id = 0; - JSContext *cx = nsContentUtils::GetCurrentJSContext(); - NS_ENSURE_TRUE(cx, NS_OK); - if (!JS::ToUint32(cx, aResult, &id)) { - return NS_ERROR_FAILURE; - } - - if (!IsValidRilServiceId(id)) { - return NS_ERROR_UNEXPECTED; - } - - mRilDataServiceId = id; - UpdateRadioInterface(); - - MOZ_ASSERT(!mObservingNetworkConnStateChange); - - // Now we know which service ID to deal with, observe necessary topic then - nsCOMPtr obs = services::GetObserverService(); - NS_ENSURE_TRUE(obs, NS_OK); - - if (NS_FAILED(obs->AddObserver(this, kNetworkConnStateChangedTopic, false))) { - NS_WARNING("Failed to add network state changed observer!"); - } else { - mObservingNetworkConnStateChange = true; - } - } -#endif // MOZ_B2G_RIL return NS_OK; } diff --git a/dom/system/gonk/GonkGPSGeolocationProvider.h b/dom/system/gonk/GonkGPSGeolocationProvider.h index c839f00615ac..514398edf949 100644 --- a/dom/system/gonk/GonkGPSGeolocationProvider.h +++ b/dom/system/gonk/GonkGPSGeolocationProvider.h @@ -22,9 +22,6 @@ #include "nsIGeolocationProvider.h" #include "nsIObserver.h" #include "nsIDOMGeoPosition.h" -#ifdef MOZ_B2G_RIL -#include "nsIRadioInterfaceLayer.h" -#endif #include "nsISettingsService.h" class nsIThread; @@ -64,34 +61,14 @@ private: static void ReleaseWakelockCallback(); static pthread_t CreateThreadCallback(const char* name, void (*start)(void*), void* arg); static void RequestUtcTimeCallback(); -#ifdef MOZ_B2G_RIL - static void AGPSStatusCallback(AGpsStatus* status); - static void AGPSRILSetIDCallback(uint32_t flags); - static void AGPSRILRefLocCallback(uint32_t flags); -#endif static GpsCallbacks mCallbacks; -#ifdef MOZ_B2G_RIL - static AGpsCallbacks mAGPSCallbacks; - static AGpsRilCallbacks mAGPSRILCallbacks; -#endif void Init(); void StartGPS(); void ShutdownGPS(); void InjectLocation(double latitude, double longitude, float accuracy); void RequestSettingValue(const char* aKey); -#ifdef MOZ_B2G_RIL - void UpdateRadioInterface(); - bool IsValidRilServiceId(uint32_t aServiceId); - void SetupAGPS(); - int32_t GetDataConnectionState(); - void SetAGpsDataConn(nsAString& aApn); - void RequestDataConnection(); - void ReleaseDataConnection(); - void RequestSetID(uint32_t flags); - void SetReferenceLocation(); -#endif const GpsInterface* GetGPSInterface(); @@ -100,26 +77,11 @@ private: bool mStarted; bool mSupportsScheduling; -#ifdef MOZ_B2G_RIL - bool mSupportsMSB; - bool mSupportsMSA; - uint32_t mRilDataServiceId; - // mNumberOfRilServices indicates how many SIM slots supported on device, and - // RadioInterfaceLayer.js takes responsibility to set up the corresponding - // preference value. - uint32_t mNumberOfRilServices; - bool mObservingNetworkConnStateChange; -#endif bool mObservingSettingsChange; bool mSupportsSingleShot; bool mSupportsTimeInjection; const GpsInterface* mGpsInterface; -#ifdef MOZ_B2G_RIL - const AGpsInterface* mAGpsInterface; - const AGpsRilInterface* mAGpsRilInterface; - nsCOMPtr mRadioInterface; -#endif nsCOMPtr mLocationCallback; nsCOMPtr mInitThread; nsCOMPtr mNetworkLocationProvider; diff --git a/dom/system/gonk/SystemWorkerManager.cpp b/dom/system/gonk/SystemWorkerManager.cpp index c94fbeeda8d1..ee3fc8de3902 100644 --- a/dom/system/gonk/SystemWorkerManager.cpp +++ b/dom/system/gonk/SystemWorkerManager.cpp @@ -28,9 +28,6 @@ #include "TimeZoneSettingObserver.h" #include "AudioManager.h" #include "mozilla/dom/ScriptSettings.h" -#ifdef MOZ_B2G_RIL -#include "mozilla/ipc/Ril.h" -#endif #include "mozilla/ipc/KeyStore.h" #include "nsIObserverService.h" #include "nsServiceManagerUtils.h" @@ -115,10 +112,6 @@ SystemWorkerManager::Shutdown() ShutdownAutoMounter(); -#ifdef MOZ_B2G_RIL - RilWorker::Shutdown(); -#endif - nsCOMPtr wifi(do_QueryInterface(mWifiWorker)); if (wifi) { wifi->Shutdown(); @@ -184,22 +177,7 @@ SystemWorkerManager::RegisterRilWorker(unsigned int aClientId, JS::Handle aWorker, JSContext *aCx) { -#ifndef MOZ_B2G_RIL return NS_ERROR_NOT_IMPLEMENTED; -#else - NS_ENSURE_TRUE(aWorker.isObject(), NS_ERROR_UNEXPECTED); - - JSAutoCompartment ac(aCx, &aWorker.toObject()); - - WorkerCrossThreadDispatcher *wctd = - GetWorkerCrossThreadDispatcher(aCx, aWorker); - if (!wctd) { - NS_WARNING("Failed to GetWorkerCrossThreadDispatcher for ril"); - return NS_ERROR_FAILURE; - } - - return RilWorker::Register(aClientId, wctd); -#endif // MOZ_B2G_RIL } nsresult diff --git a/dom/system/gonk/moz.build b/dom/system/gonk/moz.build index cf78b4a9c183..229baaab4eb0 100644 --- a/dom/system/gonk/moz.build +++ b/dom/system/gonk/moz.build @@ -89,43 +89,6 @@ EXTRA_JS_MODULES += [ 'systemlibs.js', ] -if CONFIG['MOZ_B2G_RIL']: - EXPORTS += [ - 'mozstumbler/MozStumbler.h', - ] - UNIFIED_SOURCES += [ - 'mozstumbler/MozStumbler.cpp', - 'mozstumbler/StumblerLogging.cpp', - 'mozstumbler/UploadStumbleRunnable.cpp', - 'mozstumbler/WriteStumbleOnThread.cpp' - ] - XPIDL_SOURCES += [ - 'nsIDataCallInterfaceService.idl', - 'nsIDataCallManager.idl', - 'nsIGonkDataCallInterfaceService.idl', - 'nsIRadioInterfaceLayer.idl', - ] - EXTRA_COMPONENTS += [ - 'DataCallManager.js', - 'DataCallManager.manifest', - 'RILSystemMessengerHelper.js', - 'RILSystemMessengerHelper.manifest', - ] - EXTRA_JS_MODULES += [ - 'ril_consts.js', - 'ril_worker.js', - 'ril_worker_buf_object.js', - 'ril_worker_telephony_request_queue.js', - 'RILSystemMessenger.jsm', - ] - if not CONFIG['DISABLE_MOZ_RIL_GEOLOC']: - EXTRA_COMPONENTS += [ - 'DataCallInterfaceService.js', - 'DataCallInterfaceService.manifest', - 'RadioInterfaceLayer.js', - 'RadioInterfaceLayer.manifest', - ] - include('/ipc/chromium/chromium-config.mozbuild') DEFINES['HAVE_ANDROID_OS'] = True diff --git a/dom/tests/mochitest/general/test_interfaces.html b/dom/tests/mochitest/general/test_interfaces.html index 71b44f6ce5d8..043181a3cae8 100644 --- a/dom/tests/mochitest/general/test_interfaces.html +++ b/dom/tests/mochitest/general/test_interfaces.html @@ -565,7 +565,7 @@ var interfaceNamesInGlobalScope = // IMPORTANT: Do not change this list without review from a DOM peer! "HTMLVideoElement", // IMPORTANT: Do not change this list without review from a DOM peer! - "IdleDeadline", + {name: "IdleDeadline", nightly: true}, // IMPORTANT: Do not change this list without review from a DOM peer! "IDBCursor", // IMPORTANT: Do not change this list without review from a DOM peer! diff --git a/dom/webidl/KeyframeEffect.webidl b/dom/webidl/KeyframeEffect.webidl index c71fbf608a59..c5e790b3335f 100644 --- a/dom/webidl/KeyframeEffect.webidl +++ b/dom/webidl/KeyframeEffect.webidl @@ -25,9 +25,10 @@ dictionary KeyframeEffectOptions : AnimationEffectTimingProperties { // the first argument since we cannot convert a mixin into a union type // automatically. [Func="nsDocument::IsWebAnimationsEnabled", - Constructor((Element or CSSPseudoElement)? target, - object? keyframes, - optional (unrestricted double or KeyframeEffectOptions) options)] + Constructor ((Element or CSSPseudoElement)? target, + object? keyframes, + optional (unrestricted double or KeyframeEffectOptions) options), + Constructor (KeyframeEffectReadOnly source)] interface KeyframeEffectReadOnly : AnimationEffectReadOnly { // Bug 1241783: As with the constructor, we use (Element or CSSPseudoElement)? // for the type of |target| instead of Animatable? @@ -36,9 +37,6 @@ interface KeyframeEffectReadOnly : AnimationEffectReadOnly { readonly attribute CompositeOperation composite; readonly attribute DOMString spacing; - // Not yet implemented: - // KeyframeEffect clone(); - // We use object instead of ComputedKeyframe so that we can put the // property-value pairs on the object. [Throws] sequence getKeyframes(); @@ -66,7 +64,8 @@ partial interface KeyframeEffectReadOnly { [Func="nsDocument::IsWebAnimationsEnabled", Constructor ((Element or CSSPseudoElement)? target, object? keyframes, - optional (unrestricted double or KeyframeEffectOptions) options)] + optional (unrestricted double or KeyframeEffectOptions) options), + Constructor (KeyframeEffectReadOnly source)] interface KeyframeEffect : KeyframeEffectReadOnly { inherit attribute (Element or CSSPseudoElement)? target; inherit attribute IterationCompositeOperation iterationComposite; diff --git a/gfx/layers/Layers.h b/gfx/layers/Layers.h index 0c40f1d37287..805d41d48e4f 100644 --- a/gfx/layers/Layers.h +++ b/gfx/layers/Layers.h @@ -77,6 +77,7 @@ class Animation; class AnimationData; class AsyncCanvasRenderer; class AsyncPanZoomController; +class BasicLayerManager; class ClientLayerManager; class Layer; class LayerMetricsWrapper; @@ -196,6 +197,9 @@ public: virtual ClientLayerManager* AsClientLayerManager() { return nullptr; } + virtual BasicLayerManager* AsBasicLayerManager() + { return nullptr; } + /** * Returns true if this LayerManager is owned by an nsIWidget, * and is used for drawing into the widget. diff --git a/gfx/layers/basic/BasicLayers.h b/gfx/layers/basic/BasicLayers.h index e9ba3dc80460..beb4357bb4b0 100644 --- a/gfx/layers/basic/BasicLayers.h +++ b/gfx/layers/basic/BasicLayers.h @@ -74,6 +74,8 @@ protected: virtual ~BasicLayerManager(); public: + BasicLayerManager* AsBasicLayerManager() override { return this; } + /** * Set the default target context that will be used when BeginTransaction * is called. This can only be called outside a transaction. diff --git a/gfx/layers/composite/LayerManagerComposite.cpp b/gfx/layers/composite/LayerManagerComposite.cpp index a55ffff4b8d4..85c82ca503fd 100644 --- a/gfx/layers/composite/LayerManagerComposite.cpp +++ b/gfx/layers/composite/LayerManagerComposite.cpp @@ -42,6 +42,7 @@ #include "mozilla/layers/Effects.h" // for Effect, EffectChain, etc #include "mozilla/layers/LayerMetricsWrapper.h" // for LayerMetricsWrapper #include "mozilla/layers/LayersTypes.h" // for etc +#include "mozilla/widget/CompositorWidget.h" // for WidgetRenderingContext #include "ipc/CompositorBench.h" // for CompositorBench #include "ipc/ShadowLayerUtils.h" #include "mozilla/mozalloc.h" // for operator new, etc @@ -911,11 +912,18 @@ LayerManagerComposite::Render(const nsIntRegion& aInvalidRegion, const nsIntRegi mLastFrameMissedHWC = !!composer2D; } + mozilla::widget::WidgetRenderingContext widgetContext; +#if defined(XP_MACOSX) + widgetContext.mLayerManager = this; +#elif defined(MOZ_WIDGET_ANDROID) + widgetContext.mCompositor = GetCompositor(); +#endif + { PROFILER_LABEL("LayerManagerComposite", "PreRender", js::ProfileEntry::Category::GRAPHICS); - if (!mCompositor->GetWidget()->PreRender(this)) { + if (!mCompositor->GetWidget()->PreRender(&widgetContext)) { return; } } @@ -946,13 +954,13 @@ LayerManagerComposite::Render(const nsIntRegion& aInvalidRegion, const nsIntRegi } if (actualBounds.IsEmpty()) { - mCompositor->GetWidget()->PostRender(this); + mCompositor->GetWidget()->PostRender(&widgetContext); return; } // Allow widget to render a custom background. mCompositor->GetWidget()->DrawWindowUnderlay( - this, LayoutDeviceIntRect::FromUnknownRect(actualBounds)); + &widgetContext, LayoutDeviceIntRect::FromUnknownRect(actualBounds)); RefPtr previousTarget; if (haveLayerEffects) { @@ -980,7 +988,7 @@ LayerManagerComposite::Render(const nsIntRegion& aInvalidRegion, const nsIntRegi // Allow widget to render a custom foreground. mCompositor->GetWidget()->DrawWindowOverlay( - this, LayoutDeviceIntRect::FromUnknownRect(actualBounds)); + &widgetContext, LayoutDeviceIntRect::FromUnknownRect(actualBounds)); // Debugging RenderDebugOverlay(actualBounds); @@ -999,7 +1007,7 @@ LayerManagerComposite::Render(const nsIntRegion& aInvalidRegion, const nsIntRegi composer2D->Render(mCompositor->GetWidget()->RealWidget()); } - mCompositor->GetWidget()->PostRender(this); + mCompositor->GetWidget()->PostRender(&widgetContext); RecordFrame(); } diff --git a/ipc/moz.build b/ipc/moz.build index 0625f992c3fc..d01b7bbedb00 100644 --- a/ipc/moz.build +++ b/ipc/moz.build @@ -11,13 +11,10 @@ DIRS += [ 'testshell', ] -if CONFIG['MOZ_B2G_RIL']: - DIRS += ['ril'] - if CONFIG['MOZ_ENABLE_DBUS']: DIRS += ['dbus'] -if CONFIG['MOZ_B2G_RIL'] or CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': +if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': DIRS += ['unixfd', 'unixsocket'] if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': diff --git a/js/src/jit/RegisterAllocator.cpp b/js/src/jit/RegisterAllocator.cpp index a8fdddaae135..0ed1480fe9cd 100644 --- a/js/src/jit/RegisterAllocator.cpp +++ b/js/src/jit/RegisterAllocator.cpp @@ -549,7 +549,7 @@ RegisterAllocator::getMoveGroupAfter(LInstruction* ins) void RegisterAllocator::dumpInstructions() { -#ifdef DEBUG +#ifdef JS_JITSPEW fprintf(stderr, "Instructions:\n"); for (size_t blockIndex = 0; blockIndex < graph.numBlocks(); blockIndex++) { @@ -610,5 +610,5 @@ RegisterAllocator::dumpInstructions() } } fprintf(stderr, "\n"); -#endif // DEBUG +#endif // JS_JITSPEW } diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp index 3a12994b97f7..4f3185cb9e71 100644 --- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -8229,8 +8229,8 @@ nsLayoutUtils::DoLogTestDataForPaint(LayerManager* aManager, const std::string& aKey, const std::string& aValue) { - if (aManager->GetBackendType() == LayersBackend::LAYERS_CLIENT) { - static_cast(aManager)->LogTestDataForCurrentPaint(aScrollId, aKey, aValue); + if (ClientLayerManager* mgr = aManager->AsClientLayerManager()) { + mgr->LogTestDataForCurrentPaint(aScrollId, aKey, aValue); } } diff --git a/layout/generic/nsFlexContainerFrame.cpp b/layout/generic/nsFlexContainerFrame.cpp index a80fea5091fe..6b1840785adb 100644 --- a/layout/generic/nsFlexContainerFrame.cpp +++ b/layout/generic/nsFlexContainerFrame.cpp @@ -456,7 +456,7 @@ public: nscoord GetCrossSize() const { return mCrossSize; } nscoord GetCrossPosition() const { return mCrossPosn; } - nscoord ResolvedAscent() const { + nscoord ResolvedAscent(bool aUseFirstBaseline) const { if (mAscent == ReflowOutput::ASK_FOR_BASELINE) { // XXXdholbert We should probably be using the *container's* writing-mode // here, instead of the item's -- though it doesn't much matter right @@ -465,8 +465,13 @@ public: // will matter more (& can be expanded/tested) once we officially support // logical directions & vertical writing-modes in flexbox, in bug 1079155 // or a dependency. - // Use GetFirstLineBaseline(), or just GetBaseline() if that fails. - if (!nsLayoutUtils::GetFirstLineBaseline(mWM, mFrame, &mAscent)) { + // Use GetFirstLineBaseline() or GetLastLineBaseline() as appropriate, + // or just GetLogicalBaseline() if that fails. + bool found = aUseFirstBaseline ? + nsLayoutUtils::GetFirstLineBaseline(mWM, mFrame, &mAscent) : + nsLayoutUtils::GetLastLineBaseline(mWM, mFrame, &mAscent); + + if (!found) { mAscent = mFrame->GetLogicalBaseline(mWM); } } @@ -492,7 +497,8 @@ public: // from, so that it can look up the appropriate components from mMargin.) nscoord GetBaselineOffsetFromOuterCrossEdge( AxisEdgeType aEdge, - const FlexboxAxisTracker& aAxisTracker) const; + const FlexboxAxisTracker& aAxisTracker, + bool aUseFirstLineBaseline) const; float GetShareOfWeightSoFar() const { return mShareOfWeightSoFar; } @@ -826,7 +832,8 @@ public: mTotalInnerHypotheticalMainSize(0), mTotalOuterHypotheticalMainSize(0), mLineCrossSize(0), - mBaselineOffset(nscoord_MIN) + mFirstBaselineOffset(nscoord_MIN), + mLastBaselineOffset(nscoord_MIN) {} // Returns the sum of our FlexItems' outer hypothetical main sizes. @@ -925,8 +932,22 @@ public: * * If there are no baseline-aligned FlexItems, returns nscoord_MIN. */ - nscoord GetBaselineOffset() const { - return mBaselineOffset; + nscoord GetFirstBaselineOffset() const { + return mFirstBaselineOffset; + } + + /** + * Returns the offset within this line where any last baseline-aligned + * FlexItems should place their baseline. Opposite the case of the first + * baseline offset, this represents a distance from the line's cross-end + * edge (since last baseline-aligned items are flush to the cross-end edge). + * If we're internally reversing the axes, this instead represents the + * distance from the line's cross-start edge. + * + * If there are no last baseline-aligned FlexItems, returns nscoord_MIN. + */ + nscoord GetLastBaselineOffset() const { + return mLastBaselineOffset; } // Runs the "Resolving Flexible Lengths" algorithm from section 9.7 of the @@ -965,7 +986,8 @@ private: nscoord mTotalInnerHypotheticalMainSize; nscoord mTotalOuterHypotheticalMainSize; nscoord mLineCrossSize; - nscoord mBaselineOffset; + nscoord mFirstBaselineOffset; + nscoord mLastBaselineOffset; }; // Information about a strut left behind by a FlexItem that's been collapsed @@ -1891,19 +1913,20 @@ FlexItem::FlexItem(ReflowInput& aFlexItemReflowInput, } #endif // DEBUG - // If the flex item's inline axis is the same as the cross axis, then - // 'align-self:baseline' is identical to 'flex-start'. If that's the case, we - // just directly convert our align-self value here, so that we don't have to - // handle this with special cases elsewhere. - // Moreover: for the time being (until we support writing-modes), - // all inline axes are horizontal -- so we can just check if the cross axis - // is horizontal. - // FIXME: Once we support writing-mode (vertical text), this - // IsCrossAxisHorizontal check won't be sufficient anymore -- we'll actually - // need to compare our inline axis vs. the cross axis. - if (mAlignSelf == NS_STYLE_ALIGN_BASELINE && - aAxisTracker.IsCrossAxisHorizontal()) { - mAlignSelf = NS_STYLE_ALIGN_FLEX_START; + // Map align-self 'baseline' value to 'start' when baseline alignment + // is not possible because the FlexItem's writing mode is orthogonal to + // the main axis of the container. If that's the case, we just directly + // convert our align-self value here, so that we don't have to handle this + // with special cases elsewhere. + // We are treating this case as one where it is appropriate to use the + // fallback values defined at https://www.w3.org/TR/css-align-3/#baseline + if (aAxisTracker.IsRowOriented() == + aAxisTracker.GetWritingMode().IsOrthogonalTo(mWM)) { + if (mAlignSelf == NS_STYLE_ALIGN_BASELINE) { + mAlignSelf = NS_STYLE_ALIGN_FLEX_START; + } else if (mAlignSelf == NS_STYLE_ALIGN_LAST_BASELINE) { + mAlignSelf = NS_STYLE_ALIGN_FLEX_END; + } } } @@ -1976,7 +1999,8 @@ FlexItem::CheckForMinSizeAuto(const ReflowInput& aFlexItemReflowInput, nscoord FlexItem::GetBaselineOffsetFromOuterCrossEdge( AxisEdgeType aEdge, - const FlexboxAxisTracker& aAxisTracker) const + const FlexboxAxisTracker& aAxisTracker, + bool aUseFirstLineBaseline) const { // NOTE: Currently, 'mAscent' (taken from reflow) is an inherently vertical // measurement -- it's the distance from the border-top edge of this FlexItem @@ -1990,7 +2014,8 @@ FlexItem::GetBaselineOffsetFromOuterCrossEdge( AxisOrientationType crossAxis = aAxisTracker.GetCrossAxis(); mozilla::Side sideToMeasureFrom = kAxisOrientationToSidesMap[crossAxis][aEdge]; - nscoord marginTopToBaseline = ResolvedAscent() + mMargin.top; + nscoord marginTopToBaseline = ResolvedAscent(aUseFirstLineBaseline) + + mMargin.top; if (sideToMeasureFrom == eSideTop) { // Measuring from top (normal case): the distance from the margin-box top @@ -3089,15 +3114,19 @@ SingleLineCrossAxisPositionTracker:: void FlexLine::ComputeCrossSizeAndBaseline(const FlexboxAxisTracker& aAxisTracker) { - nscoord crossStartToFurthestBaseline = nscoord_MIN; - nscoord crossEndToFurthestBaseline = nscoord_MIN; + nscoord crossStartToFurthestFirstBaseline = nscoord_MIN; + nscoord crossEndToFurthestFirstBaseline = nscoord_MIN; + nscoord crossStartToFurthestLastBaseline = nscoord_MIN; + nscoord crossEndToFurthestLastBaseline = nscoord_MIN; nscoord largestOuterCrossSize = 0; for (const FlexItem* item = mItems.getFirst(); item; item = item->getNext()) { nscoord curOuterCrossSize = item->GetOuterCrossSize(aAxisTracker.GetCrossAxis()); - if (item->GetAlignSelf() == NS_STYLE_ALIGN_BASELINE && + if ((item->GetAlignSelf() == NS_STYLE_ALIGN_BASELINE || + item->GetAlignSelf() == NS_STYLE_ALIGN_LAST_BASELINE) && item->GetNumAutoMarginsInAxis(aAxisTracker.GetCrossAxis()) == 0) { + const bool useFirst = (item->GetAlignSelf() == NS_STYLE_ALIGN_BASELINE); // FIXME: Once we support "writing-mode", we'll have to do baseline // alignment in vertical flex containers here (w/ horizontal cross-axes). @@ -3129,16 +3158,24 @@ FlexLine::ComputeCrossSizeAndBaseline(const FlexboxAxisTracker& aAxisTracker) nscoord crossStartToBaseline = item->GetBaselineOffsetFromOuterCrossEdge(eAxisEdge_Start, - aAxisTracker); + aAxisTracker, + useFirst); nscoord crossEndToBaseline = curOuterCrossSize - crossStartToBaseline; // Now, update our "largest" values for these (across all the flex items // in this flex line), so we can use them in computing the line's cross // size below: - crossStartToFurthestBaseline = std::max(crossStartToFurthestBaseline, - crossStartToBaseline); - crossEndToFurthestBaseline = std::max(crossEndToFurthestBaseline, - crossEndToBaseline); + if (useFirst) { + crossStartToFurthestFirstBaseline = + std::max(crossStartToFurthestFirstBaseline, crossStartToBaseline); + crossEndToFurthestFirstBaseline = + std::max(crossEndToFurthestFirstBaseline, crossEndToBaseline); + } else { + crossStartToFurthestLastBaseline = + std::max(crossStartToFurthestLastBaseline, crossStartToBaseline); + crossEndToFurthestLastBaseline = + std::max(crossEndToFurthestLastBaseline, crossEndToBaseline); + } } else { largestOuterCrossSize = std::max(largestOuterCrossSize, curOuterCrossSize); } @@ -3148,17 +3185,24 @@ FlexLine::ComputeCrossSizeAndBaseline(const FlexboxAxisTracker& aAxisTracker) // end, depending on whether we've flipped the axes) to the furthest // item-baseline. The item(s) with that baseline will be exactly aligned with // the line's edge. - mBaselineOffset = aAxisTracker.AreAxesInternallyReversed() ? - crossEndToFurthestBaseline : crossStartToFurthestBaseline; + mFirstBaselineOffset = aAxisTracker.AreAxesInternallyReversed() ? + crossEndToFurthestFirstBaseline : crossStartToFurthestFirstBaseline; + + mLastBaselineOffset = aAxisTracker.AreAxesInternallyReversed() ? + crossStartToFurthestLastBaseline : crossEndToFurthestLastBaseline; // The line's cross-size is the larger of: // (a) [largest cross-start-to-baseline + largest baseline-to-cross-end] of // all baseline-aligned items with no cross-axis auto margins... // and - // (b) largest cross-size of all other children. - mLineCrossSize = std::max(crossStartToFurthestBaseline + - crossEndToFurthestBaseline, - largestOuterCrossSize); + // (b) [largest cross-start-to-baseline + largest baseline-to-cross-end] of + // all last baseline-aligned items with no cross-axis auto margins... + // and + // (c) largest cross-size of all other children. + mLineCrossSize = std::max( + std::max(crossStartToFurthestFirstBaseline + crossEndToFurthestFirstBaseline, + crossStartToFurthestLastBaseline + crossEndToFurthestLastBaseline), + largestOuterCrossSize); } void @@ -3288,8 +3332,7 @@ SingleLineCrossAxisPositionTracker:: switch (alignSelf) { case NS_STYLE_ALIGN_SELF_START: case NS_STYLE_ALIGN_SELF_END: - case NS_STYLE_ALIGN_LAST_BASELINE: - NS_WARNING("NYI: align-items/align-self:left/right/self-start/self-end/last baseline"); + NS_WARNING("NYI: align-items/align-self:left/right/self-start/self-end"); MOZ_FALLTHROUGH; case NS_STYLE_ALIGN_FLEX_START: // No space to skip over -- we're done. @@ -3302,19 +3345,25 @@ SingleLineCrossAxisPositionTracker:: mPosition += (aLine.GetLineCrossSize() - aItem.GetOuterCrossSize(mAxis)) / 2; break; - case NS_STYLE_ALIGN_BASELINE: { + case NS_STYLE_ALIGN_BASELINE: + case NS_STYLE_ALIGN_LAST_BASELINE: { + const bool useFirst = (alignSelf == NS_STYLE_ALIGN_BASELINE); + // Normally, baseline-aligned items are collectively aligned with the // line's cross-start edge; however, if our cross axis is (internally) // reversed, we instead align them with the cross-end edge. + // A similar logic holds for last baseline-aligned items, but in reverse. AxisEdgeType baselineAlignEdge = - aAxisTracker.AreAxesInternallyReversed() ? + aAxisTracker.AreAxesInternallyReversed() == useFirst ? eAxisEdge_End : eAxisEdge_Start; nscoord itemBaselineOffset = aItem.GetBaselineOffsetFromOuterCrossEdge(baselineAlignEdge, - aAxisTracker); + aAxisTracker, + useFirst); - nscoord lineBaselineOffset = aLine.GetBaselineOffset(); + nscoord lineBaselineOffset = useFirst ? aLine.GetFirstBaselineOffset() + : aLine.GetLastBaselineOffset(); NS_ASSERTION(lineBaselineOffset >= itemBaselineOffset, "failed at finding largest baseline offset"); @@ -3323,7 +3372,7 @@ SingleLineCrossAxisPositionTracker:: // to get the item's baseline to hit the line's baseline offset: nscoord baselineDiff = lineBaselineOffset - itemBaselineOffset; - if (aAxisTracker.AreAxesInternallyReversed()) { + if (aAxisTracker.AreAxesInternallyReversed() == useFirst) { // Advance to align item w/ line's flex-end edge (as in FLEX_END case): mPosition += aLine.GetLineCrossSize() - aItem.GetOuterCrossSize(mAxis); // ...and step *back* by the baseline adjustment: @@ -4276,7 +4325,7 @@ nsFlexContainerFrame::DoFlexLayout(nsPresContext* aPresContext, // measured from): nscoord flexContainerAscent; if (!aAxisTracker.AreAxesInternallyReversed()) { - nscoord firstLineBaselineOffset = lines.getFirst()->GetBaselineOffset(); + nscoord firstLineBaselineOffset = lines.getFirst()->GetFirstBaselineOffset(); if (firstLineBaselineOffset == nscoord_MIN) { // No baseline-aligned items in line. Use sentinel value to prompt us to // get baseline from the first FlexItem after we've reflowed it. @@ -4313,7 +4362,7 @@ nsFlexContainerFrame::DoFlexLayout(nsPresContext* aPresContext, // at the cross-end edge of that line, which the line's baseline offset is // measured from): if (aAxisTracker.AreAxesInternallyReversed()) { - nscoord lastLineBaselineOffset = lines.getLast()->GetBaselineOffset(); + nscoord lastLineBaselineOffset = lines.getLast()->GetFirstBaselineOffset(); if (lastLineBaselineOffset == nscoord_MIN) { // No baseline-aligned items in line. Use sentinel value to prompt us to // get baseline from the last FlexItem after we've reflowed it. @@ -4412,10 +4461,11 @@ nsFlexContainerFrame::DoFlexLayout(nsPresContext* aPresContext, // If this is our first item and we haven't established a baseline for // the container yet (i.e. if we don't have 'align-self: baseline' on any - // children), then use this child's baseline as the container's baseline. + // children), then use this child's first baseline as the container's + // baseline. if (item == firstItem && flexContainerAscent == nscoord_MIN) { - flexContainerAscent = itemNormalBPos + item->ResolvedAscent(); + flexContainerAscent = itemNormalBPos + item->ResolvedAscent(true); } } } diff --git a/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-001-ref.xhtml b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-001-ref.xhtml index 476b1e533825..e5efb756093f 100644 --- a/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-001-ref.xhtml +++ b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-001-ref.xhtml @@ -61,5 +61,13 @@ ital
ic
+
+
blk_1line
blk
2lines
super
sub
big
text
3lines
ital
ic
+
diff --git a/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-001a.xhtml b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-001a.xhtml index 5b8d4ebeea11..0460f4162f5f 100644 --- a/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-001a.xhtml +++ b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-001a.xhtml @@ -17,10 +17,15 @@ -
+
+
blk_1line
+
blk
2lines
+
super
+
sub
+
big
text
3lines
+ ital
ic
+
+
blk_1line
blk
2lines
super
diff --git a/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-001b.xhtml b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-001b.xhtml index 742f274f5fef..3a656e41e940 100644 --- a/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-001b.xhtml +++ b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-001b.xhtml @@ -19,11 +19,16 @@ -
+
+
blk_1line
+
blk
2lines
+
super
+
sub
+
big
text
3lines
+ ital
ic
+
+
blk_1line
blk
2lines
super
diff --git a/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-006-ref.xhtml b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-006-ref.xhtml new file mode 100644 index 000000000000..50036ff6d271 --- /dev/null +++ b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-006-ref.xhtml @@ -0,0 +1,51 @@ + + + + + + CSS Reftest Reference + + + + +
+
ortho
one line
two
lines
offset
+
+
+
ortho
one line
two
lines
offset
+
+ + diff --git a/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-006.xhtml b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-006.xhtml new file mode 100644 index 000000000000..417f966587d3 --- /dev/null +++ b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-006.xhtml @@ -0,0 +1,54 @@ + + + + + + CSS Test: Baseline alignment of block flex items with 'baseline' value for 'align-items' / 'align-self' against non-parallel writing-modes. + + + + + + +
+
ortho
+
one line
+
two
lines
+
offset
+
+
+
ortho
+
one line
+
two
lines
+
offset
+
+ + diff --git a/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-007-ref.xhtml b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-007-ref.xhtml new file mode 100644 index 000000000000..37520d66c525 --- /dev/null +++ b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-007-ref.xhtml @@ -0,0 +1,41 @@ + + + + + + CSS Reftest Reference + + + + +
+
one line (first)
one line (last)
two
lines and offset (last)
offset (first)
+
+ + diff --git a/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-007.xhtml b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-007.xhtml new file mode 100644 index 000000000000..50d74f5ebf64 --- /dev/null +++ b/layout/reftests/w3c-css/submitted/flexbox/flexbox-align-self-baseline-horiz-007.xhtml @@ -0,0 +1,44 @@ + + + + + + CSS Test: Baseline alignment of block flex items with 'baseline' and 'last-baseline' values for 'align-self' against each other. + + + + + + +
+
one line (first)
+
one line (last)
+
two
lines and offset (last)
+
offset (first)
+
+ + diff --git a/layout/reftests/w3c-css/submitted/flexbox/reftest.list b/layout/reftests/w3c-css/submitted/flexbox/reftest.list index a8ce0cf5b279..a623a0b599ee 100644 --- a/layout/reftests/w3c-css/submitted/flexbox/reftest.list +++ b/layout/reftests/w3c-css/submitted/flexbox/reftest.list @@ -18,6 +18,8 @@ == flexbox-align-self-baseline-horiz-003.xhtml flexbox-align-self-baseline-horiz-003-ref.xhtml == flexbox-align-self-baseline-horiz-004.xhtml flexbox-align-self-baseline-horiz-004-ref.xhtml == flexbox-align-self-baseline-horiz-005.xhtml flexbox-align-self-baseline-horiz-005-ref.xhtml +== flexbox-align-self-baseline-horiz-006.xhtml flexbox-align-self-baseline-horiz-006-ref.xhtml +== flexbox-align-self-baseline-horiz-007.xhtml flexbox-align-self-baseline-horiz-007-ref.xhtml == flexbox-align-self-stretch-vert-001.html flexbox-align-self-stretch-vert-001-ref.html == flexbox-align-self-stretch-vert-002.html flexbox-align-self-stretch-vert-002-ref.html diff --git a/layout/svg/nsSVGIntegrationUtils.cpp b/layout/svg/nsSVGIntegrationUtils.cpp index 6fd79670ad88..c7008aeb008a 100644 --- a/layout/svg/nsSVGIntegrationUtils.cpp +++ b/layout/svg/nsSVGIntegrationUtils.cpp @@ -391,7 +391,7 @@ public: const gfxMatrix& aTransform, const nsIntRect* aDirtyRect) override { - BasicLayerManager* basic = static_cast(mLayerManager); + BasicLayerManager* basic = mLayerManager->AsBasicLayerManager(); basic->SetTarget(&aContext); gfxPoint devPixelOffset = @@ -847,7 +847,7 @@ nsSVGIntegrationUtils::PaintMaskAndClipPath(const PaintFramesParams& aParams) /* Paint the child */ context.SetMatrix(matrixAutoSaveRestore.Matrix()); - BasicLayerManager* basic = static_cast(aParams.layerManager); + BasicLayerManager* basic = aParams.layerManager->AsBasicLayerManager(); RefPtr oldCtx = basic->GetTarget(); basic->SetTarget(&context); aParams.layerManager->EndTransaction(FrameLayerBuilder::DrawPaintedLayer, diff --git a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/StreamItem.java b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/StreamItem.java index c3dbca948cdf..9396a53dbcbb 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/StreamItem.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/StreamItem.java @@ -39,6 +39,14 @@ public abstract class StreamItem extends RecyclerView.ViewHolder { super(itemView); } + public static class HighlightsTitle extends StreamItem { + public static final int LAYOUT_ID = R.layout.activity_stream_main_highlightstitle; + + public HighlightsTitle(View itemView) { + super(itemView); + } + } + public static class TopPanel extends StreamItem { public static final int LAYOUT_ID = R.layout.activity_stream_main_toppanel; @@ -109,7 +117,9 @@ public abstract class StreamItem extends RecyclerView.ViewHolder { menuButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - ActivityStreamContextMenu.show(v.getContext(), ActivityStreamContextMenu.MenuMode.HIGHLIGHT, + ActivityStreamContextMenu.show(v.getContext(), + menuButton, + ActivityStreamContextMenu.MenuMode.HIGHLIGHT, title, url, onUrlOpenListener, onUrlOpenInBackgroundListener, vIconView.getWidth(), vIconView.getHeight()); } diff --git a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/StreamRecyclerAdapter.java b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/StreamRecyclerAdapter.java index 9ea9432082b0..f7cda2e7fd0a 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/StreamRecyclerAdapter.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/StreamRecyclerAdapter.java @@ -47,6 +47,8 @@ public class StreamRecyclerAdapter extends RecyclerView.Adapter impl public int getItemViewType(int position) { if (position == 0) { return TopPanel.LAYOUT_ID; + } else if (position == 1) { + return StreamItem.HighlightsTitle.LAYOUT_ID; } else { return HighlightItem.LAYOUT_ID; } @@ -58,6 +60,8 @@ public class StreamRecyclerAdapter extends RecyclerView.Adapter impl if (type == TopPanel.LAYOUT_ID) { return new TopPanel(inflater.inflate(type, parent, false), onUrlOpenListener, onUrlOpenInBackgroundListener); + } else if (type == StreamItem.HighlightsTitle.LAYOUT_ID) { + return new StreamItem.HighlightsTitle(inflater.inflate(type, parent, false)); } else if (type == HighlightItem.LAYOUT_ID) { return new HighlightItem(inflater.inflate(type, parent, false), onUrlOpenListener, onUrlOpenInBackgroundListener); } else { @@ -70,8 +74,8 @@ public class StreamRecyclerAdapter extends RecyclerView.Adapter impl throw new IllegalArgumentException("Requested cursor position for invalid item"); } - // We have one blank panel at the top, hence remove that to obtain the cursor position - return position - 1; + // We have two blank panels at the top, hence remove that to obtain the cursor position + return position - 2; } @Override @@ -114,7 +118,7 @@ public class StreamRecyclerAdapter extends RecyclerView.Adapter impl highlightsCount = 0; } - return highlightsCount + 1; + return highlightsCount + 2; } public void swapHighlightsCursor(Cursor cursor) { diff --git a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/menu/ActivityStreamContextMenu.java b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/menu/ActivityStreamContextMenu.java index 9fb1f8f9c607..525d3b426bdf 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/menu/ActivityStreamContextMenu.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/menu/ActivityStreamContextMenu.java @@ -8,37 +8,27 @@ import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.support.annotation.NonNull; -import android.support.design.widget.BottomSheetBehavior; -import android.support.design.widget.BottomSheetDialog; import android.support.design.widget.NavigationView; -import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.IntentHelper; import org.mozilla.gecko.R; import org.mozilla.gecko.Telemetry; import org.mozilla.gecko.TelemetryContract; -import org.mozilla.gecko.activitystream.ActivityStream; +import org.mozilla.gecko.annotation.RobocopTarget; import org.mozilla.gecko.db.BrowserDB; import org.mozilla.gecko.home.HomePager; -import org.mozilla.gecko.icons.IconCallback; -import org.mozilla.gecko.icons.IconResponse; -import org.mozilla.gecko.icons.Icons; import org.mozilla.gecko.util.Clipboard; +import org.mozilla.gecko.util.HardwareUtils; import org.mozilla.gecko.util.ThreadUtils; import org.mozilla.gecko.util.UIAsyncTask; -import org.mozilla.gecko.widget.FaviconView; import java.util.EnumSet; -import static org.mozilla.gecko.activitystream.ActivityStream.extractLabel; - -public class ActivityStreamContextMenu - extends BottomSheetDialog +@RobocopTarget +public abstract class ActivityStreamContextMenu implements NavigationView.OnNavigationItemSelectedListener { public enum MenuMode { @@ -54,66 +44,48 @@ public class ActivityStreamContextMenu final HomePager.OnUrlOpenListener onUrlOpenListener; final HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener; - boolean isAlreadyBookmarked = false; + boolean isAlreadyBookmarked; // default false; - private ActivityStreamContextMenu(final Context context, - final MenuMode mode, - final String title, @NonNull final String url, - HomePager.OnUrlOpenListener onUrlOpenListener, - HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener, - final int tilesWidth, final int tilesHeight) { - super(context); + public abstract MenuItem getItemByID(int id); + public abstract void show(); + + public abstract void dismiss(); + + final MenuMode mode; + + /* package-private */ ActivityStreamContextMenu(final Context context, + final MenuMode mode, + final String title, @NonNull final String url, + HomePager.OnUrlOpenListener onUrlOpenListener, + HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener) { this.context = context; + this.mode = mode; + this.title = title; this.url = url; this.onUrlOpenListener = onUrlOpenListener; this.onUrlOpenInBackgroundListener = onUrlOpenInBackgroundListener; + } - final LayoutInflater inflater = LayoutInflater.from(context); - - final View content = inflater.inflate(R.layout.activity_stream_contextmenu_layout, null); - setContentView(content); - - ((TextView) findViewById(R.id.title)).setText(title); - extractLabel(context, url, false, new ActivityStream.LabelCallback() { - public void onLabelExtracted(String label) { - ((TextView) findViewById(R.id.url)).setText(label); - } - }); - - // Copy layouted parameters from the Highlights / TopSites items to ensure consistency - final FaviconView faviconView = (FaviconView) findViewById(R.id.icon); - ViewGroup.LayoutParams layoutParams = faviconView.getLayoutParams(); - layoutParams.width = tilesWidth; - layoutParams.height = tilesHeight; - faviconView.setLayoutParams(layoutParams); - - Icons.with(context) - .pageUrl(url) - .skipNetwork() - .build() - .execute(new IconCallback() { - @Override - public void onIconResponse(IconResponse response) { - faviconView.updateImage(response); - } - }); - - NavigationView navigationView = (NavigationView) findViewById(R.id.menu); - navigationView.setNavigationItemSelectedListener(this); - + /** + * Must be called before the menu is shown. + *

+ * Your implementation must be ready to return items from getItemByID() before postInit() is + * called, i.e. you should probably inflate your menu items before this call. + */ + protected void postInit() { // Disable "dismiss" for topsites until we have decided on its behaviour for topsites // (currently "dismiss" adds the URL to a highlights-specific blocklist, which the topsites // query has no knowledge of). if (mode == MenuMode.TOPSITE) { - final MenuItem dismissItem = navigationView.getMenu().findItem(R.id.dismiss); + final MenuItem dismissItem = getItemByID(R.id.dismiss); dismissItem.setVisible(false); } // Disable the bookmark item until we know its bookmark state - final MenuItem bookmarkItem = navigationView.getMenu().findItem(R.id.bookmark); + final MenuItem bookmarkItem = getItemByID(R.id.bookmark); bookmarkItem.setEnabled(false); (new UIAsyncTask.WithoutParams(ThreadUtils.getBackgroundHandler()) { @@ -134,10 +106,9 @@ public class ActivityStreamContextMenu }).execute(); // Only show the "remove from history" item if a page actually has history - final MenuItem deleteHistoryItem = navigationView.getMenu().findItem(R.id.delete); + final MenuItem deleteHistoryItem = getItemByID(R.id.delete); deleteHistoryItem.setVisible(false); - (new UIAsyncTask.WithoutParams(ThreadUtils.getBackgroundHandler()) { boolean hasHistory; @@ -164,26 +135,8 @@ public class ActivityStreamContextMenu } } }).execute(); - - BottomSheetBehavior bsBehaviour = BottomSheetBehavior.from((View) content.getParent()); - bsBehaviour.setPeekHeight(context.getResources().getDimensionPixelSize(R.dimen.activity_stream_contextmenu_peek_height)); } - public static ActivityStreamContextMenu show(Context context, - final MenuMode menuMode, - final String title, @NonNull final String url, - HomePager.OnUrlOpenListener onUrlOpenListener, - HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener, - final int tilesWidth, final int tilesHeight) { - final ActivityStreamContextMenu menu = new ActivityStreamContextMenu(context, - menuMode, - title, url, - onUrlOpenListener, onUrlOpenInBackgroundListener, - tilesWidth, tilesHeight); - menu.show(); - - return menu; - } @Override public boolean onNavigationItemSelected(MenuItem item) { @@ -254,4 +207,33 @@ public class ActivityStreamContextMenu dismiss(); return true; } + + + @RobocopTarget + public static ActivityStreamContextMenu show(Context context, + View anchor, + final MenuMode menuMode, + final String title, @NonNull final String url, + HomePager.OnUrlOpenListener onUrlOpenListener, + HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener, + final int tilesWidth, final int tilesHeight) { + final ActivityStreamContextMenu menu; + + if (!HardwareUtils.isTablet()) { + menu = new BottomSheetContextMenu(context, + menuMode, + title, url, + onUrlOpenListener, onUrlOpenInBackgroundListener, + tilesWidth, tilesHeight); + } else { + menu = new PopupContextMenu(context, + anchor, + menuMode, + title, url, + onUrlOpenListener, onUrlOpenInBackgroundListener); + } + + menu.show(); + return menu; + } } diff --git a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/menu/BottomSheetContextMenu.java b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/menu/BottomSheetContextMenu.java new file mode 100644 index 000000000000..e95867c36976 --- /dev/null +++ b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/menu/BottomSheetContextMenu.java @@ -0,0 +1,102 @@ +/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +package org.mozilla.gecko.home.activitystream.menu; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.design.widget.BottomSheetBehavior; +import android.support.design.widget.BottomSheetDialog; +import android.support.design.widget.NavigationView; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import org.mozilla.gecko.R; +import org.mozilla.gecko.activitystream.ActivityStream; +import org.mozilla.gecko.home.HomePager; +import org.mozilla.gecko.icons.IconCallback; +import org.mozilla.gecko.icons.IconResponse; +import org.mozilla.gecko.icons.Icons; +import org.mozilla.gecko.widget.FaviconView; + +import static org.mozilla.gecko.activitystream.ActivityStream.extractLabel; + +/* package-private */ class BottomSheetContextMenu + extends ActivityStreamContextMenu { + + + private final BottomSheetDialog bottomSheetDialog; + + private final NavigationView navigationView; + + public BottomSheetContextMenu(final Context context, + final MenuMode mode, + final String title, @NonNull final String url, + HomePager.OnUrlOpenListener onUrlOpenListener, + HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener, + final int tilesWidth, final int tilesHeight) { + + super(context, + mode, + title, + url, + onUrlOpenListener, + onUrlOpenInBackgroundListener); + + final LayoutInflater inflater = LayoutInflater.from(context); + final View content = inflater.inflate(R.layout.activity_stream_contextmenu_bottomsheet, null); + + bottomSheetDialog = new BottomSheetDialog(context); + bottomSheetDialog.setContentView(content); + + ((TextView) content.findViewById(R.id.title)).setText(title); + + extractLabel(context, url, false, new ActivityStream.LabelCallback() { + public void onLabelExtracted(String label) { + ((TextView) content.findViewById(R.id.url)).setText(label); + } + }); + + // Copy layouted parameters from the Highlights / TopSites items to ensure consistency + final FaviconView faviconView = (FaviconView) content.findViewById(R.id.icon); + ViewGroup.LayoutParams layoutParams = faviconView.getLayoutParams(); + layoutParams.width = tilesWidth; + layoutParams.height = tilesHeight; + faviconView.setLayoutParams(layoutParams); + + Icons.with(context) + .pageUrl(url) + .skipNetwork() + .build() + .execute(new IconCallback() { + @Override + public void onIconResponse(IconResponse response) { + faviconView.updateImage(response); + } + }); + + navigationView = (NavigationView) content.findViewById(R.id.menu); + navigationView.setNavigationItemSelectedListener(this); + + super.postInit(); + } + + @Override + public MenuItem getItemByID(int id) { + return navigationView.getMenu().findItem(id); + } + + @Override + public void show() { + bottomSheetDialog.show(); + } + + public void dismiss() { + bottomSheetDialog.dismiss(); + } + +} diff --git a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/menu/PopupContextMenu.java b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/menu/PopupContextMenu.java new file mode 100644 index 000000000000..56615937bd50 --- /dev/null +++ b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/menu/PopupContextMenu.java @@ -0,0 +1,76 @@ +/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +package org.mozilla.gecko.home.activitystream.menu; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.support.annotation.NonNull; +import android.support.design.widget.NavigationView; +import android.view.LayoutInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.PopupWindow; + +import org.mozilla.gecko.R; +import org.mozilla.gecko.home.HomePager; + +/* package-private */ class PopupContextMenu + extends ActivityStreamContextMenu { + + private final PopupWindow popupWindow; + private final NavigationView navigationView; + + private final View anchor; + + public PopupContextMenu(final Context context, + View anchor, + final MenuMode mode, + final String title, + @NonNull final String url, + HomePager.OnUrlOpenListener onUrlOpenListener, + HomePager.OnUrlOpenInBackgroundListener onUrlOpenInBackgroundListener) { + super(context, + mode, + title, + url, + onUrlOpenListener, + onUrlOpenInBackgroundListener); + + this.anchor = anchor; + + final LayoutInflater inflater = LayoutInflater.from(context); + + View card = inflater.inflate(R.layout.activity_stream_contextmenu_popupmenu, null); + navigationView = (NavigationView) card.findViewById(R.id.menu); + navigationView.setNavigationItemSelectedListener(this); + + popupWindow = new PopupWindow(context); + popupWindow.setContentView(card); + popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + popupWindow.setFocusable(true); + + super.postInit(); + } + + @Override + public MenuItem getItemByID(int id) { + return navigationView.getMenu().findItem(id); + } + + @Override + public void show() { + // By default popupWindow follows the pre-material convention of displaying the popup + // below a View. We need to shift it over the view: + popupWindow.showAsDropDown(anchor, + 0, + -(anchor.getHeight() + anchor.getPaddingBottom())); + } + + public void dismiss() { + popupWindow.dismiss(); + } +} diff --git a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/topsites/TopSitesCard.java b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/topsites/TopSitesCard.java index bc4de40f6dcb..139d58e893ba 100644 --- a/mobile/android/base/java/org/mozilla/gecko/home/activitystream/topsites/TopSitesCard.java +++ b/mobile/android/base/java/org/mozilla/gecko/home/activitystream/topsites/TopSitesCard.java @@ -92,6 +92,7 @@ class TopSitesCard extends RecyclerView.ViewHolder onUrlOpenListener.onUrlOpen(url, EnumSet.noneOf(HomePager.OnUrlOpenListener.Flags.class)); } else if (clickedView == menuButton) { ActivityStreamContextMenu.show(clickedView.getContext(), + menuButton, ActivityStreamContextMenu.MenuMode.TOPSITE, title.getText().toString(), url, onUrlOpenListener, onUrlOpenInBackgroundListener, diff --git a/mobile/android/base/java/org/mozilla/gecko/media/MediaDrmProxy.java b/mobile/android/base/java/org/mozilla/gecko/media/MediaDrmProxy.java index 044dd69d7240..faca2389ee06 100644 --- a/mobile/android/base/java/org/mozilla/gecko/media/MediaDrmProxy.java +++ b/mobile/android/base/java/org/mozilla/gecko/media/MediaDrmProxy.java @@ -248,7 +248,10 @@ public final class MediaDrmProxy { @WrapForJNI(calledFrom = "gecko") public static MediaDrmProxy create(String keySystem, - Callbacks nativeCallbacks) { + Callbacks nativeCallbacks, + boolean isRemote) { + // TODO: Will implement {Local,Remote}MediaDrmBridge instantiation by + // '''isRemote''' flag in Bug 1307818. MediaDrmProxy proxy = new MediaDrmProxy(keySystem, nativeCallbacks); return proxy; } diff --git a/mobile/android/base/java/org/mozilla/gecko/preferences/SyncPreference.java b/mobile/android/base/java/org/mozilla/gecko/preferences/SyncPreference.java index 5a1cd9b1503f..350ac8fc0aa6 100644 --- a/mobile/android/base/java/org/mozilla/gecko/preferences/SyncPreference.java +++ b/mobile/android/base/java/org/mozilla/gecko/preferences/SyncPreference.java @@ -55,6 +55,9 @@ class SyncPreference extends Preference { // Cancel any pending task. Picasso.with(mContext).cancelRequest(profileAvatarTarget); // Clear previously set icon. + // Bug 1312719 - IconDrawable is prior to IconResId, drawable must be set null before setIcon(resId) + // http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/preference/Preference.java#562 + setIcon(null); setIcon(R.drawable.sync_avatar_default); } }); diff --git a/mobile/android/base/moz.build b/mobile/android/base/moz.build index 7c53ed4f0fd7..3e2314a9cfc9 100644 --- a/mobile/android/base/moz.build +++ b/mobile/android/base/moz.build @@ -440,6 +440,8 @@ gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [ 'home/activitystream/ActivityStreamHomeFragment.java', 'home/activitystream/ActivityStreamHomeScreen.java', 'home/activitystream/menu/ActivityStreamContextMenu.java', + 'home/activitystream/menu/BottomSheetContextMenu.java', + 'home/activitystream/menu/PopupContextMenu.java', 'home/activitystream/StreamItem.java', 'home/activitystream/StreamRecyclerAdapter.java', 'home/activitystream/topsites/CirclePageIndicator.java', diff --git a/mobile/android/base/resources/layout/activity_stream_card_history_item.xml b/mobile/android/base/resources/layout/activity_stream_card_history_item.xml index b91c6fee602a..f7a6ca0099e6 100644 --- a/mobile/android/base/resources/layout/activity_stream_card_history_item.xml +++ b/mobile/android/base/resources/layout/activity_stream_card_history_item.xml @@ -38,6 +38,7 @@ android:layout_alignParentTop="true" android:layout_gravity="right|top" android:padding="2dp" + android:contentDescription="@string/menu" android:layout_marginLeft="@dimen/activity_stream_base_margin" android:layout_marginBottom="@dimen/activity_stream_base_margin" android:src="@drawable/menu" /> diff --git a/mobile/android/base/resources/layout/activity_stream_contextmenu_layout.xml b/mobile/android/base/resources/layout/activity_stream_contextmenu_bottomsheet.xml similarity index 94% rename from mobile/android/base/resources/layout/activity_stream_contextmenu_layout.xml rename to mobile/android/base/resources/layout/activity_stream_contextmenu_bottomsheet.xml index 60da977f1f9e..327587e6e2de 100644 --- a/mobile/android/base/resources/layout/activity_stream_contextmenu_layout.xml +++ b/mobile/android/base/resources/layout/activity_stream_contextmenu_bottomsheet.xml @@ -60,14 +60,16 @@ + android:layout_height="wrap_content"> diff --git a/mobile/android/base/resources/layout/activity_stream_contextmenu_popupmenu.xml b/mobile/android/base/resources/layout/activity_stream_contextmenu_popupmenu.xml new file mode 100644 index 000000000000..a21d6752855c --- /dev/null +++ b/mobile/android/base/resources/layout/activity_stream_contextmenu_popupmenu.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/mobile/android/base/resources/layout/activity_stream_main_highlightstitle.xml b/mobile/android/base/resources/layout/activity_stream_main_highlightstitle.xml new file mode 100644 index 000000000000..7338c8596883 --- /dev/null +++ b/mobile/android/base/resources/layout/activity_stream_main_highlightstitle.xml @@ -0,0 +1,28 @@ + + + + + + + diff --git a/mobile/android/base/resources/layout/activity_stream_main_toppanel.xml b/mobile/android/base/resources/layout/activity_stream_main_toppanel.xml index b12c597a7eef..60c420063c49 100644 --- a/mobile/android/base/resources/layout/activity_stream_main_toppanel.xml +++ b/mobile/android/base/resources/layout/activity_stream_main_toppanel.xml @@ -1,19 +1,17 @@ - + + android:contentDescription="@string/activity_stream_topsites" /> + android:layout_height="wrap_content" /> - - - - - \ No newline at end of file + diff --git a/mobile/android/base/resources/layout/activity_stream_topsites_card.xml b/mobile/android/base/resources/layout/activity_stream_topsites_card.xml index 3c2af92bca8b..fc50cea7add9 100644 --- a/mobile/android/base/resources/layout/activity_stream_topsites_card.xml +++ b/mobile/android/base/resources/layout/activity_stream_topsites_card.xml @@ -53,6 +53,7 @@ android:layout_alignParentTop="true" android:layout_gravity="right|top" android:padding="6dp" + android:contentDescription="@string/menu" android:src="@drawable/menu" /> diff --git a/mobile/android/base/resources/values/dimens.xml b/mobile/android/base/resources/values/dimens.xml index 26d24a3b5ff2..b730f967175c 100644 --- a/mobile/android/base/resources/values/dimens.xml +++ b/mobile/android/base/resources/values/dimens.xml @@ -222,11 +222,6 @@ 70dp 30dp - 380dp - - 350dp - - 40dp + 48dp diff --git a/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testActivityStreamContextMenu.java b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testActivityStreamContextMenu.java index 7559b1491b66..b4b06a2360b2 100644 --- a/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testActivityStreamContextMenu.java +++ b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/testActivityStreamContextMenu.java @@ -48,14 +48,9 @@ public class testActivityStreamContextMenu extends BaseTest { * the correct state. */ private void testMenuForUrl(final String url, final boolean isBookmarked, final boolean isVisited) { - final ActivityStreamContextMenu menu = ActivityStreamContextMenu.show(getActivity(), ActivityStreamContextMenu.MenuMode.HIGHLIGHT, "foobar", url, null, null, 100, 100); + final View anchor = new View(getActivity()); - waitForContextMenu(menu); - - final View wrapper = menu.findViewById(R.id.info_wrapper); - mAsserter.is(wrapper.getVisibility(), View.VISIBLE, "menu should be visible"); - - NavigationView nv = (NavigationView) menu.findViewById(R.id.menu); + final ActivityStreamContextMenu menu = ActivityStreamContextMenu.show(getActivity(), anchor, ActivityStreamContextMenu.MenuMode.HIGHLIGHT, "foobar", url, null, null, 100, 100); final int expectedBookmarkString; if (isBookmarked) { @@ -64,26 +59,15 @@ public class testActivityStreamContextMenu extends BaseTest { expectedBookmarkString = R.string.bookmark; } - final MenuItem bookmarkItem = nv.getMenu().findItem(R.id.bookmark); + final MenuItem bookmarkItem = menu.getItemByID(R.id.bookmark); assertMenuItemHasString(bookmarkItem, expectedBookmarkString); - final MenuItem deleteItem = nv.getMenu().findItem(R.id.delete); + final MenuItem deleteItem = menu.getItemByID(R.id.delete); assertMenuItemIsVisible(deleteItem, isVisited); menu.dismiss(); } - private void waitForContextMenu(final ActivityStreamContextMenu menu) { - waitForCondition(new Condition() { - @Override - public boolean isSatisfied() { - final View v = menu.findViewById(R.id.info_wrapper); - - return (v != null); - } - }, 5000); - } - private void assertMenuItemIsVisible(final MenuItem item, final boolean shouldBeVisible) { waitForCondition(new Condition() { @Override diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js index fbd16fda8339..c01d0bd5e0f0 100644 --- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -433,7 +433,7 @@ pref("media.navigator.video.use_tmmbr", false); pref("media.navigator.audio.use_fec", true); pref("media.navigator.video.red_ulpfec_enabled", false); -pref("media.peerconnection.dtmf.enabled", false); +pref("media.peerconnection.dtmf.enabled", true); pref("media.webrtc.debug.trace_mask", 0); pref("media.webrtc.debug.multi_log", false); @@ -5032,13 +5032,6 @@ pref("dom.mozInputMethod.enabled", false); pref("dom.flyweb.enabled", false); -// ICC API -#ifdef MOZ_B2G_RIL -pref("dom.icc.enabled", true); -#else -pref("dom.icc.enabled", false); -#endif - // Enable mapped array buffer by default. pref("dom.mapped_arraybuffer.enabled", true); diff --git a/netwerk/base/security-prefs.js b/netwerk/base/security-prefs.js index b0c9916c87f5..21cdba0eb36a 100644 --- a/netwerk/base/security-prefs.js +++ b/netwerk/base/security-prefs.js @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ pref("security.tls.version.min", 1); -pref("security.tls.version.max", 3); +pref("security.tls.version.max", 4); pref("security.tls.version.fallback-limit", 3); pref("security.tls.insecure_fallback_hosts", ""); pref("security.tls.unrestricted_rc4_fallback", false); diff --git a/old-configure.in b/old-configure.in index a90ef5cf1c60..1263c319fc3a 100644 --- a/old-configure.in +++ b/old-configure.in @@ -4713,23 +4713,6 @@ if test x"$MOZ_WIDGET_TOOLKIT" != x"gonk"; then fi fi -dnl ======================================================== -dnl = Enable Radio Interface for B2G (Gonk usually) -dnl ======================================================== -MOZ_ARG_ENABLE_BOOL(b2g-ril, -[ --enable-b2g-ril Set compile flags necessary for testing B2G Radio Interface Layer via network sockets ], - MOZ_B2G_RIL=1, - MOZ_B2G_RIL=, - MOZ_B2G_RIL=$_PLATFORM_HAVE_RIL ) -if test -n "$MOZ_B2G_RIL"; then - if test -n "$_PLATFORM_HAVE_RIL"; then - AC_DEFINE(MOZ_B2G_RIL) - else - AC_MSG_ERROR([b2g-ril cannot be enabled because target platform doesn't support it.]) - fi -fi -AC_SUBST(MOZ_B2G_RIL) - dnl ======================================================== dnl = Enable Pico Speech Synthesis (Gonk usually) dnl ======================================================== diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index d70a7f4a25cc..6d34932c161f 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1164,4 +1164,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = { static const int32_t kUnknownId = -1; -static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1486994662172000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1487082357536000); diff --git a/security/manager/ssl/nsNSSComponent.cpp b/security/manager/ssl/nsNSSComponent.cpp index e52531a0e8ad..cd87b5b03ac2 100644 --- a/security/manager/ssl/nsNSSComponent.cpp +++ b/security/manager/ssl/nsNSSComponent.cpp @@ -1654,7 +1654,7 @@ nsNSSComponent::setEnabledTLSVersions() // keep these values in sync with security-prefs.js // 1 means TLS 1.0, 2 means TLS 1.1, etc. static const uint32_t PSM_DEFAULT_MIN_TLS_VERSION = 1; - static const uint32_t PSM_DEFAULT_MAX_TLS_VERSION = 3; + static const uint32_t PSM_DEFAULT_MAX_TLS_VERSION = 4; uint32_t minFromPrefs = Preferences::GetUint("security.tls.version.min", PSM_DEFAULT_MIN_TLS_VERSION); diff --git a/security/manager/ssl/nsNSSIOLayer.cpp b/security/manager/ssl/nsNSSIOLayer.cpp index 1b83cc712d93..bdbf451ec3eb 100644 --- a/security/manager/ssl/nsNSSIOLayer.cpp +++ b/security/manager/ssl/nsNSSIOLayer.cpp @@ -2447,6 +2447,20 @@ loser: return nullptr; } +static const SSLSignatureScheme sEnabledSignatureSchemes[] = { + ssl_sig_ecdsa_secp256r1_sha256, + ssl_sig_ecdsa_secp384r1_sha384, + ssl_sig_ecdsa_secp521r1_sha512, + ssl_sig_rsa_pss_sha256, + ssl_sig_rsa_pss_sha384, + ssl_sig_rsa_pss_sha512, + ssl_sig_rsa_pkcs1_sha256, + ssl_sig_rsa_pkcs1_sha384, + ssl_sig_rsa_pkcs1_sha512, + ssl_sig_ecdsa_sha1, + ssl_sig_rsa_pkcs1_sha1, +}; + static nsresult nsSSLIOLayerSetOptions(PRFileDesc* fd, bool forSTARTTLS, bool haveProxy, const char* host, int32_t port, @@ -2516,6 +2530,11 @@ nsSSLIOLayerSetOptions(PRFileDesc* fd, bool forSTARTTLS, return NS_ERROR_FAILURE; } + if (SECSuccess != SSL_SignatureSchemePrefSet(fd, sEnabledSignatureSchemes, + mozilla::ArrayLength(sEnabledSignatureSchemes))) { + return NS_ERROR_FAILURE; + } + bool enabled = infoObject->SharedState().IsOCSPStaplingEnabled(); if (SECSuccess != SSL_OptionSet(fd, SSL_ENABLE_OCSP_STAPLING, enabled)) { return NS_ERROR_FAILURE; diff --git a/security/manager/ssl/nsSTSPreloadList.errors b/security/manager/ssl/nsSTSPreloadList.errors index dc491d610b93..2749bd19b2a5 100644 --- a/security/manager/ssl/nsSTSPreloadList.errors +++ b/security/manager/ssl/nsSTSPreloadList.errors @@ -15,7 +15,6 @@ 1a-jva.de: did not receive HSTS header 1p.ro: could not connect to host 1password.com: did not receive HSTS header -1px.tv: could not connect to host 1whw.co.uk: could not connect to host 206rc.net: max-age too low: 2592000 20hs.cn: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] @@ -118,7 +117,6 @@ aiticon.de: did not receive HSTS header aiw-thkoeln.online: could not connect to host ajmahal.com: could not connect to host akclinics.org: did not receive HSTS header -akerek.hu: could not connect to host akostecki.de: did not receive HSTS header akselimedia.fi: did not receive HSTS header akutun.cl: did not receive HSTS header @@ -141,6 +139,7 @@ alexismeza.com: could not connect to host alexismeza.com.mx: could not connect to host alexismeza.dk: could not connect to host alfredxing.com: did not receive HSTS header +aljaspod.net: could not connect to host alkami.com: did not receive HSTS header all-subtitles.com: did not receive HSTS header allforyou.at: could not connect to host @@ -150,6 +149,7 @@ alpha.irccloud.com: could not connect to host alphabit-secure.com: could not connect to host alphabuild.io: did not receive HSTS header alphalabs.xyz: could not connect to host +altesses.eu: could not connect to host altfire.ca: could not connect to host altmv.com: max-age too low: 7776000 amaforums.org: could not connect to host @@ -175,7 +175,7 @@ andrewmichaud.beer: could not connect to host andreypopp.com: could not connect to host androoz.se: could not connect to host andymartin.cc: did not receive HSTS header -anfsanchezo.co: did not receive HSTS header +anfsanchezo.co: could not connect to host anfsanchezo.me: could not connect to host anghami.com: did not receive HSTS header animeday.ml: could not connect to host @@ -277,12 +277,11 @@ avinet.com: max-age too low: 0 awg-mode.de: did not receive HSTS header axado.com.br: did not receive HSTS header axeny.com: did not receive HSTS header -ayurveda101.com: could not connect to host az.search.yahoo.com: did not receive HSTS header azprep.us: could not connect to host b3orion.com: max-age too low: 0 babak.de: did not receive HSTS header -babelfisch.eu: could not connect to host +babelfisch.eu: did not receive HSTS header baby-click.de: could not connect to host babybic.hu: did not receive HSTS header babyhouse.xyz: could not connect to host @@ -325,7 +324,6 @@ belics.com: did not receive HSTS header belliash.eu.org: could not connect to host belltower.io: could not connect to host beneffy.com: did not receive HSTS header -benjamin.pe: could not connect to host benjaminblack.net: did not receive HSTS header benk.press: could not connect to host benny003.de: did not receive HSTS header @@ -351,7 +349,6 @@ bienenblog.cc: could not connect to host bigbrownpromotions.com.au: did not receive HSTS header bigdinosaur.org: did not receive HSTS header bigshinylock.minazo.net: could not connect to host -bikiniseli.com: could not connect to host bildiri.ci: did not receive HSTS header bildschirmflackern.de: did not receive HSTS header billin.net: could not connect to host @@ -359,6 +356,7 @@ billkiss.com: max-age too low: 300 billninja.com: could not connect to host binderapp.net: could not connect to host biophysik-ssl.de: did not receive HSTS header +birkhoff.me: could not connect to host birkman.com: did not receive HSTS header bismarck.moe: did not receive HSTS header bitchan.it: could not connect to host @@ -370,6 +368,7 @@ bitfarm-archiv.de: did not receive HSTS header bitgo.com: max-age too low: 0 bitheus.com: could not connect to host bithosting.io: did not receive HSTS header +bitnet.io: did not receive HSTS header bitsafe.systems: could not connect to host bitvigor.com: could not connect to host bivsi.com: could not connect to host @@ -423,6 +422,7 @@ botox.bz: did not receive HSTS header bouwbedrijfpurmerend.nl: did not receive HSTS header bowlroll.net: max-age too low: 0 boxcryptor.com: did not receive HSTS header +bqtoolbox.com: could not connect to host br3in.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] braineet.com: did not receive HSTS header brainfork.ml: could not connect to host @@ -491,8 +491,8 @@ cake.care: could not connect to host calgaryconstructionjobs.com: could not connect to host calix.com: max-age too low: 0 calltrackingreports.com: could not connect to host -calories.org: could not connect to host calvin.me: max-age too low: 2592000 +calvin.my: could not connect to host calvinallen.net: could not connect to host calyxinstitute.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] canadiangamblingchoice.com: did not receive HSTS header @@ -515,6 +515,7 @@ carsforbackpackers.com: could not connect to host casa-due-pur.com: could not connect to host casedi.org: max-age too low: 0 casinostest.com: did not receive HSTS header +casioshop.eu: could not connect to host casovi.cf: could not connect to host catcontent.cloud: could not connect to host catinmay.com: did not receive HSTS header @@ -581,13 +582,13 @@ chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored chrome.google.com: did not receive HSTS header (error ignored - included regardless) chroniclesofgeorge.com: did not receive HSTS header chua.cf: could not connect to host -cianmawhinney.xyz: could not connect to host cidr.ml: could not connect to host cigarblogs.net: could not connect to host cip.md: did not receive HSTS header ciplanutrition.com: did not receive HSTS header citiagent.cz: could not connect to host cityoflaurel.org: did not receive HSTS header +cj-jackson.com: could not connect to host clara-baumert.de: could not connect to host classicspublishing.com: could not connect to host clcleaningco.com: could not connect to host @@ -595,6 +596,7 @@ cleaningsquad.ca: max-age too low: 0 clemovementlaw.com: could not connect to host clerkendweller.uk: could not connect to host clickandgo.com: did not receive HSTS header +clickphish.com: could not connect to host clint.id.au: max-age too low: 0 clintonbloodworth.com: could not connect to host clintonbloodworth.io: could not connect to host @@ -662,6 +664,7 @@ constructionjobs.com: did not receive HSTS header content-api-dev.azurewebsites.net: could not connect to host continuumgaming.com: could not connect to host controlcenter.gigahost.dk: did not receive HSTS header +convert.zone: did not receive HSTS header coolchevy.org.ua: could not connect to host coralproject.net: did not receive HSTS header coralrosado.com.br: did not receive HSTS header @@ -702,10 +705,10 @@ crow.tw: could not connect to host crowd.supply: could not connect to host crowdcurity.com: did not receive HSTS header crowdjuris.com: could not connect to host +crtvmgmt.com: could not connect to host crudysql.com: could not connect to host cruzr.xyz: could not connect to host crypt.guru: could not connect to host -cryptearth.de: could not connect to host cryptify.eu: did not receive HSTS header cryptobin.org: could not connect to host cryptojar.io: did not receive HSTS header @@ -744,7 +747,6 @@ dakrib.net: could not connect to host dalingk.co: could not connect to host daniel-steuer.de: did not receive HSTS header danieldk.eu: did not receive HSTS header -danieliancu.com: could not connect to host danielworthy.com: did not receive HSTS header danijobs.com: could not connect to host danpiel.net: could not connect to host @@ -757,6 +759,7 @@ darkengine.io: could not connect to host darkhole.cn: could not connect to host darknebula.space: could not connect to host darknode.in: could not connect to host +darkpony.ru: could not connect to host dashburst.com: did not receive HSTS header dashnimorad.com: did not receive HSTS header data-abundance.com: could not connect to host @@ -775,9 +778,9 @@ davidhunter.scot: did not receive HSTS header davidreinhardt.de: could not connect to host davidscherzer.at: could not connect to host daylightcompany.com: did not receive HSTS header -db.gy: could not connect to host +db.gy: did not receive HSTS header dbx.ovh: did not receive HSTS header -dc585.info: did not receive HSTS header +dc585.info: could not connect to host dccode.gov: could not connect to host dcurt.is: did not receive HSTS header ddatsh.com: did not receive HSTS header @@ -878,6 +881,7 @@ drdevil.ru: could not connect to host drdim.ru: could not connect to host dreadbyte.com: could not connect to host dreamlinehost.com: did not receive HSTS header +dredgepress.com: did not receive HSTS header drishti.guru: could not connect to host drive.google.com: did not receive HSTS header (error ignored - included regardless) driving-lessons.co.uk: did not receive HSTS header @@ -888,12 +892,13 @@ drumbandesperanto.nl: could not connect to host dshiv.io: could not connect to host dubrovskiy.net: could not connect to host dubrovskiy.pro: could not connect to host -duckasylum.com: could not connect to host duesee.org: could not connect to host duria.de: max-age too low: 3600 +dustri.org: did not receive HSTS header dwhd.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] dycontrol.de: could not connect to host dylanscott.com.au: did not receive HSTS header +dymersion.com: did not receive HSTS header dynamize.solutions: could not connect to host dzimejl.sk: did not receive HSTS header dzlibs.io: could not connect to host @@ -917,6 +922,7 @@ ecg.fr: could not connect to host echopaper.com: did not receive HSTS header echosystem.fr: did not receive HSTS header ecole-en-danger.fr: could not connect to host +ecorus.eu: did not receive HSTS header edcphenix.tk: could not connect to host edelsteincosmetic.com: max-age too low: 0 edissecurity.sk: did not receive HSTS header @@ -924,7 +930,6 @@ edix.ru: could not connect to host edk.com.tr: did not receive HSTS header edmodo.com: did not receive HSTS header eduvance.in: did not receive HSTS header -edzilla.info: could not connect to host effectiveosgi.com: could not connect to host efficienthealth.com: did not receive HSTS header egg-ortho.ch: did not receive HSTS header @@ -938,7 +943,6 @@ elaintehtaat.fi: could not connect to host elanguest.pl: could not connect to host electricianforum.co.uk: could not connect to host electromc.com: could not connect to host -elektronring.com: could not connect to host elemprendedor.com.ve: could not connect to host elenag.ga: could not connect to host elenoon.ir: did not receive HSTS header @@ -946,6 +950,7 @@ elgacien.de: could not connect to host elimdengelen.com: did not receive HSTS header elisabeth-kostecki.de: did not receive HSTS header elisabethkostecki.de: did not receive HSTS header +elite-porno.ru: could not connect to host elitefishtank.com: could not connect to host elnutricionista.es: did not receive HSTS header elpo.xyz: could not connect to host @@ -986,7 +991,7 @@ equatetechnologies.com.au: max-age too low: 3600 equilibre-yoga-jennifer-will.com: could not connect to host erawanarifnugroho.com: did not receive HSTS header eressea.xyz: could not connect to host -ericyl.com: could not connect to host +ericyl.com: did not receive HSTS header eromixx.com: did not receive HSTS header erotalia.es: could not connect to host eroticen.com: did not receive HSTS header @@ -998,7 +1003,6 @@ ersindemirtas.com: did not receive HSTS header esclear.de: did not receive HSTS header escotour.com: could not connect to host esec.rs: did not receive HSTS header -esoa.net: could not connect to host espra.com: could not connect to host essexcosmeticdentists.co.uk: did not receive HSTS header essexghosthunters.co.uk: did not receive HSTS header @@ -1051,6 +1055,7 @@ factorygw.com: did not receive HSTS header fadilus.com: did not receive HSTS header faesser.com: did not receive HSTS header fail4free.de: did not receive HSTS header +failproof.be: could not connect to host fairlyoddtreasures.com: did not receive HSTS header faithwatch.org: could not connect to host faizan.net: did not receive HSTS header @@ -1068,7 +1073,6 @@ fatgeekflix.net: could not connect to host fatherhood.gov: did not receive HSTS header fatox.de: could not connect to host fatwin.pw: could not connect to host -fawkex.me: did not receive HSTS header fayolle.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] fbox.li: could not connect to host fdj.im: could not connect to host @@ -1093,13 +1097,12 @@ fightr.co: could not connect to host filmipop.com: max-age too low: 0 finalgear.com: did not receive HSTS header finanzkontor.net: could not connect to host -findmybottleshop.com.au: did not receive HSTS header findtutorsnearme.com: did not receive HSTS header fingent.com: did not receive HSTS header finiteheap.com: could not connect to host firebaseio-demo.com: could not connect to host firebaseio.com: could not connect to host (error ignored - included regardless) -firefall.rocks: could not connect to host +firefall.rocks: did not receive HSTS header firemail.io: could not connect to host firstforex.co.uk: did not receive HSTS header fish2.me: did not receive HSTS header @@ -1130,6 +1133,7 @@ fndout.com: did not receive HSTS header fnvsecurity.com: could not connect to host fonetiq.io: could not connect to host food4health.guide: could not connect to host +foodacademy.capetown: could not connect to host footballmapped.com: could not connect to host foraje-profesionale.ro: did not receive HSTS header forbook.net: could not connect to host @@ -1181,6 +1185,7 @@ furry.be: max-age too low: 86400 fusionmate.com: could not connect to host futbol11.com: did not receive HSTS header futuretechnologi.es: could not connect to host +futureyouhealth.com: did not receive HSTS header fx-rk.com: did not receive HSTS header fxtalk.cn: could not connect to host fyfywka.com: could not connect to host @@ -1198,7 +1203,7 @@ galardi.org: did not receive HSTS header galenskap.eu: did not receive HSTS header gallery44.org: did not receive HSTS header galoisvpn.xyz: could not connect to host -game.yt: did not receive HSTS header +game.yt: could not connect to host gamecave.de: could not connect to host gamechasm.com: could not connect to host gamehacks.me: could not connect to host @@ -1219,7 +1224,6 @@ geli-graphics.com: did not receive HSTS header gem-indonesia.net: could not connect to host genuu.com: could not connect to host genuxation.com: could not connect to host -genuxtsg.com: could not connect to host genyaa.com: could not connect to host gerencianet.com.br: did not receive HSTS header get.zenpayroll.com: did not receive HSTS header @@ -1241,7 +1245,6 @@ gfournier.ca: could not connect to host gfwsb.ml: could not connect to host gheorghesarcov.ga: could not connect to host gheorghesarcov.tk: could not connect to host -ghostblog.info: could not connect to host giakki.eu: could not connect to host gigacloud.org: did not receive HSTS header gilgaz.com: did not receive HSTS header @@ -1288,7 +1291,7 @@ goodenough.nz: did not receive HSTS header goodwin43.ru: did not receive HSTS header google: could not connect to host (error ignored - included regardless) googlemail.com: did not receive HSTS header (error ignored - included regardless) -googleplex.com: could not connect to host (error ignored - included regardless) +googleplex.com: did not receive HSTS header (error ignored - included regardless) gorilla-gym.site: could not connect to host goto.google.com: did not receive HSTS header (error ignored - included regardless) gottcode.org: did not receive HSTS header @@ -1347,7 +1350,6 @@ haitschi.com: could not connect to host haitschi.de: could not connect to host haitschi.net: could not connect to host haitschi.org: could not connect to host -hajnzic.at: could not connect to host haktec.de: could not connect to host haku.moe: could not connect to host hakugin.org: could not connect to host @@ -1358,6 +1360,7 @@ hao2taiwan.com: max-age too low: 0 happyfabric.me: did not receive HSTS header happygadget.me: could not connect to host harabuhouse.com: did not receive HSTS header +harbor-light.net: did not receive HSTS header harmonycosmetic.com: max-age too low: 300 harristony.com: could not connect to host hartmancpa.com: did not receive HSTS header @@ -1442,7 +1445,6 @@ hsir.me: could not connect to host hsts.date: could not connect to host http418.xyz: could not connect to host httpstatuscode418.xyz: could not connect to host -httpswatch.com: could not connect to host hu.search.yahoo.com: did not receive HSTS header huarongdao.com: did not receive HSTS header hugosleep.com.au: did not receive HSTS header @@ -1455,7 +1457,6 @@ hyper69.com: did not receive HSTS header i-jp.net: could not connect to host i-partners.sk: did not receive HSTS header iamokay.nl: did not receive HSTS header -iamusingtheinter.net: could not connect to host iamveto.com: could not connect to host iapws.com: did not receive HSTS header iban.is: could not connect to host @@ -1468,6 +1469,7 @@ icusignature.com: did not receive HSTS header id-co.in: could not connect to host id-conf.com: could not connect to host idacmedia.com: max-age too low: 5184000 +ideadozz.hu: could not connect to host ideal-envelopes.co.uk: did not receive HSTS header ideasmeetingpoint.com: could not connect to host ideation-inc.co.jp: did not receive HSTS header @@ -1479,6 +1481,7 @@ ies-italia.it: did not receive HSTS header ies.id.lv: could not connect to host ifad.org: did not receive HSTS header ifleurs.com: could not connect to host +ifoss.me: could not connect to host ignatisd.gr: did not receive HSTS header igule.net: could not connect to host ihrlotto.de: could not connect to host @@ -1492,7 +1495,6 @@ ilikerainbows.co: could not connect to host ilikerainbows.co.uk: could not connect to host ilmconpm.de: did not receive HSTS header ilona.graphics: max-age too low: 3600 -imakepoems.net: could not connect to host ime.moe: could not connect to host imguoguo.com: did not receive HSTS header imim.pw: did not receive HSTS header @@ -1625,6 +1627,7 @@ jasonroe.me: did not receive HSTS header jastoria.pl: did not receive HSTS header jayblock.com: did not receive HSTS header jayscoaching.com: could not connect to host +jayshao.com: did not receive HSTS header jazzinutrecht.info: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] jbbd.fr: could not connect to host jbfp.dk: could not connect to host @@ -1641,6 +1644,7 @@ jesorsenville.com: did not receive HSTS header jessicabenedictus.nl: could not connect to host jetaprices.com: max-age too low: 0 jetsetpay.com: could not connect to host +jettlarue.com: could not connect to host jettshome.org: could not connect to host jeugdkans.nl: did not receive HSTS header jf.duckdns.org: could not connect to host @@ -1663,6 +1667,7 @@ johners.me: could not connect to host johners.tech: did not receive HSTS header johnrom.com: did not receive HSTS header jonas-keidel.de: did not receive HSTS header +jonas-thelemann.de: could not connect to host jonasgroth.se: max-age too low: 2592000 jonathan.ir: could not connect to host jonathancarter.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] @@ -1679,6 +1684,7 @@ jrvar.com: did not receive HSTS header jsanders.us: did not receive HSTS header jualautoclave.com: did not receive HSTS header jualssh.com: could not connect to host +juchit.at: did not receive HSTS header juliamweber.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] julian-kipka.de: did not receive HSTS header jumbox.xyz: could not connect to host @@ -1714,7 +1720,7 @@ kawaii.io: max-age too low: 2592000 kawaiiku.com: could not connect to host kawaiiku.de: could not connect to host kayon.cf: could not connect to host -kdata.it: did not receive HSTS header +kdata.it: could not connect to host kdm-online.de: did not receive HSTS header keeley.gq: could not connect to host keeley.ml: could not connect to host @@ -1731,10 +1737,11 @@ kgxtech.com: max-age too low: 2592000 kickass.al: could not connect to host kid-dachau.de: did not receive HSTS header kiel-media.de: did not receive HSTS header -kimmel.in: could not connect to host +kilianvalkhof.com: did not receive HSTS header kimpost.org: could not connect to host kinderwagen-test24.de: could not connect to host kingmanhall.org: could not connect to host +kini24.ru: did not receive HSTS header kinnon.enterprises: could not connect to host kinogb.net: max-age too low: 0 kionetworks.com: did not receive HSTS header @@ -1760,6 +1767,7 @@ kletterkater.com: did not receive HSTS header klicktojob.de: could not connect to host klimat-pro.pl: max-age too low: 0 kmartin.io: did not receive HSTS header +knapen.io: could not connect to host knccloud.com: did not receive HSTS header kodokushi.fr: could not connect to host kolaykaydet.com: did not receive HSTS header @@ -1786,7 +1794,6 @@ krouzkyliduska.cz: [Exception... "Component returned failure code: 0x80004005 (N ksfh-mail.de: could not connect to host kstan.me: could not connect to host kueulangtahunanak.net: could not connect to host -kukal.cz: could not connect to host kummerlaender.eu: did not receive HSTS header kuppingercole.com: did not receive HSTS header kura.io: could not connect to host @@ -1806,6 +1813,7 @@ labordata.io: could not connect to host labrador-retrievers.com.au: did not receive HSTS header labs.moscow: did not receive HSTS header lachlankidson.net: did not receive HSTS header +lacicloud.net: could not connect to host ladbroke.net: did not receive HSTS header laf.in.net: did not receive HSTS header lagalerievirtuelle.fr: did not receive HSTS header @@ -1914,6 +1922,7 @@ lotsencafe.de: did not receive HSTS header lovelifelovelive.com: could not connect to host lovelycorral.com: did not receive HSTS header loveto.at: could not connect to host +lowhangingfruitgrabber.com: could not connect to host lpak.nl: could not connect to host lrhsclubs.com: could not connect to host lrhstsa.com: could not connect to host @@ -1922,6 +1931,7 @@ lsky.cn: did not receive HSTS header lsp-sports.de: did not receive HSTS header lt.search.yahoo.com: did not receive HSTS header ltbytes.com: could not connect to host +ltn-tom-morel.fr: could not connect to host lu.search.yahoo.com: did not receive HSTS header luine.xyz: could not connect to host luis-checa.com: could not connect to host @@ -1972,6 +1982,7 @@ mammothmail.com: could not connect to host mammothmail.net: could not connect to host mammothmail.org: could not connect to host managemynetsuite.com: could not connect to host +mannsolutions.co.uk: did not receive HSTS header mansion-note.com: could not connect to host maowtm.org: could not connect to host marchagen.nl: did not receive HSTS header @@ -1990,7 +2001,6 @@ marshut.net: could not connect to host martiert.com: could not connect to host martijnvhoof.nl: could not connect to host martinsfamilyappliance.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] -masa.li: could not connect to host masjidtawheed.net: did not receive HSTS header massotherapeutique.com: did not receive HSTS header matatall.com: did not receive HSTS header @@ -2010,6 +2020,7 @@ maultrom.ml: could not connect to host maur.cz: did not receive HSTS header mavisang.cf: did not receive HSTS header maya.mg: did not receive HSTS header +mbinformatik.de: could not connect to host mca2017.org: did not receive HSTS header mcc.re: could not connect to host mcdonalds.ru: did not receive HSTS header @@ -2054,7 +2065,6 @@ metin2blog.de: did not receive HSTS header metis.pw: could not connect to host meuemail.pro: could not connect to host mexbt.com: could not connect to host -mexicansbook.ru: could not connect to host mhict.nl: max-age too low: 0 mia.to: could not connect to host michaelfitzpatrickruth.com: could not connect to host @@ -2088,7 +2098,7 @@ minecraftserverz.com: could not connect to host minecraftvoter.com: could not connect to host minikneet.nl: did not receive HSTS header minnesotadata.com: could not connect to host -minora.io: could not connect to host +minora.io: did not receive HSTS header mirindadomo.ru: did not receive HSTS header mironized.com: did not receive HSTS header mirrorx.com: did not receive HSTS header @@ -2114,6 +2124,7 @@ modemagazines.co.uk: could not connect to host moebel-nagel.de: did not receive HSTS header moelord.org: could not connect to host moen.io: did not receive HSTS header +mogry.net: did not receive HSTS header mona.lu: did not receive HSTS header monarca.systems: could not connect to host monasterialis.eu: could not connect to host @@ -2193,7 +2204,6 @@ myzone.com: did not receive HSTS header mziulu.me: could not connect to host n0psled.nl: could not connect to host n4l.pw: could not connect to host -nagelfam.com: could not connect to host naiharngym.com: did not receive HSTS header najedlo.sk: did not receive HSTS header nakliyatsirketi.biz: could not connect to host @@ -2221,8 +2231,13 @@ neel.ch: could not connect to host neftaly.com: did not receive HSTS header neilgreen.net: did not receive HSTS header neko-system.com: did not receive HSTS header +nella-project.org: could not connect to host +nellacms.com: could not connect to host +nellacms.org: could not connect to host +nellafw.org: could not connect to host nemno.de: could not connect to host nemovement.org: did not receive HSTS header +neoani.me: could not connect to host neonisi.com: could not connect to host nepustil.net: did not receive HSTS header neris.io: could not connect to host @@ -2241,6 +2256,7 @@ neutralox.com: max-age too low: 3600 neveta.com: could not connect to host newcitygas.ca: max-age too low: 0 newlooknow.com: did not receive HSTS header +newtonhaus.com: could not connect to host newtonwarp.com: could not connect to host nextcloud.org: could not connect to host nexth.de: could not connect to host @@ -2256,7 +2272,7 @@ nicestresser.fr: could not connect to host nicky.io: did not receive HSTS header nicolasbettag.me: did not receive HSTS header niconiconi.xyz: could not connect to host -niconode.com: could not connect to host +niconode.com: did not receive HSTS header nien.chat: could not connect to host nightx.uk: could not connect to host niho.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] @@ -2291,7 +2307,6 @@ nowak.ninja: did not receive HSTS header noworrywp.com: could not connect to host np.search.yahoo.com: did not receive HSTS header npol.de: did not receive HSTS header -nshost.ro: did not receive HSTS header ntbs.pro: could not connect to host nu3.at: did not receive HSTS header nu3.ch: did not receive HSTS header @@ -2368,7 +2383,7 @@ ooonja.de: could not connect to host oopsmycase.com: could not connect to host oost.io: could not connect to host open-mx.de: could not connect to host -open-to-repair.fr: did not receive HSTS header +open-to-repair.fr: could not connect to host opendesk.cc: did not receive HSTS header openmind-shop.de: did not receive HSTS header opennippon.ru: could not connect to host @@ -2392,7 +2407,7 @@ orioncustompcs.com: could not connect to host orionfcu.com: did not receive HSTS header orleika.ml: could not connect to host osaiyuwu.com: could not connect to host -oshell.me: could not connect to host +oshell.me: did not receive HSTS header oslfoundation.org: could not connect to host ossan-kobe-gourmet.com: did not receive HSTS header ossbinaries.com: could not connect to host @@ -2404,6 +2419,7 @@ othermedia.cc: [Exception... "Component returned failure code: 0x80004005 (NS_ER otherstuff.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] otichi.com: did not receive HSTS header ottospora.nl: could not connect to host +ouaibe.qc.ca: could not connect to host ourbank.com: did not receive HSTS header outetc.com: could not connect to host outreachbuddy.com: could not connect to host @@ -2436,13 +2452,13 @@ papercard.co.uk: did not receive HSTS header papierniak.net: could not connect to host parent5446.us: could not connect to host parentmail.co.uk: did not receive HSTS header -parleur.net: could not connect to host particonpsplus.it: could not connect to host partijtjevoordevrijheid.nl: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] partyvan.it: could not connect to host partyvan.moe: could not connect to host partyvan.nl: could not connect to host partyvan.se: could not connect to host +passumpsicbank.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] passwordbox.com: did not receive HSTS header passwordrevelator.net: did not receive HSTS header passwords.google.com: did not receive HSTS header (error ignored - included regardless) @@ -2521,6 +2537,8 @@ playnation.io: did not receive HSTS header plogable.co: could not connect to host plothost.com: did not receive HSTS header ploup.net: could not connect to host +pm13.cz: could not connect to host +pm13.org: could not connect to host pmnts.io: could not connect to host po.gl: did not receive HSTS header poiema.com.sg: did not receive HSTS header @@ -2539,10 +2557,9 @@ portalplatform.net: did not receive HSTS header postcodewise.co.uk: did not receive HSTS header postscheduler.org: could not connect to host posylka.de: did not receive HSTS header -potatofrom.space: could not connect to host poussinooz.fr: could not connect to host povitria.net: could not connect to host -powerplannerapp.com: could not connect to host +powerplannerapp.com: did not receive HSTS header powerxequality.com: could not connect to host ppr-truby.ru: could not connect to host pr.search.yahoo.com: did not receive HSTS header @@ -2600,11 +2617,11 @@ pypt.lt: did not receive HSTS header q2.si: could not connect to host qingxuan.info: max-age too low: 864000 qinxi1992.com: did not receive HSTS header -qionglu.pw: could not connect to host qiwi.be: did not receive HSTS header qorm.co.uk: did not receive HSTS header qrara.net: did not receive HSTS header qrlending.com: did not receive HSTS header +qtxh.net: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] quail.solutions: could not connect to host quantacloud.ch: could not connect to host quantumcourse.org: did not receive HSTS header @@ -2697,6 +2714,7 @@ rj.gg: could not connect to host rk6.cz: could not connect to host rkmantpur.org: did not receive HSTS header rme.li: did not receive HSTS header +rmf.io: could not connect to host roan24.pl: did not receive HSTS header robertglastra.com: could not connect to host robigalia.org: did not receive HSTS header @@ -2816,6 +2834,7 @@ securityinet.org.il: did not receive HSTS header securitysoapbox.com: could not connect to host securiviera.ch: did not receive HSTS header seedbox.fr: did not receive HSTS header +seedboxers.net: could not connect to host seele.ca: could not connect to host segulink.com: could not connect to host segurosbalboa.com.ec: could not connect to host @@ -2854,7 +2873,7 @@ shadowmorph.info: did not receive HSTS header shadowsocks.net: could not connect to host shakepeers.org: did not receive HSTS header shakespearesolutions.com.au: did not receive HSTS header -shanesage.com: did not receive HSTS header +shanesage.com: could not connect to host shaobin.wang: could not connect to host sharescope.co.uk: max-age too low: 14400 shareworx.net: could not connect to host @@ -2900,7 +2919,6 @@ sincron.org: could not connect to host sinful.pw: could not connect to host siriad.com: did not receive HSTS header sirius-lee.net: could not connect to host -sisv.eu: could not connect to host sites.google.com: did not receive HSTS header (error ignored - included regardless) sitesten.com: did not receive HSTS header sitsy.ru: did not receive HSTS header @@ -2929,10 +2947,9 @@ smartofficesandsmarthomes.com: did not receive HSTS header smatch.com: did not receive HSTS header smet.us: could not connect to host smirkingwhorefromhighgarden.pro: could not connect to host -smith.is: could not connect to host +smith.is: did not receive HSTS header smkn1lengkong.sch.id: did not receive HSTS header smksi2.com: max-age too low: 0 -smpetrey.com: could not connect to host smusg.com: did not receive HSTS header snailing.org: could not connect to host snapappointments.com: did not receive HSTS header @@ -2969,6 +2986,7 @@ sotor.de: did not receive HSTS header soulboy.io: did not receive HSTS header soulema.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] soulfulglamour.uk: could not connect to host +soundhunter.xyz: could not connect to host sourcelair.com: did not receive HSTS header southside-crew.club: could not connect to host southworcestershiregpservices.co.uk: could not connect to host @@ -3071,13 +3089,11 @@ subdimension.org: could not connect to host subtitle.rip: could not connect to host sudo.im: could not connect to host sudo.li: did not receive HSTS header -sufix.cz: could not connect to host suite73.org: could not connect to host suksit.com: could not connect to host sumoatm.com: did not receive HSTS header sumoscout.de: did not receive HSTS header suncountrymarine.com: did not receive HSTS header -sunflyer.cn: did not receive HSTS header sunshinepress.org: could not connect to host superbabysitting.ch: could not connect to host supereight.net: did not receive HSTS header @@ -3092,6 +3108,7 @@ sushi101tempe.com: did not receive HSTS header suzukikenichi.com: did not receive HSTS header sv.search.yahoo.com: did not receive HSTS header sweep-me.net: did not receive HSTS header +sweetstreats.ca: could not connect to host swimming.ca: did not receive HSTS header swimturk.com.tr: did not receive HSTS header swmd5c.org: did not receive HSTS header @@ -3106,7 +3123,6 @@ syncserve.net: did not receive HSTS header syneic.com: did not receive HSTS header syno.gq: could not connect to host sysadmin.xyz: could not connect to host -sysmike.de: could not connect to host syso.name: could not connect to host szaszm.tk: max-age too low: 0 t.facebook.com: did not receive HSTS header @@ -3137,6 +3153,7 @@ tastyyy.co: could not connect to host tauchkater.de: could not connect to host tavopica.lt: did not receive HSTS header taxbench.com: could not connect to host +tazemama.biz: could not connect to host tazz.in: could not connect to host tcao.info: could not connect to host tcdw.net: could not connect to host @@ -3192,7 +3209,6 @@ themerchandiser.net: [Exception... "Component returned failure code: 0x80004005 themicrocapital.com: could not connect to host themillerslive.com: could not connect to host theodorejones.info: could not connect to host -theojones.name: did not receive HSTS header thepartywarehouse.co.uk: did not receive HSTS header thepiratebay.al: could not connect to host thepiratebay.tech: could not connect to host @@ -3234,8 +3250,7 @@ tirex.media: did not receive HSTS header tittelbach.at: did not receive HSTS header titties.ml: could not connect to host tjs.me: could not connect to host -tkarstens.de: could not connect to host -tlach.cz: did not receive HSTS header +tkarstens.de: did not receive HSTS header tlo.hosting: could not connect to host tlo.network: could not connect to host tls.li: could not connect to host @@ -3257,7 +3272,6 @@ tomharling.co.uk: max-age too low: 86400 tomharling.uk: max-age too low: 86400 tomlankhorst.nl: did not receive HSTS header tommsy.com: did not receive HSTS header -tommyads.com: could not connect to host tonburi.jp: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] tonyfantjr.com: could not connect to host toomanypillows.com: could not connect to host @@ -3293,7 +3307,7 @@ trusitio.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERR trustmeimfancy.com: could not connect to host trybind.com: could not connect to host ts2.se: did not receive HSTS header -tsecy.com: did not receive HSTS header +tsecy.com: could not connect to host tsgoc.com: did not receive HSTS header tssouthernpower.com: max-age too low: 0 tuingereedschappen.net: could not connect to host @@ -3326,7 +3340,6 @@ tyroproducts.eu: did not receive HSTS header tzappa.net: could not connect to host u-blox.com: did not receive HSTS header ua.search.yahoo.com: did not receive HSTS header -uadp.pw: could not connect to host ubicloud.de: could not connect to host ublox.com: did not receive HSTS header ubtce.com: could not connect to host @@ -3340,6 +3353,7 @@ ulmo.dk: could not connect to host ultros.io: did not receive HSTS header umidev.com: could not connect to host umie.cc: did not receive HSTS header +umwandeln-online.de: did not receive HSTS header unapp.me: could not connect to host unbanthe.net: could not connect to host unblocked.host: could not connect to host @@ -3417,7 +3431,6 @@ videnskabsklubben.dk: did not receive HSTS header videomuz.com: did not receive HSTS header vidz.ga: could not connect to host vieaw.com: could not connect to host -viewsea.com: could not connect to host viktorsvantesson.net: did not receive HSTS header vincentkooijman.at: did not receive HSTS header vincentkooijman.nl: did not receive HSTS header @@ -3442,7 +3455,6 @@ votockova.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERR vox.vg: did not receive HSTS header vpl.me: did not receive HSTS header vpn-byen.dk: did not receive HSTS header -vpn.black: could not connect to host vratny.space: could not connect to host vvl.me: did not receive HSTS header vxstream-sandbox.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] @@ -3494,6 +3506,7 @@ webtiles.co.uk: could not connect to host webtobesocial.de: could not connect to host webwork.pw: could not connect to host weddingenvelopes.co.uk: did not receive HSTS header +weddingibiza.nl: could not connect to host wellsolveit.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 121" data: no] weltmeisterschaft.net: could not connect to host weme.eu: could not connect to host @@ -3648,6 +3661,7 @@ xuyh0120.win: did not receive HSTS header xxbase.com: could not connect to host y-o-w.com: did not receive HSTS header y-s.pw: did not receive HSTS header +yal.sh: could not connect to host yalook.com: did not receive HSTS header yamaken.jp: did not receive HSTS header yamamo10.com: could not connect to host @@ -3699,7 +3713,7 @@ zeitpunkt-kulturmagazin.de: did not receive HSTS header zeitzer-turngala.de: could not connect to host zelezny.uk: did not receive HSTS header zelfstandigemakelaars.net: did not receive HSTS header -zenithmedia.ca: did not receive HSTS header +zellari.ru: could not connect to host zenpayroll.com: did not receive HSTS header zentraler-kreditausschuss.de: did not receive HSTS header zentralwolke.de: did not receive HSTS header diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index e563afb25fca..b56e36a3bff7 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/ #include -const PRTime gPreloadListExpirationTime = INT64_C(1489413853441000); +const PRTime gPreloadListExpirationTime = INT64_C(1489501548062000); static const char kSTSHostTable[] = { /* "007sascha.de", true */ '0', '0', '7', 's', 'a', 's', 'c', 'h', 'a', '.', 'd', 'e', '\0', @@ -78,6 +78,7 @@ static const char kSTSHostTable[] = { /* "1on1on1.de", true */ '1', 'o', 'n', '1', 'o', 'n', '1', '.', 'd', 'e', '\0', /* "1on1on1.tv", true */ '1', 'o', 'n', '1', 'o', 'n', '1', '.', 't', 'v', '\0', /* "1pw.ca", true */ '1', 'p', 'w', '.', 'c', 'a', '\0', + /* "1px.tv", true */ '1', 'p', 'x', '.', 't', 'v', '\0', /* "1q365a.com", true */ '1', 'q', '3', '6', '5', 'a', '.', 'c', 'o', 'm', '\0', /* "1rs.nl", true */ '1', 'r', 's', '.', 'n', 'l', '\0', /* "1st-community.de", true */ '1', 's', 't', '-', 'c', 'o', 'm', 'm', 'u', 'n', 'i', 't', 'y', '.', 'd', 'e', '\0', @@ -412,8 +413,9 @@ static const char kSTSHostTable[] = { /* "akaoma.com", true */ 'a', 'k', 'a', 'o', 'm', 'a', '.', 'c', 'o', 'm', '\0', /* "akay.me", true */ 'a', 'k', 'a', 'y', '.', 'm', 'e', '\0', /* "akboy.pw", true */ 'a', 'k', 'b', 'o', 'y', '.', 'p', 'w', '\0', - /* "akdigitalegesellschaft.de", true */ 'a', 'k', 'd', 'i', 'g', 'i', 't', 'a', 'l', 'e', 'g', 'e', 's', 'e', 'l', 'l', 's', 'c', 'h', 'a', 'f', 't', '.', 'd', 'e', '\0', + /* "akdigitalegesellschaft.de", false */ 'a', 'k', 'd', 'i', 'g', 'i', 't', 'a', 'l', 'e', 'g', 'e', 's', 'e', 'l', 'l', 's', 'c', 'h', 'a', 'f', 't', '.', 'd', 'e', '\0', /* "akelius.de", true */ 'a', 'k', 'e', 'l', 'i', 'u', 's', '.', 'd', 'e', '\0', + /* "akerek.hu", true */ 'a', 'k', 'e', 'r', 'e', 'k', '.', 'h', 'u', '\0', /* "akhilindurti.com", false */ 'a', 'k', 'h', 'i', 'l', 'i', 'n', 'd', 'u', 'r', 't', 'i', '.', 'c', 'o', 'm', '\0', /* "akhras.at", true */ 'a', 'k', 'h', 'r', 'a', 's', '.', 'a', 't', '\0', /* "akombakom.net", true */ 'a', 'k', 'o', 'm', 'b', 'a', 'k', 'o', 'm', '.', 'n', 'e', 't', '\0', @@ -478,7 +480,6 @@ static const char kSTSHostTable[] = { /* "alittlebitcheeky.com", false */ 'a', 'l', 'i', 't', 't', 'l', 'e', 'b', 'i', 't', 'c', 'h', 'e', 'e', 'k', 'y', '.', 'c', 'o', 'm', '\0', /* "aljaspod.com", true */ 'a', 'l', 'j', 'a', 's', 'p', 'o', 'd', '.', 'c', 'o', 'm', '\0', /* "aljaspod.hu", true */ 'a', 'l', 'j', 'a', 's', 'p', 'o', 'd', '.', 'h', 'u', '\0', - /* "aljaspod.net", true */ 'a', 'l', 'j', 'a', 's', 'p', 'o', 'd', '.', 'n', 'e', 't', '\0', /* "alkamitech.com", true */ 'a', 'l', 'k', 'a', 'm', 'i', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0', /* "alkel.info", true */ 'a', 'l', 'k', 'e', 'l', '.', 'i', 'n', 'f', 'o', '\0', /* "all-connect.net", true */ 'a', 'l', 'l', '-', 'c', 'o', 'n', 'n', 'e', 'c', 't', '.', 'n', 'e', 't', '\0', @@ -517,7 +518,6 @@ static const char kSTSHostTable[] = { /* "altedirect.com", true */ 'a', 'l', 't', 'e', 'd', 'i', 'r', 'e', 'c', 't', '.', 'c', 'o', 'm', '\0', /* "alterbaum.net", true */ 'a', 'l', 't', 'e', 'r', 'b', 'a', 'u', 'm', '.', 'n', 'e', 't', '\0', /* "alternativet.party", true */ 'a', 'l', 't', 'e', 'r', 'n', 'a', 't', 'i', 'v', 'e', 't', '.', 'p', 'a', 'r', 't', 'y', '\0', - /* "altesses.eu", true */ 'a', 'l', 't', 'e', 's', 's', 'e', 's', '.', 'e', 'u', '\0', /* "altestore.com", true */ 'a', 'l', 't', 'e', 's', 't', 'o', 'r', 'e', '.', 'c', 'o', 'm', '\0', /* "altonblom.com", true */ 'a', 'l', 't', 'o', 'n', 'b', 'l', 'o', 'm', '.', 'c', 'o', 'm', '\0', /* "altopia.com", true */ 'a', 'l', 't', 'o', 'p', 'i', 'a', '.', 'c', 'o', 'm', '\0', @@ -959,6 +959,7 @@ static const char kSTSHostTable[] = { /* "aylak.com", true */ 'a', 'y', 'l', 'a', 'k', '.', 'c', 'o', 'm', '\0', /* "aymerick.fr", true */ 'a', 'y', 'm', 'e', 'r', 'i', 'c', 'k', '.', 'f', 'r', '\0', /* "aymericlagier.com", true */ 'a', 'y', 'm', 'e', 'r', 'i', 'c', 'l', 'a', 'g', 'i', 'e', 'r', '.', 'c', 'o', 'm', '\0', + /* "ayurveda101.com", false */ 'a', 'y', 'u', 'r', 'v', 'e', 'd', 'a', '1', '0', '1', '.', 'c', 'o', 'm', '\0', /* "azabani.com", true */ 'a', 'z', 'a', 'b', 'a', 'n', 'i', '.', 'c', 'o', 'm', '\0', /* "azazy.net", true */ 'a', 'z', 'a', 'z', 'y', '.', 'n', 'e', 't', '\0', /* "azimut.fr", true */ 'a', 'z', 'i', 'm', 'u', 't', '.', 'f', 'r', '\0', @@ -1163,6 +1164,7 @@ static const char kSTSHostTable[] = { /* "bendix.co", true */ 'b', 'e', 'n', 'd', 'i', 'x', '.', 'c', 'o', '\0', /* "beneathvt.com", true */ 'b', 'e', 'n', 'e', 'a', 't', 'h', 'v', 't', '.', 'c', 'o', 'm', '\0', /* "benhartmann.de", true */ 'b', 'e', 'n', 'h', 'a', 'r', 't', 'm', 'a', 'n', 'n', '.', 'd', 'e', '\0', + /* "benjamin.pe", true */ 'b', 'e', 'n', 'j', 'a', 'm', 'i', 'n', '.', 'p', 'e', '\0', /* "benjaminjurke.net", true */ 'b', 'e', 'n', 'j', 'a', 'm', 'i', 'n', 'j', 'u', 'r', 'k', 'e', '.', 'n', 'e', 't', '\0', /* "benjamins.com", true */ 'b', 'e', 'n', 'j', 'a', 'm', 'i', 'n', 's', '.', 'c', 'o', 'm', '\0', /* "benmatthews.com.au", true */ 'b', 'e', 'n', 'm', 'a', 't', 't', 'h', 'e', 'w', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', @@ -1272,6 +1274,7 @@ static const char kSTSHostTable[] = { /* "biguixhe.net", true */ 'b', 'i', 'g', 'u', 'i', 'x', 'h', 'e', '.', 'n', 'e', 't', '\0', /* "bike-shack.com", true */ 'b', 'i', 'k', 'e', '-', 's', 'h', 'a', 'c', 'k', '.', 'c', 'o', 'm', '\0', /* "bikermusic.net", false */ 'b', 'i', 'k', 'e', 'r', 'm', 'u', 's', 'i', 'c', '.', 'n', 'e', 't', '\0', + /* "bikiniseli.com", true */ 'b', 'i', 'k', 'i', 'n', 'i', 's', 'e', 'l', 'i', '.', 'c', 'o', 'm', '\0', /* "bildermachr.de", true */ 'b', 'i', 'l', 'd', 'e', 'r', 'm', 'a', 'c', 'h', 'r', '.', 'd', 'e', '\0', /* "bilgo.com", true */ 'b', 'i', 'l', 'g', 'o', '.', 'c', 'o', 'm', '\0', /* "bilke.org", true */ 'b', 'i', 'l', 'k', 'e', '.', 'o', 'r', 'g', '\0', @@ -1308,7 +1311,6 @@ static const char kSTSHostTable[] = { /* "biou.me", true */ 'b', 'i', 'o', 'u', '.', 'm', 'e', '\0', /* "bip.gov.sa", false */ 'b', 'i', 'p', '.', 'g', 'o', 'v', '.', 's', 'a', '\0', /* "birdfeeder.online", true */ 'b', 'i', 'r', 'd', 'f', 'e', 'e', 'd', 'e', 'r', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0', - /* "birkhoff.me", true */ 'b', 'i', 'r', 'k', 'h', 'o', 'f', 'f', '.', 'm', 'e', '\0', /* "birminghamsunset.com", true */ 'b', 'i', 'r', 'm', 'i', 'n', 'g', 'h', 'a', 'm', 's', 'u', 'n', 's', 'e', 't', '.', 'c', 'o', 'm', '\0', /* "bit-rapid.com", true */ 'b', 'i', 't', '-', 'r', 'a', 'p', 'i', 'd', '.', 'c', 'o', 'm', '\0', /* "bit-sentinel.com", true */ 'b', 'i', 't', '-', 's', 'e', 'n', 't', 'i', 'n', 'e', 'l', '.', 'c', 'o', 'm', '\0', @@ -1345,7 +1347,6 @@ static const char kSTSHostTable[] = { /* "bitminter.com", true */ 'b', 'i', 't', 'm', 'i', 'n', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "bitmoe.com", true */ 'b', 'i', 't', 'm', 'o', 'e', '.', 'c', 'o', 'm', '\0', /* "bitmon.net", true */ 'b', 'i', 't', 'm', 'o', 'n', '.', 'n', 'e', 't', '\0', - /* "bitnet.io", false */ 'b', 'i', 't', 'n', 'e', 't', '.', 'i', 'o', '\0', /* "bitok.com", true */ 'b', 'i', 't', 'o', 'k', '.', 'c', 'o', 'm', '\0', /* "bitpod.de", true */ 'b', 'i', 't', 'p', 'o', 'd', '.', 'd', 'e', '\0', /* "bitrage.de", true */ 'b', 'i', 't', 'r', 'a', 'g', 'e', '.', 'd', 'e', '\0', @@ -1540,7 +1541,6 @@ static const char kSTSHostTable[] = { /* "bpadvisors.eu", true */ 'b', 'p', 'a', 'd', 'v', 'i', 's', 'o', 'r', 's', '.', 'e', 'u', '\0', /* "bpastudies.org", true */ 'b', 'p', 'a', 's', 't', 'u', 'd', 'i', 'e', 's', '.', 'o', 'r', 'g', '\0', /* "bpol-forum.de", true */ 'b', 'p', 'o', 'l', '-', 'f', 'o', 'r', 'u', 'm', '.', 'd', 'e', '\0', - /* "bqtoolbox.com", true */ 'b', 'q', 't', 'o', 'o', 'l', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0', /* "br.search.yahoo.com", false */ 'b', 'r', '.', 's', 'e', 'a', 'r', 'c', 'h', '.', 'y', 'a', 'h', 'o', 'o', '.', 'c', 'o', 'm', '\0', /* "bradbrockmeyer.com", true */ 'b', 'r', 'a', 'd', 'b', 'r', 'o', 'c', 'k', 'm', 'e', 'y', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "bradkovach.com", true */ 'b', 'r', 'a', 'd', 'k', 'o', 'v', 'a', 'c', 'h', '.', 'c', 'o', 'm', '\0', @@ -1778,8 +1778,8 @@ static const char kSTSHostTable[] = { /* "callision.com", true */ 'c', 'a', 'l', 'l', 'i', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "callsigns.ca", true */ 'c', 'a', 'l', 'l', 's', 'i', 'g', 'n', 's', '.', 'c', 'a', '\0', /* "calomel.org", true */ 'c', 'a', 'l', 'o', 'm', 'e', 'l', '.', 'o', 'r', 'g', '\0', + /* "calories.org", true */ 'c', 'a', 'l', 'o', 'r', 'i', 'e', 's', '.', 'o', 'r', 'g', '\0', /* "caltonnutrition.com", true */ 'c', 'a', 'l', 't', 'o', 'n', 'n', 'u', 't', 'r', 'i', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0', - /* "calvin.my", true */ 'c', 'a', 'l', 'v', 'i', 'n', '.', 'm', 'y', '\0', /* "calyxengineers.com", true */ 'c', 'a', 'l', 'y', 'x', 'e', 'n', 'g', 'i', 'n', 'e', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0', /* "camaya.net", true */ 'c', 'a', 'm', 'a', 'y', 'a', '.', 'n', 'e', 't', '\0', /* "cambier.org", true */ 'c', 'a', 'm', 'b', 'i', 'e', 'r', '.', 'o', 'r', 'g', '\0', @@ -1876,7 +1876,6 @@ static const char kSTSHostTable[] = { /* "cashplk.com", true */ 'c', 'a', 's', 'h', 'p', 'l', 'k', '.', 'c', 'o', 'm', '\0', /* "casinolistings.com", true */ 'c', 'a', 's', 'i', 'n', 'o', 'l', 'i', 's', 't', 'i', 'n', 'g', 's', '.', 'c', 'o', 'm', '\0', /* "casinoreal.com", true */ 'c', 'a', 's', 'i', 'n', 'o', 'r', 'e', 'a', 'l', '.', 'c', 'o', 'm', '\0', - /* "casioshop.eu", true */ 'c', 'a', 's', 'i', 'o', 's', 'h', 'o', 'p', '.', 'e', 'u', '\0', /* "casperpanel.com", true */ 'c', 'a', 's', 'p', 'e', 'r', 'p', 'a', 'n', 'e', 'l', '.', 'c', 'o', 'm', '\0', /* "castlejackpot.com", true */ 'c', 'a', 's', 't', 'l', 'e', 'j', 'a', 'c', 'k', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0', /* "cat-box.de", true */ 'c', 'a', 't', '-', 'b', 'o', 'x', '.', 'd', 'e', '\0', @@ -2078,6 +2077,7 @@ static const char kSTSHostTable[] = { /* "chun.pro", true */ 'c', 'h', 'u', 'n', '.', 'p', 'r', 'o', '\0', /* "chunche.net", true */ 'c', 'h', 'u', 'n', 'c', 'h', 'e', '.', 'n', 'e', 't', '\0', /* "churchthemes.com", true */ 'c', 'h', 'u', 'r', 'c', 'h', 't', 'h', 'e', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0', + /* "cianmawhinney.xyz", true */ 'c', 'i', 'a', 'n', 'm', 'a', 'w', 'h', 'i', 'n', 'n', 'e', 'y', '.', 'x', 'y', 'z', '\0', /* "ciat.no", false */ 'c', 'i', 'a', 't', '.', 'n', 'o', '\0', /* "cidbot.com", true */ 'c', 'i', 'd', 'b', 'o', 't', '.', 'c', 'o', 'm', '\0', /* "cienbeaute-lidl.fr", true */ 'c', 'i', 'e', 'n', 'b', 'e', 'a', 'u', 't', 'e', '-', 'l', 'i', 'd', 'l', '.', 'f', 'r', '\0', @@ -2113,7 +2113,6 @@ static const char kSTSHostTable[] = { /* "citybusexpress.com", true */ 'c', 'i', 't', 'y', 'b', 'u', 's', 'e', 'x', 'p', 'r', 'e', 's', 's', '.', 'c', 'o', 'm', '\0', /* "ciubotaru.tk", true */ 'c', 'i', 'u', 'b', 'o', 't', 'a', 'r', 'u', '.', 't', 'k', '\0', /* "cium.ru", true */ 'c', 'i', 'u', 'm', '.', 'r', 'u', '\0', - /* "cj-jackson.com", true */ 'c', 'j', '-', 'j', 'a', 'c', 'k', 's', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "cjcaron.org", true */ 'c', 'j', 'c', 'a', 'r', 'o', 'n', '.', 'o', 'r', 'g', '\0', /* "cjey.me", true */ 'c', 'j', 'e', 'y', '.', 'm', 'e', '\0', /* "ck.cx", true */ 'c', 'k', '.', 'c', 'x', '\0', @@ -2151,7 +2150,6 @@ static const char kSTSHostTable[] = { /* "clickclickphish.com", true */ 'c', 'l', 'i', 'c', 'k', 'c', 'l', 'i', 'c', 'k', 'p', 'h', 'i', 's', 'h', '.', 'c', 'o', 'm', '\0', /* "clickenergy.com.au", true */ 'c', 'l', 'i', 'c', 'k', 'e', 'n', 'e', 'r', 'g', 'y', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "clickforclever.com", true */ 'c', 'l', 'i', 'c', 'k', 'f', 'o', 'r', 'c', 'l', 'e', 'v', 'e', 'r', '.', 'c', 'o', 'm', '\0', - /* "clickphish.com", true */ 'c', 'l', 'i', 'c', 'k', 'p', 'h', 'i', 's', 'h', '.', 'c', 'o', 'm', '\0', /* "clicks.co.za", true */ 'c', 'l', 'i', 'c', 'k', 's', '.', 'c', 'o', '.', 'z', 'a', '\0', /* "clientboss.com", true */ 'c', 'l', 'i', 'e', 'n', 't', 'b', 'o', 's', 's', '.', 'c', 'o', 'm', '\0', /* "clientsecure.me", true */ 'c', 'l', 'i', 'e', 'n', 't', 's', 'e', 'c', 'u', 'r', 'e', '.', 'm', 'e', '\0', @@ -2371,7 +2369,6 @@ static const char kSTSHostTable[] = { /* "convergemagazine.com", true */ 'c', 'o', 'n', 'v', 'e', 'r', 'g', 'e', 'm', 'a', 'g', 'a', 'z', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0', /* "conversiones.com", true */ 'c', 'o', 'n', 'v', 'e', 'r', 's', 'i', 'o', 'n', 'e', 's', '.', 'c', 'o', 'm', '\0', /* "convert.im", true */ 'c', 'o', 'n', 'v', 'e', 'r', 't', '.', 'i', 'm', '\0', - /* "convert.zone", true */ 'c', 'o', 'n', 'v', 'e', 'r', 't', '.', 'z', 'o', 'n', 'e', '\0', /* "converter.ml", true */ 'c', 'o', 'n', 'v', 'e', 'r', 't', 'e', 'r', '.', 'm', 'l', '\0', /* "convocatoriafundacionpepsicomexico.org", false */ 'c', 'o', 'n', 'v', 'o', 'c', 'a', 't', 'o', 'r', 'i', 'a', 'f', 'u', 'n', 'd', 'a', 'c', 'i', 'o', 'n', 'p', 'e', 'p', 's', 'i', 'c', 'o', 'm', 'e', 'x', 'i', 'c', 'o', '.', 'o', 'r', 'g', '\0', /* "cookicons.co", true */ 'c', 'o', 'o', 'k', 'i', 'c', 'o', 'n', 's', '.', 'c', 'o', '\0', @@ -2480,12 +2477,12 @@ static const char kSTSHostTable[] = { /* "crownruler.com", true */ 'c', 'r', 'o', 'w', 'n', 'r', 'u', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "crstat.ru", true */ 'c', 'r', 's', 't', 'a', 't', '.', 'r', 'u', '\0', /* "crt.sh", true */ 'c', 'r', 't', '.', 's', 'h', '\0', - /* "crtvmgmt.com", false */ 'c', 'r', 't', 'v', 'm', 'g', 'm', 't', '.', 'c', 'o', 'm', '\0', /* "crufad.org", true */ 'c', 'r', 'u', 'f', 'a', 'd', '.', 'o', 'r', 'g', '\0', /* "crumbcontrol.com", true */ 'c', 'r', 'u', 'm', 'b', 'c', 'o', 'n', 't', 'r', 'o', 'l', '.', 'c', 'o', 'm', '\0', /* "crushroom.com", true */ 'c', 'r', 'u', 's', 'h', 'r', 'o', 'o', 'm', '.', 'c', 'o', 'm', '\0', /* "crute.me", true */ 'c', 'r', 'u', 't', 'e', '.', 'm', 'e', '\0', /* "crvv.me", true */ 'c', 'r', 'v', 'v', '.', 'm', 'e', '\0', + /* "cryptearth.de", true */ 'c', 'r', 'y', 'p', 't', 'e', 'a', 'r', 't', 'h', '.', 'd', 'e', '\0', /* "crypticshell.co.uk", true */ 'c', 'r', 'y', 'p', 't', 'i', 'c', 's', 'h', 'e', 'l', 'l', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "crypto.cat", false */ 'c', 'r', 'y', 'p', 't', 'o', '.', 'c', 'a', 't', '\0', /* "crypto.graphics", true */ 'c', 'r', 'y', 'p', 't', 'o', '.', 'g', 'r', 'a', 'p', 'h', 'i', 'c', 's', '\0', @@ -2663,6 +2660,7 @@ static const char kSTSHostTable[] = { /* "danielcowie.me", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'c', 'o', 'w', 'i', 'e', '.', 'm', 'e', '\0', /* "danielheal.net", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'h', 'e', 'a', 'l', '.', 'n', 'e', 't', '\0', /* "danielhochleitner.de", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'h', 'o', 'c', 'h', 'l', 'e', 'i', 't', 'n', 'e', 'r', '.', 'd', 'e', '\0', + /* "danieliancu.com", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'i', 'a', 'n', 'c', 'u', '.', 'c', 'o', 'm', '\0', /* "danieljamesscott.org", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'j', 'a', 'm', 'e', 's', 's', 'c', 'o', 't', 't', '.', 'o', 'r', 'g', '\0', /* "danielkoster.nl", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'k', 'o', 's', 't', 'e', 'r', '.', 'n', 'l', '\0', /* "danielmarquard.com", true */ 'd', 'a', 'n', 'i', 'e', 'l', 'm', 'a', 'r', 'q', 'u', 'a', 'r', 'd', '.', 'c', 'o', 'm', '\0', @@ -2696,7 +2694,6 @@ static const char kSTSHostTable[] = { /* "darkdestiny.ch", true */ 'd', 'a', 'r', 'k', 'd', 'e', 's', 't', 'i', 'n', 'y', '.', 'c', 'h', '\0', /* "darkishgreen.com", true */ 'd', 'a', 'r', 'k', 'i', 's', 'h', 'g', 'r', 'e', 'e', 'n', '.', 'c', 'o', 'm', '\0', /* "darkkeepers.dk", true */ 'd', 'a', 'r', 'k', 'k', 'e', 'e', 'p', 'e', 'r', 's', '.', 'd', 'k', '\0', - /* "darkpony.ru", true */ 'd', 'a', 'r', 'k', 'p', 'o', 'n', 'y', '.', 'r', 'u', '\0', /* "darkserver.fedoraproject.org", true */ 'd', 'a', 'r', 'k', 's', 'e', 'r', 'v', 'e', 'r', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0', /* "darkserver.stg.fedoraproject.org", true */ 'd', 'a', 'r', 'k', 's', 'e', 'r', 'v', 'e', 'r', '.', 's', 't', 'g', '.', 'f', 'e', 'd', 'o', 'r', 'a', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0', /* "darkshop.nl", true */ 'd', 'a', 'r', 'k', 's', 'h', 'o', 'p', '.', 'n', 'l', '\0', @@ -3197,7 +3194,6 @@ static const char kSTSHostTable[] = { /* "dreaming.solutions", true */ 'd', 'r', 'e', 'a', 'm', 'i', 'n', 'g', '.', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '\0', /* "dreamsforabetterworld.com.au", true */ 'd', 'r', 'e', 'a', 'm', 's', 'f', 'o', 'r', 'a', 'b', 'e', 't', 't', 'e', 'r', 'w', 'o', 'r', 'l', 'd', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "dreamtechie.com", true */ 'd', 'r', 'e', 'a', 'm', 't', 'e', 'c', 'h', 'i', 'e', '.', 'c', 'o', 'm', '\0', - /* "dredgepress.com", true */ 'd', 'r', 'e', 'd', 'g', 'e', 'p', 'r', 'e', 's', 's', '.', 'c', 'o', 'm', '\0', /* "dreid.org", true */ 'd', 'r', 'e', 'i', 'd', '.', 'o', 'r', 'g', '\0', /* "dreizwosechs.de", true */ 'd', 'r', 'e', 'i', 'z', 'w', 'o', 's', 'e', 'c', 'h', 's', '.', 'd', 'e', '\0', /* "drew.red", true */ 'd', 'r', 'e', 'w', '.', 'r', 'e', 'd', '\0', @@ -3239,6 +3235,7 @@ static const char kSTSHostTable[] = { /* "dt27.org", true */ 'd', 't', '2', '7', '.', 'o', 'r', 'g', '\0', /* "dubaieveningsafari.com", true */ 'd', 'u', 'b', 'a', 'i', 'e', 'v', 'e', 'n', 'i', 'n', 'g', 's', 'a', 'f', 'a', 'r', 'i', '.', 'c', 'o', 'm', '\0', /* "duch.cloud", true */ 'd', 'u', 'c', 'h', '.', 'c', 'l', 'o', 'u', 'd', '\0', + /* "duckasylum.com", true */ 'd', 'u', 'c', 'k', 'a', 's', 'y', 'l', 'u', 'm', '.', 'c', 'o', 'm', '\0', /* "duckduckstart.com", true */ 'd', 'u', 'c', 'k', 'd', 'u', 'c', 'k', 's', 't', 'a', 'r', 't', '.', 'c', 'o', 'm', '\0', /* "duckinc.net", true */ 'd', 'u', 'c', 'k', 'i', 'n', 'c', '.', 'n', 'e', 't', '\0', /* "ducohosting.com", true */ 'd', 'u', 'c', 'o', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0', @@ -3258,7 +3255,6 @@ static const char kSTSHostTable[] = { /* "duo.money", true */ 'd', 'u', 'o', '.', 'm', 'o', 'n', 'e', 'y', '\0', /* "durangoenergyllc.com", true */ 'd', 'u', 'r', 'a', 'n', 'g', 'o', 'e', 'n', 'e', 'r', 'g', 'y', 'l', 'l', 'c', '.', 'c', 'o', 'm', '\0', /* "durys.be", true */ 'd', 'u', 'r', 'y', 's', '.', 'b', 'e', '\0', - /* "dustri.org", true */ 'd', 'u', 's', 't', 'r', 'i', '.', 'o', 'r', 'g', '\0', /* "dustygroove.com", true */ 'd', 'u', 's', 't', 'y', 'g', 'r', 'o', 'o', 'v', 'e', '.', 'c', 'o', 'm', '\0', /* "dutch1.nl", true */ 'd', 'u', 't', 'c', 'h', '1', '.', 'n', 'l', '\0', /* "dutchessuganda.com", true */ 'd', 'u', 't', 'c', 'h', 'e', 's', 's', 'u', 'g', 'a', 'n', 'd', 'a', '.', 'c', 'o', 'm', '\0', @@ -3279,7 +3275,6 @@ static const char kSTSHostTable[] = { /* "dxgl.info", true */ 'd', 'x', 'g', 'l', '.', 'i', 'n', 'f', 'o', '\0', /* "dyeager.org", true */ 'd', 'y', 'e', 'a', 'g', 'e', 'r', '.', 'o', 'r', 'g', '\0', /* "dyktig.as", true */ 'd', 'y', 'k', 't', 'i', 'g', '.', 'a', 's', '\0', - /* "dymersion.com", true */ 'd', 'y', 'm', 'e', 'r', 's', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "dyn-nserve.net", true */ 'd', 'y', 'n', '-', 'n', 's', 'e', 'r', 'v', 'e', '.', 'n', 'e', 't', '\0', /* "dyn.im", true */ 'd', 'y', 'n', '.', 'i', 'm', '\0', /* "dynaloop.net", true */ 'd', 'y', 'n', 'a', 'l', 'o', 'o', 'p', '.', 'n', 'e', 't', '\0', @@ -3350,7 +3345,6 @@ static const char kSTSHostTable[] = { /* "ecompen.co.za", true */ 'e', 'c', 'o', 'm', 'p', 'e', 'n', '.', 'c', 'o', '.', 'z', 'a', '\0', /* "econsumer.gov", true */ 'e', 'c', 'o', 'n', 's', 'u', 'm', 'e', 'r', '.', 'g', 'o', 'v', '\0', /* "ecorp.cc", true */ 'e', 'c', 'o', 'r', 'p', '.', 'c', 'c', '\0', - /* "ecorus.eu", true */ 'e', 'c', 'o', 'r', 'u', 's', '.', 'e', 'u', '\0', /* "ecos-ev.de", true */ 'e', 'c', 'o', 's', '-', 'e', 'v', '.', 'd', 'e', '\0', /* "ecosystem.atlassian.net", true */ 'e', 'c', 'o', 's', 'y', 's', 't', 'e', 'm', '.', 'a', 't', 'l', 'a', 's', 's', 'i', 'a', 'n', '.', 'n', 'e', 't', '\0', /* "ecrimex.net", true */ 'e', 'c', 'r', 'i', 'm', 'e', 'x', '.', 'n', 'e', 't', '\0', @@ -3391,6 +3385,7 @@ static const char kSTSHostTable[] = { /* "edwardsnowden.com", true */ 'e', 'd', 'w', 'a', 'r', 'd', 's', 'n', 'o', 'w', 'd', 'e', 'n', '.', 'c', 'o', 'm', '\0', /* "edxg.de", false */ 'e', 'd', 'x', 'g', '.', 'd', 'e', '\0', /* "edyou.eu", true */ 'e', 'd', 'y', 'o', 'u', '.', 'e', 'u', '\0', + /* "edzilla.info", true */ 'e', 'd', 'z', 'i', 'l', 'l', 'a', '.', 'i', 'n', 'f', 'o', '\0', /* "eelsden.net", true */ 'e', 'e', 'l', 's', 'd', 'e', 'n', '.', 'n', 'e', 't', '\0', /* "eelzak.nl", true */ 'e', 'e', 'l', 'z', 'a', 'k', '.', 'n', 'l', '\0', /* "eeqj.com", true */ 'e', 'e', 'q', 'j', '.', 'c', 'o', 'm', '\0', @@ -3449,6 +3444,7 @@ static const char kSTSHostTable[] = { /* "electronicfasteners.com", true */ 'e', 'l', 'e', 'c', 't', 'r', 'o', 'n', 'i', 'c', 'f', 'a', 's', 't', 'e', 'n', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0', /* "elefantevoador.com", true */ 'e', 'l', 'e', 'f', 'a', 'n', 't', 'e', 'v', 'o', 'a', 'd', 'o', 'r', '.', 'c', 'o', 'm', '\0', /* "eleicoes2016.com.br", true */ 'e', 'l', 'e', 'i', 'c', 'o', 'e', 's', '2', '0', '1', '6', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', + /* "elektronring.com", true */ 'e', 'l', 'e', 'k', 't', 'r', 'o', 'n', 'r', 'i', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "elektropost.org", true */ 'e', 'l', 'e', 'k', 't', 'r', 'o', 'p', 'o', 's', 't', '.', 'o', 'r', 'g', '\0', /* "element-43.com", true */ 'e', 'l', 'e', 'm', 'e', 'n', 't', '-', '4', '3', '.', 'c', 'o', 'm', '\0', /* "elemental.software", true */ 'e', 'l', 'e', 'm', 'e', 'n', 't', 'a', 'l', '.', 's', 'o', 'f', 't', 'w', 'a', 'r', 'e', '\0', @@ -3467,7 +3463,6 @@ static const char kSTSHostTable[] = { /* "eliott.be", true */ 'e', 'l', 'i', 'o', 't', 't', '.', 'b', 'e', '\0', /* "elisa.ee", false */ 'e', 'l', 'i', 's', 'a', '.', 'e', 'e', '\0', /* "elisabeth-strunz.de", true */ 'e', 'l', 'i', 's', 'a', 'b', 'e', 't', 'h', '-', 's', 't', 'r', 'u', 'n', 'z', '.', 'd', 'e', '\0', - /* "elite-porno.ru", true */ 'e', 'l', 'i', 't', 'e', '-', 'p', 'o', 'r', 'n', 'o', '.', 'r', 'u', '\0', /* "elite12.de", true */ 'e', 'l', 'i', 't', 'e', '1', '2', '.', 'd', 'e', '\0', /* "elitegameservers.net", true */ 'e', 'l', 'i', 't', 'e', 'g', 'a', 'm', 'e', 's', 'e', 'r', 'v', 'e', 'r', 's', '.', 'n', 'e', 't', '\0', /* "elitehosting.de", true */ 'e', 'l', 'i', 't', 'e', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'd', 'e', '\0', @@ -3643,6 +3638,7 @@ static const char kSTSHostTable[] = { /* "esko.bar", true */ 'e', 's', 'k', 'o', '.', 'b', 'a', 'r', '\0', /* "eskriett.com", true */ 'e', 's', 'k', 'r', 'i', 'e', 't', 't', '.', 'c', 'o', 'm', '\0', /* "esn-ypci.com", true */ 'e', 's', 'n', '-', 'y', 'p', 'c', 'i', '.', 'c', 'o', 'm', '\0', + /* "esoa.net", true */ 'e', 's', 'o', 'a', '.', 'n', 'e', 't', '\0', /* "esocweb.com", true */ 'e', 's', 'o', 'c', 'w', 'e', 'b', '.', 'c', 'o', 'm', '\0', /* "esoko.eu", true */ 'e', 's', 'o', 'k', 'o', '.', 'e', 'u', '\0', /* "esono.de", true */ 'e', 's', 'o', 'n', 'o', '.', 'd', 'e', '\0', @@ -3809,7 +3805,6 @@ static const char kSTSHostTable[] = { /* "fahrenwal.de", true */ 'f', 'a', 'h', 'r', 'e', 'n', 'w', 'a', 'l', '.', 'd', 'e', '\0', /* "fahrenwalde.de", true */ 'f', 'a', 'h', 'r', 'e', 'n', 'w', 'a', 'l', 'd', 'e', '.', 'd', 'e', '\0', /* "failforward.org", true */ 'f', 'a', 'i', 'l', 'f', 'o', 'r', 'w', 'a', 'r', 'd', '.', 'o', 'r', 'g', '\0', - /* "failproof.be", true */ 'f', 'a', 'i', 'l', 'p', 'r', 'o', 'o', 'f', '.', 'b', 'e', '\0', /* "fairbill.com", true */ 'f', 'a', 'i', 'r', 'b', 'i', 'l', 'l', '.', 'c', 'o', 'm', '\0', /* "faircom.co.za", true */ 'f', 'a', 'i', 'r', 'c', 'o', 'm', '.', 'c', 'o', '.', 'z', 'a', '\0', /* "faktura.pl", true */ 'f', 'a', 'k', 't', 'u', 'r', 'a', '.', 'p', 'l', '\0', @@ -3870,6 +3865,7 @@ static const char kSTSHostTable[] = { /* "fatlossguide.xyz", true */ 'f', 'a', 't', 'l', 'o', 's', 's', 'g', 'u', 'i', 'd', 'e', '.', 'x', 'y', 'z', '\0', /* "fatzebra.com.au", false */ 'f', 'a', 't', 'z', 'e', 'b', 'r', 'a', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "faucetbox.com", true */ 'f', 'a', 'u', 'c', 'e', 't', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0', + /* "fawkex.me", true */ 'f', 'a', 'w', 'k', 'e', 'x', '.', 'm', 'e', '\0', /* "fawong.com", true */ 'f', 'a', 'w', 'o', 'n', 'g', '.', 'c', 'o', 'm', '\0', /* "faxreader.net", true */ 'f', 'a', 'x', 'r', 'e', 'a', 'd', 'e', 'r', '.', 'n', 'e', 't', '\0', /* "fca-tools.com", true */ 'f', 'c', 'a', '-', 't', 'o', 'o', 'l', 's', '.', 'c', 'o', 'm', '\0', @@ -3954,6 +3950,7 @@ static const char kSTSHostTable[] = { /* "financieringsportaal.nl", true */ 'f', 'i', 'n', 'a', 'n', 'c', 'i', 'e', 'r', 'i', 'n', 'g', 's', 'p', 'o', 'r', 't', 'a', 'a', 'l', '.', 'n', 'l', '\0', /* "findigo.fish", true */ 'f', 'i', 'n', 'd', 'i', 'g', 'o', '.', 'f', 'i', 's', 'h', '\0', /* "finditez.com", true */ 'f', 'i', 'n', 'd', 'i', 't', 'e', 'z', '.', 'c', 'o', 'm', '\0', + /* "findmybottleshop.com.au", true */ 'f', 'i', 'n', 'd', 'm', 'y', 'b', 'o', 't', 't', 'l', 'e', 's', 'h', 'o', 'p', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "findyour.diet", true */ 'f', 'i', 'n', 'd', 'y', 'o', 'u', 'r', '.', 'd', 'i', 'e', 't', '\0', /* "findyourvoice.ca", true */ 'f', 'i', 'n', 'd', 'y', 'o', 'u', 'r', 'v', 'o', 'i', 'c', 'e', '.', 'c', 'a', '\0', /* "finenet.com.tw", true */ 'f', 'i', 'n', 'e', 'n', 'e', 't', '.', 'c', 'o', 'm', '.', 't', 'w', '\0', @@ -4077,7 +4074,6 @@ static const char kSTSHostTable[] = { /* "font-converter.net", true */ 'f', 'o', 'n', 't', '-', 'c', 'o', 'n', 'v', 'e', 'r', 't', 'e', 'r', '.', 'n', 'e', 't', '\0', /* "fontein.de", true */ 'f', 'o', 'n', 't', 'e', 'i', 'n', '.', 'd', 'e', '\0', /* "fontlibrary.org", true */ 'f', 'o', 'n', 't', 'l', 'i', 'b', 'r', 'a', 'r', 'y', '.', 'o', 'r', 'g', '\0', - /* "foodacademy.capetown", true */ 'f', 'o', 'o', 'd', 'a', 'c', 'a', 'd', 'e', 'm', 'y', '.', 'c', 'a', 'p', 'e', 't', 'o', 'w', 'n', '\0', /* "foodblogger.club", true */ 'f', 'o', 'o', 'd', 'b', 'l', 'o', 'g', 'g', 'e', 'r', '.', 'c', 'l', 'u', 'b', '\0', /* "foodiebox.no", true */ 'f', 'o', 'o', 'd', 'i', 'e', 'b', 'o', 'x', '.', 'n', 'o', '\0', /* "foodies.my", true */ 'f', 'o', 'o', 'd', 'i', 'e', 's', '.', 'm', 'y', '\0', @@ -4252,7 +4248,6 @@ static const char kSTSHostTable[] = { /* "futos.de", true */ 'f', 'u', 't', 'o', 's', '.', 'd', 'e', '\0', /* "futuresonline.com", true */ 'f', 'u', 't', 'u', 'r', 'e', 's', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0', /* "futurestarsusa.org", true */ 'f', 'u', 't', 'u', 'r', 'e', 's', 't', 'a', 'r', 's', 'u', 's', 'a', '.', 'o', 'r', 'g', '\0', - /* "futureyouhealth.com", true */ 'f', 'u', 't', 'u', 'r', 'e', 'y', 'o', 'u', 'h', 'e', 'a', 'l', 't', 'h', '.', 'c', 'o', 'm', '\0', /* "fuvpn.com", true */ 'f', 'u', 'v', 'p', 'n', '.', 'c', 'o', 'm', '\0', /* "fuwafuwa.moe", true */ 'f', 'u', 'w', 'a', 'f', 'u', 'w', 'a', '.', 'm', 'o', 'e', '\0', /* "fuxwerk.de", true */ 'f', 'u', 'x', 'w', 'e', 'r', 'k', '.', 'd', 'e', '\0', @@ -4401,6 +4396,7 @@ static const char kSTSHostTable[] = { /* "genshiken.org", true */ 'g', 'e', 'n', 's', 'h', 'i', 'k', 'e', 'n', '.', 'o', 'r', 'g', '\0', /* "genslerapps.com", true */ 'g', 'e', 'n', 's', 'l', 'e', 'r', 'a', 'p', 'p', 's', '.', 'c', 'o', 'm', '\0', /* "genslerwisp.com", true */ 'g', 'e', 'n', 's', 'l', 'e', 'r', 'w', 'i', 's', 'p', '.', 'c', 'o', 'm', '\0', + /* "genuxtsg.com", true */ 'g', 'e', 'n', 'u', 'x', 't', 's', 'g', '.', 'c', 'o', 'm', '\0', /* "genxbeats.com", true */ 'g', 'e', 'n', 'x', 'b', 'e', 'a', 't', 's', '.', 'c', 'o', 'm', '\0', /* "genxnotes.com", true */ 'g', 'e', 'n', 'x', 'n', 'o', 't', 'e', 's', '.', 'c', 'o', 'm', '\0', /* "genyhitch.com", true */ 'g', 'e', 'n', 'y', 'h', 'i', 't', 'c', 'h', '.', 'c', 'o', 'm', '\0', @@ -4471,6 +4467,7 @@ static const char kSTSHostTable[] = { /* "gha.st", true */ 'g', 'h', 'a', '.', 's', 't', '\0', /* "ghcif.de", true */ 'g', 'h', 'c', 'i', 'f', '.', 'd', 'e', '\0', /* "gheorghe-sarcov.ga", true */ 'g', 'h', 'e', 'o', 'r', 'g', 'h', 'e', '-', 's', 'a', 'r', 'c', 'o', 'v', '.', 'g', 'a', '\0', + /* "ghostblog.info", true */ 'g', 'h', 'o', 's', 't', 'b', 'l', 'o', 'g', '.', 'i', 'n', 'f', 'o', '\0', /* "ghostwritershigh.com", true */ 'g', 'h', 'o', 's', 't', 'w', 'r', 'i', 't', 'e', 'r', 's', 'h', 'i', 'g', 'h', '.', 'c', 'o', 'm', '\0', /* "ghrelinblocker.info", true */ 'g', 'h', 'r', 'e', 'l', 'i', 'n', 'b', 'l', 'o', 'c', 'k', 'e', 'r', '.', 'i', 'n', 'f', 'o', '\0', /* "giacomodrago.com", true */ 'g', 'i', 'a', 'c', 'o', 'm', 'o', 'd', 'r', 'a', 'g', 'o', '.', 'c', 'o', 'm', '\0', @@ -4820,6 +4817,7 @@ static const char kSTSHostTable[] = { /* "hail2u.net", true */ 'h', 'a', 'i', 'l', '2', 'u', '.', 'n', 'e', 't', '\0', /* "hailer.com", true */ 'h', 'a', 'i', 'l', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "haircrazy.com", true */ 'h', 'a', 'i', 'r', 'c', 'r', 'a', 'z', 'y', '.', 'c', 'o', 'm', '\0', + /* "hajnzic.at", true */ 'h', 'a', 'j', 'n', 'z', 'i', 'c', '.', 'a', 't', '\0', /* "hakase.kr", true */ 'h', 'a', 'k', 'a', 's', 'e', '.', 'k', 'r', '\0', /* "hakatabijin-mind.com", true */ 'h', 'a', 'k', 'a', 't', 'a', 'b', 'i', 'j', 'i', 'n', '-', 'm', 'i', 'n', 'd', '.', 'c', 'o', 'm', '\0', /* "hake.me", true */ 'h', 'a', 'k', 'e', '.', 'm', 'e', '\0', @@ -4854,7 +4852,6 @@ static const char kSTSHostTable[] = { /* "happytiger.eu", true */ 'h', 'a', 'p', 'p', 'y', 't', 'i', 'g', 'e', 'r', '.', 'e', 'u', '\0', /* "happyukgo.com", true */ 'h', 'a', 'p', 'p', 'y', 'u', 'k', 'g', 'o', '.', 'c', 'o', 'm', '\0', /* "harambe.site", true */ 'h', 'a', 'r', 'a', 'm', 'b', 'e', '.', 's', 'i', 't', 'e', '\0', - /* "harbor-light.net", true */ 'h', 'a', 'r', 'b', 'o', 'r', '-', 'l', 'i', 'g', 'h', 't', '.', 'n', 'e', 't', '\0', /* "hardeman.nu", true */ 'h', 'a', 'r', 'd', 'e', 'm', 'a', 'n', '.', 'n', 'u', '\0', /* "hardenize.com", true */ 'h', 'a', 'r', 'd', 'e', 'n', 'i', 'z', 'e', '.', 'c', 'o', 'm', '\0', /* "hardertimes.com", true */ 'h', 'a', 'r', 'd', 'e', 'r', 't', 'i', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0', @@ -5173,6 +5170,7 @@ static const char kSTSHostTable[] = { /* "htmue.org", true */ 'h', 't', 'm', 'u', 'e', '.', 'o', 'r', 'g', '\0', /* "httpsecurityreport.com", true */ 'h', 't', 't', 'p', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', 'r', 'e', 'p', 'o', 'r', 't', '.', 'c', 'o', 'm', '\0', /* "httpswatch.ca", true */ 'h', 't', 't', 'p', 's', 'w', 'a', 't', 'c', 'h', '.', 'c', 'a', '\0', + /* "httpswatch.com", true */ 'h', 't', 't', 'p', 's', 'w', 'a', 't', 'c', 'h', '.', 'c', 'o', 'm', '\0', /* "huagati.com", true */ 'h', 'u', 'a', 'g', 'a', 't', 'i', '.', 'c', 'o', 'm', '\0', /* "huang.nu", true */ 'h', 'u', 'a', 'n', 'g', '.', 'n', 'u', '\0', /* "huaxueba.com", true */ 'h', 'u', 'a', 'x', 'u', 'e', 'b', 'a', '.', 'c', 'o', 'm', '\0', @@ -5222,6 +5220,7 @@ static const char kSTSHostTable[] = { /* "iactu.info", true */ 'i', 'a', 'c', 't', 'u', '.', 'i', 'n', 'f', 'o', '\0', /* "iainsimms.me", true */ 'i', 'a', 'i', 'n', 's', 'i', 'm', 'm', 's', '.', 'm', 'e', '\0', /* "iamcarrico.com", true */ 'i', 'a', 'm', 'c', 'a', 'r', 'r', 'i', 'c', 'o', '.', 'c', 'o', 'm', '\0', + /* "iamusingtheinter.net", true */ 'i', 'a', 'm', 'u', 's', 'i', 'n', 'g', 't', 'h', 'e', 'i', 'n', 't', 'e', 'r', '.', 'n', 'e', 't', '\0', /* "ian.sh", true */ 'i', 'a', 'n', '.', 's', 'h', '\0', /* "iandouglasscott.com", true */ 'i', 'a', 'n', 'd', 'o', 'u', 'g', 'l', 'a', 's', 's', 'c', 'o', 't', 't', '.', 'c', 'o', 'm', '\0', /* "ianix.com", true */ 'i', 'a', 'n', 'i', 'x', '.', 'c', 'o', 'm', '\0', @@ -5240,7 +5239,7 @@ static const char kSTSHostTable[] = { /* "ich-tanke.de", true */ 'i', 'c', 'h', '-', 't', 'a', 'n', 'k', 'e', '.', 'd', 'e', '\0', /* "ichoosebtec.com", true */ 'i', 'c', 'h', 'o', 'o', 's', 'e', 'b', 't', 'e', 'c', '.', 'c', 'o', 'm', '\0', /* "ichronos.net", true */ 'i', 'c', 'h', 'r', 'o', 'n', 'o', 's', '.', 'n', 'e', 't', '\0', - /* "icij.org", true */ 'i', 'c', 'i', 'j', '.', 'o', 'r', 'g', '\0', + /* "icij.org", false */ 'i', 'c', 'i', 'j', '.', 'o', 'r', 'g', '\0', /* "icity.ly", true */ 'i', 'c', 'i', 't', 'y', '.', 'l', 'y', '\0', /* "icloud.net", true */ 'i', 'c', 'l', 'o', 'u', 'd', '.', 'n', 'e', 't', '\0', /* "icntorrent.download", true */ 'i', 'c', 'n', 't', 'o', 'r', 'r', 'e', 'n', 't', '.', 'd', 'o', 'w', 'n', 'l', 'o', 'a', 'd', '\0', @@ -5258,7 +5257,6 @@ static const char kSTSHostTable[] = { /* "idaspis.com", true */ 'i', 'd', 'a', 's', 'p', 'i', 's', '.', 'c', 'o', 'm', '\0', /* "idconsult.nl", true */ 'i', 'd', 'c', 'o', 'n', 's', 'u', 'l', 't', '.', 'n', 'l', '\0', /* "idcrane.com", true */ 'i', 'd', 'c', 'r', 'a', 'n', 'e', '.', 'c', 'o', 'm', '\0', - /* "ideadozz.hu", true */ 'i', 'd', 'e', 'a', 'd', 'o', 'z', 'z', '.', 'h', 'u', '\0', /* "ideaweb.de", true */ 'i', 'd', 'e', 'a', 'w', 'e', 'b', '.', 'd', 'e', '\0', /* "idedr.com", true */ 'i', 'd', 'e', 'd', 'r', '.', 'c', 'o', 'm', '\0', /* "idemo.in", true */ 'i', 'd', 'e', 'm', 'o', '.', 'i', 'n', '\0', @@ -5285,7 +5283,6 @@ static const char kSTSHostTable[] = { /* "ifconfig.co", true */ 'i', 'f', 'c', 'o', 'n', 'f', 'i', 'g', '.', 'c', 'o', '\0', /* "iflare.de", true */ 'i', 'f', 'l', 'a', 'r', 'e', '.', 'd', 'e', '\0', /* "iformbuilder.com", false */ 'i', 'f', 'o', 'r', 'm', 'b', 'u', 'i', 'l', 'd', 'e', 'r', '.', 'c', 'o', 'm', '\0', - /* "ifoss.me", true */ 'i', 'f', 'o', 's', 's', '.', 'm', 'e', '\0', /* "ifsac.org", true */ 'i', 'f', 's', 'a', 'c', '.', 'o', 'r', 'g', '\0', /* "ifsr.de", true */ 'i', 'f', 's', 'r', '.', 'd', 'e', '\0', /* "iftrue.de", true */ 'i', 'f', 't', 'r', 'u', 'e', '.', 'd', 'e', '\0', @@ -5333,6 +5330,7 @@ static const char kSTSHostTable[] = { /* "imagescostumes.com", true */ 'i', 'm', 'a', 'g', 'e', 's', 'c', 'o', 's', 't', 'u', 'm', 'e', 's', '.', 'c', 'o', 'm', '\0', /* "imaginary.ca", true */ 'i', 'm', 'a', 'g', 'i', 'n', 'a', 'r', 'y', '.', 'c', 'a', '\0', /* "imagr.io", true */ 'i', 'm', 'a', 'g', 'r', '.', 'i', 'o', '\0', + /* "imakepoems.net", true */ 'i', 'm', 'a', 'k', 'e', 'p', 'o', 'e', 'm', 's', '.', 'n', 'e', 't', '\0', /* "imanolbarba.net", true */ 'i', 'm', 'a', 'n', 'o', 'l', 'b', 'a', 'r', 'b', 'a', '.', 'n', 'e', 't', '\0', /* "imanudin.net", true */ 'i', 'm', 'a', 'n', 'u', 'd', 'i', 'n', '.', 'n', 'e', 't', '\0', /* "imbrian.org", true */ 'i', 'm', 'b', 'r', 'i', 'a', 'n', '.', 'o', 'r', 'g', '\0', @@ -5752,7 +5750,6 @@ static const char kSTSHostTable[] = { /* "jaylen.com.ar", true */ 'j', 'a', 'y', 'l', 'e', 'n', '.', 'c', 'o', 'm', '.', 'a', 'r', '\0', /* "jaymecd.rocks", true */ 'j', 'a', 'y', 'm', 'e', 'c', 'd', '.', 'r', 'o', 'c', 'k', 's', '\0', /* "jayschulman.com", true */ 'j', 'a', 'y', 's', 'c', 'h', 'u', 'l', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0', - /* "jayshao.com", true */ 'j', 'a', 'y', 's', 'h', 'a', 'o', '.', 'c', 'o', 'm', '\0', /* "jayxon.com", true */ 'j', 'a', 'y', 'x', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "jayxu.com", true */ 'j', 'a', 'y', 'x', 'u', '.', 'c', 'o', 'm', '\0', /* "jazz-alliance.com", true */ 'j', 'a', 'z', 'z', '-', 'a', 'l', 'l', 'i', 'a', 'n', 'c', 'e', '.', 'c', 'o', 'm', '\0', @@ -5806,7 +5803,6 @@ static const char kSTSHostTable[] = { /* "jetmirshatri.com", true */ 'j', 'e', 't', 'm', 'i', 'r', 's', 'h', 'a', 't', 'r', 'i', '.', 'c', 'o', 'm', '\0', /* "jetsetcharge.com", true */ 'j', 'e', 't', 's', 'e', 't', 'c', 'h', 'a', 'r', 'g', 'e', '.', 'c', 'o', 'm', '\0', /* "jetsieswerda.nl", true */ 'j', 'e', 't', 's', 'i', 'e', 's', 'w', 'e', 'r', 'd', 'a', '.', 'n', 'l', '\0', - /* "jettlarue.com", true */ 'j', 'e', 't', 't', 'l', 'a', 'r', 'u', 'e', '.', 'c', 'o', 'm', '\0', /* "jetwhiz.com", true */ 'j', 'e', 't', 'w', 'h', 'i', 'z', '.', 'c', 'o', 'm', '\0', /* "jfreitag.de", true */ 'j', 'f', 'r', 'e', 'i', 't', 'a', 'g', '.', 'd', 'e', '\0', /* "jfx.space", true */ 'j', 'f', 'x', '.', 's', 'p', 'a', 'c', 'e', '\0', @@ -5872,7 +5868,6 @@ static const char kSTSHostTable[] = { /* "jokewignand.nl", true */ 'j', 'o', 'k', 'e', 'w', 'i', 'g', 'n', 'a', 'n', 'd', '.', 'n', 'l', '\0', /* "jollausers.de", true */ 'j', 'o', 'l', 'l', 'a', 'u', 's', 'e', 'r', 's', '.', 'd', 'e', '\0', /* "jonarcher.info", true */ 'j', 'o', 'n', 'a', 'r', 'c', 'h', 'e', 'r', '.', 'i', 'n', 'f', 'o', '\0', - /* "jonas-thelemann.de", true */ 'j', 'o', 'n', 'a', 's', '-', 't', 'h', 'e', 'l', 'e', 'm', 'a', 'n', 'n', '.', 'd', 'e', '\0', /* "jonaskjodt.com", true */ 'j', 'o', 'n', 'a', 's', 'k', 'j', 'o', 'd', 't', '.', 'c', 'o', 'm', '\0', /* "jonaswitmer.ch", true */ 'j', 'o', 'n', 'a', 's', 'w', 'i', 't', 'm', 'e', 'r', '.', 'c', 'h', '\0', /* "jonathan-apps.com", true */ 'j', 'o', 'n', 'a', 't', 'h', 'a', 'n', '-', 'a', 'p', 'p', 's', '.', 'c', 'o', 'm', '\0', @@ -5933,7 +5928,6 @@ static const char kSTSHostTable[] = { /* "jtslay.com", true */ 'j', 't', 's', 'l', 'a', 'y', '.', 'c', 'o', 'm', '\0', /* "jubileum.online", true */ 'j', 'u', 'b', 'i', 'l', 'e', 'u', 'm', '.', 'o', 'n', 'l', 'i', 'n', 'e', '\0', /* "juch.cc", true */ 'j', 'u', 'c', 'h', '.', 'c', 'c', '\0', - /* "juchit.at", true */ 'j', 'u', 'c', 'h', 'i', 't', '.', 'a', 't', '\0', /* "judoprodeti.cz", true */ 'j', 'u', 'd', 'o', 'p', 'r', 'o', 'd', 'e', 't', 'i', '.', 'c', 'z', '\0', /* "juergenhecht.de", true */ 'j', 'u', 'e', 'r', 'g', 'e', 'n', 'h', 'e', 'c', 'h', 't', '.', 'd', 'e', '\0', /* "jugendsuenden.info", true */ 'j', 'u', 'g', 'e', 'n', 'd', 's', 'u', 'e', 'n', 'd', 'e', 'n', '.', 'i', 'n', 'f', 'o', '\0', @@ -6164,13 +6158,13 @@ static const char kSTSHostTable[] = { /* "kigmbh.com", true */ 'k', 'i', 'g', 'm', 'b', 'h', '.', 'c', 'o', 'm', '\0', /* "kikuzuki.org", false */ 'k', 'i', 'k', 'u', 'z', 'u', 'k', 'i', '.', 'o', 'r', 'g', '\0', /* "kilerd.me", true */ 'k', 'i', 'l', 'e', 'r', 'd', '.', 'm', 'e', '\0', - /* "kilianvalkhof.com", true */ 'k', 'i', 'l', 'i', 'a', 'n', 'v', 'a', 'l', 'k', 'h', 'o', 'f', '.', 'c', 'o', 'm', '\0', /* "killerrobots.com", true */ 'k', 'i', 'l', 'l', 'e', 'r', 'r', 'o', 'b', 'o', 't', 's', '.', 'c', 'o', 'm', '\0', /* "kilobyte22.de", true */ 'k', 'i', 'l', 'o', 'b', 'y', 't', 'e', '2', '2', '.', 'd', 'e', '\0', /* "kilogram.nl", true */ 'k', 'i', 'l', 'o', 'g', 'r', 'a', 'm', '.', 'n', 'l', '\0', /* "kilometertje.nl", true */ 'k', 'i', 'l', 'o', 'm', 'e', 't', 'e', 'r', 't', 'j', 'e', '.', 'n', 'l', '\0', /* "kimberg.co.uk", true */ 'k', 'i', 'm', 'b', 'e', 'r', 'g', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "kimmel.com", true */ 'k', 'i', 'm', 'm', 'e', 'l', '.', 'c', 'o', 'm', '\0', + /* "kimmel.in", true */ 'k', 'i', 'm', 'm', 'e', 'l', '.', 'i', 'n', '\0', /* "kinderbasar-luhe.de", true */ 'k', 'i', 'n', 'd', 'e', 'r', 'b', 'a', 's', 'a', 'r', '-', 'l', 'u', 'h', 'e', '.', 'd', 'e', '\0', /* "kinderbuecher-kostenlos.de", true */ 'k', 'i', 'n', 'd', 'e', 'r', 'b', 'u', 'e', 'c', 'h', 'e', 'r', '-', 'k', 'o', 's', 't', 'e', 'n', 'l', 'o', 's', '.', 'd', 'e', '\0', /* "kinderly.co.uk", true */ 'k', 'i', 'n', 'd', 'e', 'r', 'l', 'y', '.', 'c', 'o', '.', 'u', 'k', '\0', @@ -6181,7 +6175,6 @@ static const char kSTSHostTable[] = { /* "kinganywhere.eu", true */ 'k', 'i', 'n', 'g', 'a', 'n', 'y', 'w', 'h', 'e', 'r', 'e', '.', 'e', 'u', '\0', /* "kingbird.me", true */ 'k', 'i', 'n', 'g', 'b', 'i', 'r', 'd', '.', 'm', 'e', '\0', /* "kingqueen.org.uk", true */ 'k', 'i', 'n', 'g', 'q', 'u', 'e', 'e', 'n', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0', - /* "kini24.ru", true */ 'k', 'i', 'n', 'i', '2', '4', '.', 'r', 'u', '\0', /* "kinkdr.com", true */ 'k', 'i', 'n', 'k', 'd', 'r', '.', 'c', 'o', 'm', '\0', /* "kinkenonline.com", true */ 'k', 'i', 'n', 'k', 'e', 'n', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'c', 'o', 'm', '\0', /* "kinomoto.me", true */ 'k', 'i', 'n', 'o', 'm', 'o', 't', 'o', '.', 'm', 'e', '\0', @@ -6252,7 +6245,6 @@ static const char kSTSHostTable[] = { /* "km-net.pl", true */ 'k', 'm', '-', 'n', 'e', 't', '.', 'p', 'l', '\0', /* "kmkz.jp", true */ 'k', 'm', 'k', 'z', '.', 'j', 'p', '\0', /* "kn007.net", true */ 'k', 'n', '0', '0', '7', '.', 'n', 'e', 't', '\0', - /* "knapen.io", true */ 'k', 'n', 'a', 'p', 'e', 'n', '.', 'i', 'o', '\0', /* "kncg.pw", true */ 'k', 'n', 'c', 'g', '.', 'p', 'w', '\0', /* "kngk-group.ru", true */ 'k', 'n', 'g', 'k', '-', 'g', 'r', 'o', 'u', 'p', '.', 'r', 'u', '\0', /* "kngk.org", true */ 'k', 'n', 'g', 'k', '.', 'o', 'r', 'g', '\0', @@ -6388,6 +6380,7 @@ static const char kSTSHostTable[] = { /* "kuemmerlin.eu", true */ 'k', 'u', 'e', 'm', 'm', 'e', 'r', 'l', 'i', 'n', '.', 'e', 'u', '\0', /* "kuemmling.eu", true */ 'k', 'u', 'e', 'm', 'm', 'l', 'i', 'n', 'g', '.', 'e', 'u', '\0', /* "kujadin.de", true */ 'k', 'u', 'j', 'a', 'd', 'i', 'n', '.', 'd', 'e', '\0', + /* "kukal.cz", true */ 'k', 'u', 'k', 'a', 'l', '.', 'c', 'z', '\0', /* "kulde.net", true */ 'k', 'u', 'l', 'd', 'e', '.', 'n', 'e', 't', '\0', /* "kum.com", true */ 'k', 'u', 'm', '.', 'c', 'o', 'm', '\0', /* "kumachan.biz", true */ 'k', 'u', 'm', 'a', 'c', 'h', 'a', 'n', '.', 'b', 'i', 'z', '\0', @@ -6436,7 +6429,6 @@ static const char kSTSHostTable[] = { /* "lacasseroy.com", true */ 'l', 'a', 'c', 'a', 's', 's', 'e', 'r', 'o', 'y', '.', 'c', 'o', 'm', '\0', /* "lacaverne.nl", true */ 'l', 'a', 'c', 'a', 'v', 'e', 'r', 'n', 'e', '.', 'n', 'l', '\0', /* "lacentral.com", false */ 'l', 'a', 'c', 'e', 'n', 't', 'r', 'a', 'l', '.', 'c', 'o', 'm', '\0', - /* "lacicloud.net", true */ 'l', 'a', 'c', 'i', 'c', 'l', 'o', 'u', 'd', '.', 'n', 'e', 't', '\0', /* "lacledeslan.com", false */ 'l', 'a', 'c', 'l', 'e', 'd', 'e', 's', 'l', 'a', 'n', '.', 'c', 'o', 'm', '\0', /* "lacledeslan.ninja", true */ 'l', 'a', 'c', 'l', 'e', 'd', 'e', 's', 'l', 'a', 'n', '.', 'n', 'i', 'n', 'j', 'a', '\0', /* "lacliniquefinanciere.com", true */ 'l', 'a', 'c', 'l', 'i', 'n', 'i', 'q', 'u', 'e', 'f', 'i', 'n', 'a', 'n', 'c', 'i', 'e', 'r', 'e', '.', 'c', 'o', 'm', '\0', @@ -6851,7 +6843,6 @@ static const char kSTSHostTable[] = { /* "lovingearth.co", true */ 'l', 'o', 'v', 'i', 'n', 'g', 'e', 'a', 'r', 't', 'h', '.', 'c', 'o', '\0', /* "lovingearth.net", true */ 'l', 'o', 'v', 'i', 'n', 'g', 'e', 'a', 'r', 't', 'h', '.', 'n', 'e', 't', '\0', /* "lovizaim.ru", true */ 'l', 'o', 'v', 'i', 'z', 'a', 'i', 'm', '.', 'r', 'u', '\0', - /* "lowhangingfruitgrabber.com", true */ 'l', 'o', 'w', 'h', 'a', 'n', 'g', 'i', 'n', 'g', 'f', 'r', 'u', 'i', 't', 'g', 'r', 'a', 'b', 'b', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "lowmagnitude.com", true */ 'l', 'o', 'w', 'm', 'a', 'g', 'n', 'i', 't', 'u', 'd', 'e', '.', 'c', 'o', 'm', '\0', /* "lowsidetna.com", true */ 'l', 'o', 'w', 's', 'i', 'd', 'e', 't', 'n', 'a', '.', 'c', 'o', 'm', '\0', /* "loxis.be", true */ 'l', 'o', 'x', 'i', 's', '.', 'b', 'e', '\0', @@ -6859,7 +6850,6 @@ static const char kSTSHostTable[] = { /* "lpm-uk.com", true */ 'l', 'p', 'm', '-', 'u', 'k', '.', 'c', 'o', 'm', '\0', /* "ls-alarm.de", true */ 'l', 's', '-', 'a', 'l', 'a', 'r', 'm', '.', 'd', 'e', '\0', /* "ltba.org", true */ 'l', 't', 'b', 'a', '.', 'o', 'r', 'g', '\0', - /* "ltn-tom-morel.fr", true */ 'l', 't', 'n', '-', 't', 'o', 'm', '-', 'm', 'o', 'r', 'e', 'l', '.', 'f', 'r', '\0', /* "lubot.net", false */ 'l', 'u', 'b', 'o', 't', '.', 'n', 'e', 't', '\0', /* "lucaterzini.com", true */ 'l', 'u', 'c', 'a', 't', 'e', 'r', 'z', 'i', 'n', 'i', '.', 'c', 'o', 'm', '\0', /* "luce.life", true */ 'l', 'u', 'c', 'e', '.', 'l', 'i', 'f', 'e', '\0', @@ -7050,7 +7040,6 @@ static const char kSTSHostTable[] = { /* "manicode.com", true */ 'm', 'a', 'n', 'i', 'c', 'o', 'd', 'e', '.', 'c', 'o', 'm', '\0', /* "manifestbin.com", true */ 'm', 'a', 'n', 'i', 'f', 'e', 's', 't', 'b', 'i', 'n', '.', 'c', 'o', 'm', '\0', /* "manningbrothers.com", true */ 'm', 'a', 'n', 'n', 'i', 'n', 'g', 'b', 'r', 'o', 't', 'h', 'e', 'r', 's', '.', 'c', 'o', 'm', '\0', - /* "mannsolutions.co.uk", true */ 'm', 'a', 'n', 'n', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "manoirdecontres.com", true */ 'm', 'a', 'n', 'o', 'i', 'r', 'd', 'e', 'c', 'o', 'n', 't', 'r', 'e', 's', '.', 'c', 'o', 'm', '\0', /* "manowarus.com", true */ 'm', 'a', 'n', 'o', 'w', 'a', 'r', 'u', 's', '.', 'c', 'o', 'm', '\0', /* "mansfieldplacevt.com", true */ 'm', 'a', 'n', 's', 'f', 'i', 'e', 'l', 'd', 'p', 'l', 'a', 'c', 'e', 'v', 't', '.', 'c', 'o', 'm', '\0', @@ -7122,6 +7111,7 @@ static const char kSTSHostTable[] = { /* "martinreed.net", true */ 'm', 'a', 'r', 't', 'i', 'n', 'r', 'e', 'e', 'd', '.', 'n', 'e', 't', '\0', /* "marumagic.com", true */ 'm', 'a', 'r', 'u', 'm', 'a', 'g', 'i', 'c', '.', 'c', 'o', 'm', '\0', /* "masa-yoga.com", true */ 'm', 'a', 's', 'a', '-', 'y', 'o', 'g', 'a', '.', 'c', 'o', 'm', '\0', + /* "masa.li", true */ 'm', 'a', 's', 'a', '.', 'l', 'i', '\0', /* "mascosolutions.com", true */ 'm', 'a', 's', 'c', 'o', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '.', 'c', 'o', 'm', '\0', /* "masiniunelte.store.ro", true */ 'm', 'a', 's', 'i', 'n', 'i', 'u', 'n', 'e', 'l', 't', 'e', '.', 's', 't', 'o', 'r', 'e', '.', 'r', 'o', '\0', /* "massdrop.com", true */ 'm', 'a', 's', 's', 'd', 'r', 'o', 'p', '.', 'c', 'o', 'm', '\0', @@ -7183,7 +7173,6 @@ static const char kSTSHostTable[] = { /* "mbasic.facebook.com", false */ 'm', 'b', 'a', 's', 'i', 'c', '.', 'f', 'a', 'c', 'e', 'b', 'o', 'o', 'k', '.', 'c', 'o', 'm', '\0', /* "mbilker.us", true */ 'm', 'b', 'i', 'l', 'k', 'e', 'r', '.', 'u', 's', '\0', /* "mbinf.de", false */ 'm', 'b', 'i', 'n', 'f', '.', 'd', 'e', '\0', - /* "mbinformatik.de", false */ 'm', 'b', 'i', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'k', '.', 'd', 'e', '\0', /* "mblankhorst.nl", true */ 'm', 'b', 'l', 'a', 'n', 'k', 'h', 'o', 'r', 's', 't', '.', 'n', 'l', '\0', /* "mbp.banking.co.at", false */ 'm', 'b', 'p', '.', 'b', 'a', 'n', 'k', 'i', 'n', 'g', '.', 'c', 'o', '.', 'a', 't', '\0', /* "mbsec.net", true */ 'm', 'b', 's', 'e', 'c', '.', 'n', 'e', 't', '\0', @@ -7344,6 +7333,7 @@ static const char kSTSHostTable[] = { /* "metzgerei-birkenhof.de", true */ 'm', 'e', 't', 'z', 'g', 'e', 'r', 'e', 'i', '-', 'b', 'i', 'r', 'k', 'e', 'n', 'h', 'o', 'f', '.', 'd', 'e', '\0', /* "meusigno.com", true */ 'm', 'e', 'u', 's', 'i', 'g', 'n', 'o', '.', 'c', 'o', 'm', '\0', /* "mevs.cz", true */ 'm', 'e', 'v', 's', '.', 'c', 'z', '\0', + /* "mexicansbook.ru", false */ 'm', 'e', 'x', 'i', 'c', 'a', 'n', 's', 'b', 'o', 'o', 'k', '.', 'r', 'u', '\0', /* "meyeraviation.com", true */ 'm', 'e', 'y', 'e', 'r', 'a', 'v', 'i', 'a', 't', 'i', 'o', 'n', '.', 'c', 'o', 'm', '\0', /* "mfcatalin.com", true */ 'm', 'f', 'c', 'a', 't', 'a', 'l', 'i', 'n', '.', 'c', 'o', 'm', '\0', /* "mfiles.pl", true */ 'm', 'f', 'i', 'l', 'e', 's', '.', 'p', 'l', '\0', @@ -7552,7 +7542,6 @@ static const char kSTSHostTable[] = { /* "moe.pe", true */ 'm', 'o', 'e', '.', 'p', 'e', '\0', /* "moe4sale.in", true */ 'm', 'o', 'e', '4', 's', 'a', 'l', 'e', '.', 'i', 'n', '\0', /* "moegirl.org", true */ 'm', 'o', 'e', 'g', 'i', 'r', 'l', '.', 'o', 'r', 'g', '\0', - /* "mogry.net", true */ 'm', 'o', 'g', 'r', 'y', '.', 'n', 'e', 't', '\0', /* "mojaknjiznica.com", false */ 'm', 'o', 'j', 'a', 'k', 'n', 'j', 'i', 'z', 'n', 'i', 'c', 'a', '.', 'c', 'o', 'm', '\0', /* "mojapraca.sk", true */ 'm', 'o', 'j', 'a', 'p', 'r', 'a', 'c', 'a', '.', 's', 'k', '\0', /* "mojzis.com", true */ 'm', 'o', 'j', 'z', 'i', 's', '.', 'c', 'o', 'm', '\0', @@ -7818,6 +7807,7 @@ static const char kSTSHostTable[] = { /* "nagaya.biz", true */ 'n', 'a', 'g', 'a', 'y', 'a', '.', 'b', 'i', 'z', '\0', /* "nagb.gov", true */ 'n', 'a', 'g', 'b', '.', 'g', 'o', 'v', '\0', /* "nagb.org", true */ 'n', 'a', 'g', 'b', '.', 'o', 'r', 'g', '\0', + /* "nagelfam.com", true */ 'n', 'a', 'g', 'e', 'l', 'f', 'a', 'm', '.', 'c', 'o', 'm', '\0', /* "nagoya-kyuyo.com", true */ 'n', 'a', 'g', 'o', 'y', 'a', '-', 'k', 'y', 'u', 'y', 'o', '.', 'c', 'o', 'm', '\0', /* "nakamastreamingcommunity.com", true */ 'n', 'a', 'k', 'a', 'm', 'a', 's', 't', 'r', 'e', 'a', 'm', 'i', 'n', 'g', 'c', 'o', 'm', 'm', 'u', 'n', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0', /* "nakedalarmclock.me", true */ 'n', 'a', 'k', 'e', 'd', 'a', 'l', 'a', 'r', 'm', 'c', 'l', 'o', 'c', 'k', '.', 'm', 'e', '\0', @@ -7921,14 +7911,9 @@ static const char kSTSHostTable[] = { /* "nekomimi.pl", true */ 'n', 'e', 'k', 'o', 'm', 'i', 'm', 'i', '.', 'p', 'l', '\0', /* "nekosc.com", true */ 'n', 'e', 'k', 'o', 's', 'c', '.', 'c', 'o', 'm', '\0', /* "nelhage.com", true */ 'n', 'e', 'l', 'h', 'a', 'g', 'e', '.', 'c', 'o', 'm', '\0', - /* "nella-project.org", true */ 'n', 'e', 'l', 'l', 'a', '-', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'o', 'r', 'g', '\0', - /* "nellacms.com", true */ 'n', 'e', 'l', 'l', 'a', 'c', 'm', 's', '.', 'c', 'o', 'm', '\0', - /* "nellacms.org", true */ 'n', 'e', 'l', 'l', 'a', 'c', 'm', 's', '.', 'o', 'r', 'g', '\0', - /* "nellafw.org", true */ 'n', 'e', 'l', 'l', 'a', 'f', 'w', '.', 'o', 'r', 'g', '\0', /* "nemecl.eu", true */ 'n', 'e', 'm', 'e', 'c', 'l', '.', 'e', 'u', '\0', /* "nemo.run", true */ 'n', 'e', 'm', 'o', '.', 'r', 'u', 'n', '\0', /* "neo19.com", true */ 'n', 'e', 'o', '1', '9', '.', 'c', 'o', 'm', '\0', - /* "neoani.me", true */ 'n', 'e', 'o', 'a', 'n', 'i', '.', 'm', 'e', '\0', /* "neons.org", true */ 'n', 'e', 'o', 'n', 's', '.', 'o', 'r', 'g', '\0', /* "neosolution.ca", true */ 'n', 'e', 'o', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', '.', 'c', 'a', '\0', /* "neoxcrf.com", true */ 'n', 'e', 'o', 'x', 'c', 'r', 'f', '.', 'c', 'o', 'm', '\0', @@ -8015,7 +8000,6 @@ static const char kSTSHostTable[] = { /* "newstone-tech.com", true */ 'n', 'e', 'w', 's', 't', 'o', 'n', 'e', '-', 't', 'e', 'c', 'h', '.', 'c', 'o', 'm', '\0', /* "newsyslog.org", true */ 'n', 'e', 'w', 's', 'y', 's', 'l', 'o', 'g', '.', 'o', 'r', 'g', '\0', /* "newtnote.com", true */ 'n', 'e', 'w', 't', 'n', 'o', 't', 'e', '.', 'c', 'o', 'm', '\0', - /* "newtonhaus.com", true */ 'n', 'e', 'w', 't', 'o', 'n', 'h', 'a', 'u', 's', '.', 'c', 'o', 'm', '\0', /* "nex.sx", true */ 'n', 'e', 'x', '.', 's', 'x', '\0', /* "nexicafiles.com", true */ 'n', 'e', 'x', 'i', 'c', 'a', 'f', 'i', 'l', 'e', 's', '.', 'c', 'o', 'm', '\0', /* "nexlab.org", true */ 'n', 'e', 'x', 'l', 'a', 'b', '.', 'o', 'r', 'g', '\0', @@ -8202,6 +8186,7 @@ static const char kSTSHostTable[] = { /* "nsa.wtf", true */ 'n', 's', 'a', '.', 'w', 't', 'f', '\0', /* "nsboston.org", true */ 'n', 's', 'b', 'o', 's', 't', 'o', 'n', '.', 'o', 'r', 'g', '\0', /* "nsboutique.com", true */ 'n', 's', 'b', 'o', 'u', 't', 'i', 'q', 'u', 'e', '.', 'c', 'o', 'm', '\0', + /* "nshost.ro", true */ 'n', 's', 'h', 'o', 's', 't', '.', 'r', 'o', '\0', /* "nsm.ee", true */ 'n', 's', 'm', '.', 'e', 'e', '\0', /* "nspeaks.com", true */ 'n', 's', 'p', 'e', 'a', 'k', 's', '.', 'c', 'o', 'm', '\0', /* "nsweb.solutions", true */ 'n', 's', 'w', 'e', 'b', '.', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', 's', '\0', @@ -8464,7 +8449,6 @@ static const char kSTSHostTable[] = { /* "ottoproject.io", true */ 'o', 't', 't', 'o', 'p', 'r', 'o', 'j', 'e', 'c', 't', '.', 'i', 'o', '\0', /* "otvaracie-hodiny.sk", true */ 'o', 't', 'v', 'a', 'r', 'a', 'c', 'i', 'e', '-', 'h', 'o', 'd', 'i', 'n', 'y', '.', 's', 'k', '\0', /* "otya.me", true */ 'o', 't', 'y', 'a', '.', 'm', 'e', '\0', - /* "ouaibe.qc.ca", true */ 'o', 'u', 'a', 'i', 'b', 'e', '.', 'q', 'c', '.', 'c', 'a', '\0', /* "ourcloud.at", true */ 'o', 'u', 'r', 'c', 'l', 'o', 'u', 'd', '.', 'a', 't', '\0', /* "ourcodinglives.com", true */ 'o', 'u', 'r', 'c', 'o', 'd', 'i', 'n', 'g', 'l', 'i', 'v', 'e', 's', '.', 'c', 'o', 'm', '\0', /* "ourevents.net", true */ 'o', 'u', 'r', 'e', 'v', 'e', 'n', 't', 's', '.', 'n', 'e', 't', '\0', @@ -8557,6 +8541,7 @@ static const char kSTSHostTable[] = { /* "parkingpoint.co.uk", true */ 'p', 'a', 'r', 'k', 'i', 'n', 'g', 'p', 'o', 'i', 'n', 't', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "parlamento.gub.uy", true */ 'p', 'a', 'r', 'l', 'a', 'm', 'e', 'n', 't', 'o', '.', 'g', 'u', 'b', '.', 'u', 'y', '\0', /* "parleu2016.nl", true */ 'p', 'a', 'r', 'l', 'e', 'u', '2', '0', '1', '6', '.', 'n', 'l', '\0', + /* "parleur.net", true */ 'p', 'a', 'r', 'l', 'e', 'u', 'r', '.', 'n', 'e', 't', '\0', /* "parodybit.net", true */ 'p', 'a', 'r', 'o', 'd', 'y', 'b', 'i', 't', '.', 'n', 'e', 't', '\0', /* "parpaing-paillette.net", true */ 'p', 'a', 'r', 'p', 'a', 'i', 'n', 'g', '-', 'p', 'a', 'i', 'l', 'l', 'e', 't', 't', 'e', '.', 'n', 'e', 't', '\0', /* "parsemail.org", true */ 'p', 'a', 'r', 's', 'e', 'm', 'a', 'i', 'l', '.', 'o', 'r', 'g', '\0', @@ -8580,7 +8565,6 @@ static const char kSTSHostTable[] = { /* "passport.yandex.kz", true */ 'p', 'a', 's', 's', 'p', 'o', 'r', 't', '.', 'y', 'a', 'n', 'd', 'e', 'x', '.', 'k', 'z', '\0', /* "passport.yandex.ru", true */ 'p', 'a', 's', 's', 'p', 'o', 'r', 't', '.', 'y', 'a', 'n', 'd', 'e', 'x', '.', 'r', 'u', '\0', /* "passport.yandex.ua", true */ 'p', 'a', 's', 's', 'p', 'o', 'r', 't', '.', 'y', 'a', 'n', 'd', 'e', 'x', '.', 'u', 'a', '\0', - /* "passumpsicbank.com", true */ 'p', 'a', 's', 's', 'u', 'm', 'p', 's', 'i', 'c', 'b', 'a', 'n', 'k', '.', 'c', 'o', 'm', '\0', /* "passvau.lt", true */ 'p', 'a', 's', 's', 'v', 'a', 'u', '.', 'l', 't', '\0', /* "passwd.io", true */ 'p', 'a', 's', 's', 'w', 'd', '.', 'i', 'o', '\0', /* "password.codes", true */ 'p', 'a', 's', 's', 'w', 'o', 'r', 'd', '.', 'c', 'o', 'd', 'e', 's', '\0', @@ -8926,8 +8910,6 @@ static const char kSTSHostTable[] = { /* "plus.sandbox.google.com", false */ 'p', 'l', 'u', 's', '.', 's', 'a', 'n', 'd', 'b', 'o', 'x', '.', 'g', 'o', 'o', 'g', 'l', 'e', '.', 'c', 'o', 'm', '\0', /* "plusstreamfeed.appspot.com", true */ 'p', 'l', 'u', 's', 's', 't', 'r', 'e', 'a', 'm', 'f', 'e', 'e', 'd', '.', 'a', 'p', 'p', 's', 'p', 'o', 't', '.', 'c', 'o', 'm', '\0', /* "plzenskybarcamp.cz", true */ 'p', 'l', 'z', 'e', 'n', 's', 'k', 'y', 'b', 'a', 'r', 'c', 'a', 'm', 'p', '.', 'c', 'z', '\0', - /* "pm13.cz", true */ 'p', 'm', '1', '3', '.', 'c', 'z', '\0', - /* "pm13.org", true */ 'p', 'm', '1', '3', '.', 'o', 'r', 'g', '\0', /* "pmalaty.com", true */ 'p', 'm', 'a', 'l', 'a', 't', 'y', '.', 'c', 'o', 'm', '\0', /* "pmctire.com", true */ 'p', 'm', 'c', 't', 'i', 'r', 'e', '.', 'c', 'o', 'm', '\0', /* "pmg-offshore-company.com", true */ 'p', 'm', 'g', '-', 'o', 'f', 'f', 's', 'h', 'o', 'r', 'e', '-', 'c', 'o', 'm', 'p', 'a', 'n', 'y', '.', 'c', 'o', 'm', '\0', @@ -9003,6 +8985,7 @@ static const char kSTSHostTable[] = { /* "postfinance.ch", true */ 'p', 'o', 's', 't', 'f', 'i', 'n', 'a', 'n', 'c', 'e', '.', 'c', 'h', '\0', /* "postn.eu", true */ 'p', 'o', 's', 't', 'n', '.', 'e', 'u', '\0', /* "posttigo.com", true */ 'p', 'o', 's', 't', 't', 'i', 'g', 'o', '.', 'c', 'o', 'm', '\0', + /* "potatofrom.space", false */ 'p', 'o', 't', 'a', 't', 'o', 'f', 'r', 'o', 'm', '.', 's', 'p', 'a', 'c', 'e', '\0', /* "potatoheads.net", true */ 'p', 'o', 't', 'a', 't', 'o', 'h', 'e', 'a', 'd', 's', '.', 'n', 'e', 't', '\0', /* "potbar.com", true */ 'p', 'o', 't', 'b', 'a', 'r', '.', 'c', 'o', 'm', '\0', /* "potbox.com", true */ 'p', 'o', 't', 'b', 'o', 'x', '.', 'c', 'o', 'm', '\0', @@ -9259,6 +9242,7 @@ static const char kSTSHostTable[] = { /* "qiliang.wang", true */ 'q', 'i', 'l', 'i', 'a', 'n', 'g', '.', 'w', 'a', 'n', 'g', '\0', /* "qingpat.com", true */ 'q', 'i', 'n', 'g', 'p', 'a', 't', '.', 'c', 'o', 'm', '\0', /* "qingpei.me", false */ 'q', 'i', 'n', 'g', 'p', 'e', 'i', '.', 'm', 'e', '\0', + /* "qionglu.pw", true */ 'q', 'i', 'o', 'n', 'g', 'l', 'u', '.', 'p', 'w', '\0', /* "qits.de", true */ 'q', 'i', 't', 's', '.', 'd', 'e', '\0', /* "qivonline.pt", true */ 'q', 'i', 'v', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'p', 't', '\0', /* "qixxit.de", true */ 'q', 'i', 'x', 'x', 'i', 't', '.', 'd', 'e', '\0', @@ -9280,7 +9264,6 @@ static const char kSTSHostTable[] = { /* "qtpower.net", true */ 'q', 't', 'p', 'o', 'w', 'e', 'r', '.', 'n', 'e', 't', '\0', /* "qtpower.org", true */ 'q', 't', 'p', 'o', 'w', 'e', 'r', '.', 'o', 'r', 'g', '\0', /* "qtvr.com", true */ 'q', 't', 'v', 'r', '.', 'c', 'o', 'm', '\0', - /* "qtxh.net", true */ 'q', 't', 'x', 'h', '.', 'n', 'e', 't', '\0', /* "quaedam.org", true */ 'q', 'u', 'a', 'e', 'd', 'a', 'm', '.', 'o', 'r', 'g', '\0', /* "quai10.org", false */ 'q', 'u', 'a', 'i', '1', '0', '.', 'o', 'r', 'g', '\0', /* "quakelive.dk", true */ 'q', 'u', 'a', 'k', 'e', 'l', 'i', 'v', 'e', '.', 'd', 'k', '\0', @@ -9652,7 +9635,6 @@ static const char kSTSHostTable[] = { /* "rleh.de", true */ 'r', 'l', 'e', 'h', '.', 'd', 'e', '\0', /* "rmb.li", true */ 'r', 'm', 'b', '.', 'l', 'i', '\0', /* "rmdlingerie.com.br", true */ 'r', 'm', 'd', 'l', 'i', 'n', 'g', 'e', 'r', 'i', 'e', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', - /* "rmf.io", true */ 'r', 'm', 'f', '.', 'i', 'o', '\0', /* "rmmanfredi.com", true */ 'r', 'm', 'm', 'a', 'n', 'f', 'r', 'e', 'd', 'i', '.', 'c', 'o', 'm', '\0', /* "rms.sexy", true */ 'r', 'm', 's', '.', 's', 'e', 'x', 'y', '\0', /* "rmstudio.tw", true */ 'r', 'm', 's', 't', 'u', 'd', 'i', 'o', '.', 't', 'w', '\0', @@ -9713,7 +9695,7 @@ static const char kSTSHostTable[] = { /* "romanpavlodar.kz", true */ 'r', 'o', 'm', 'a', 'n', 'p', 'a', 'v', 'l', 'o', 'd', 'a', 'r', '.', 'k', 'z', '\0', /* "romanticvillas.com.au", true */ 'r', 'o', 'm', 'a', 'n', 't', 'i', 'c', 'v', 'i', 'l', 'l', 'a', 's', '.', 'c', 'o', 'm', '.', 'a', 'u', '\0', /* "rome.dating", true */ 'r', 'o', 'm', 'e', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0', - /* "romeoferraris.com", false */ 'r', 'o', 'm', 'e', 'o', 'f', 'e', 'r', 'r', 'a', 'r', 'i', 's', '.', 'c', 'o', 'm', '\0', + /* "romeoferraris.com", true */ 'r', 'o', 'm', 'e', 'o', 'f', 'e', 'r', 'r', 'a', 'r', 'i', 's', '.', 'c', 'o', 'm', '\0', /* "rommelwood.de", true */ 'r', 'o', 'm', 'm', 'e', 'l', 'w', 'o', 'o', 'd', '.', 'd', 'e', '\0', /* "romulusapp.com", false */ 'r', 'o', 'm', 'u', 'l', 'u', 's', 'a', 'p', 'p', '.', 'c', 'o', 'm', '\0', /* "ron2k.za.net", true */ 'r', 'o', 'n', '2', 'k', '.', 'z', 'a', '.', 'n', 'e', 't', '\0', @@ -10113,7 +10095,6 @@ static const char kSTSHostTable[] = { /* "sedoexperts.nl", true */ 's', 'e', 'd', 'o', 'e', 'x', 'p', 'e', 'r', 't', 's', '.', 'n', 'l', '\0', /* "sedziapilkarski.pl", true */ 's', 'e', 'd', 'z', 'i', 'a', 'p', 'i', 'l', 'k', 'a', 'r', 's', 'k', 'i', '.', 'p', 'l', '\0', /* "seedalpha.com", true */ 's', 'e', 'e', 'd', 'a', 'l', 'p', 'h', 'a', '.', 'c', 'o', 'm', '\0', - /* "seedboxers.net", true */ 's', 'e', 'e', 'd', 'b', 'o', 'x', 'e', 'r', 's', '.', 'n', 'e', 't', '\0', /* "seemeagain.com", true */ 's', 'e', 'e', 'm', 'e', 'a', 'g', 'a', 'i', 'n', '.', 'c', 'o', 'm', '\0', /* "seen.life", true */ 's', 'e', 'e', 'n', '.', 'l', 'i', 'f', 'e', '\0', /* "seesuite.com", true */ 's', 'e', 'e', 's', 'u', 'i', 't', 'e', '.', 'c', 'o', 'm', '\0', @@ -10396,6 +10377,7 @@ static const char kSTSHostTable[] = { /* "sistem-maklumat.com.my", true */ 's', 'i', 's', 't', 'e', 'm', '-', 'm', 'a', 'k', 'l', 'u', 'm', 'a', 't', '.', 'c', 'o', 'm', '.', 'm', 'y', '\0', /* "sistemy48.ru", true */ 's', 'i', 's', 't', 'e', 'm', 'y', '4', '8', '.', 'r', 'u', '\0', /* "sistersurprise.de", true */ 's', 'i', 's', 't', 'e', 'r', 's', 'u', 'r', 'p', 'r', 'i', 's', 'e', '.', 'd', 'e', '\0', + /* "sisv.eu", true */ 's', 'i', 's', 'v', '.', 'e', 'u', '\0', /* "sitc.sk", true */ 's', 'i', 't', 'c', '.', 's', 'k', '\0', /* "sitehost.io", true */ 's', 'i', 't', 'e', 'h', 'o', 's', 't', '.', 'i', 'o', '\0', /* "sitennisclub.com", true */ 's', 'i', 't', 'e', 'n', 'n', 'i', 's', 'c', 'l', 'u', 'b', '.', 'c', 'o', 'm', '\0', @@ -10526,6 +10508,7 @@ static const char kSTSHostTable[] = { /* "smove.sg", true */ 's', 'm', 'o', 'v', 'e', '.', 's', 'g', '\0', /* "smow.com", true */ 's', 'm', 'o', 'w', '.', 'c', 'o', 'm', '\0', /* "smow.de", true */ 's', 'm', 'o', 'w', '.', 'd', 'e', '\0', + /* "smpetrey.com", true */ 's', 'm', 'p', 'e', 't', 'r', 'e', 'y', '.', 'c', 'o', 'm', '\0', /* "sms1.ro", true */ 's', 'm', 's', '1', '.', 'r', 'o', '\0', /* "smvfd.info", true */ 's', 'm', 'v', 'f', 'd', '.', 'i', 'n', 'f', 'o', '\0', /* "snakehosting.dk", false */ 's', 'n', 'a', 'k', 'e', 'h', 'o', 's', 't', 'i', 'n', 'g', '.', 'd', 'k', '\0', @@ -10644,7 +10627,6 @@ static const char kSTSHostTable[] = { /* "soumikghosh.com", true */ 's', 'o', 'u', 'm', 'i', 'k', 'g', 'h', 'o', 's', 'h', '.', 'c', 'o', 'm', '\0', /* "soundforsound.co.uk", true */ 's', 'o', 'u', 'n', 'd', 'f', 'o', 'r', 's', 'o', 'u', 'n', 'd', '.', 'c', 'o', '.', 'u', 'k', '\0', /* "soundgasm.net", true */ 's', 'o', 'u', 'n', 'd', 'g', 'a', 's', 'm', '.', 'n', 'e', 't', '\0', - /* "soundhunter.xyz", true */ 's', 'o', 'u', 'n', 'd', 'h', 'u', 'n', 't', 'e', 'r', '.', 'x', 'y', 'z', '\0', /* "soundtalks.be", true */ 's', 'o', 'u', 'n', 'd', 't', 'a', 'l', 'k', 's', '.', 'b', 'e', '\0', /* "soundtalks.com", true */ 's', 'o', 'u', 'n', 'd', 't', 'a', 'l', 'k', 's', '.', 'c', 'o', 'm', '\0', /* "sour.is", true */ 's', 'o', 'u', 'r', '.', 'i', 's', '\0', @@ -10981,6 +10963,7 @@ static const char kSTSHostTable[] = { /* "sudaraka.org", true */ 's', 'u', 'd', 'a', 'r', 'a', 'k', 'a', '.', 'o', 'r', 'g', '\0', /* "sudo.ws", true */ 's', 'u', 'd', 'o', '.', 'w', 's', '\0', /* "sudoschool.com", true */ 's', 'u', 'd', 'o', 's', 'c', 'h', 'o', 'o', 'l', '.', 'c', 'o', 'm', '\0', + /* "sufix.cz", true */ 's', 'u', 'f', 'i', 'x', '.', 'c', 'z', '\0', /* "suian.or.jp", true */ 's', 'u', 'i', 'a', 'n', '.', 'o', 'r', '.', 'j', 'p', '\0', /* "suitocracy.com", true */ 's', 'u', 'i', 't', 'o', 'c', 'r', 'a', 'c', 'y', '.', 'c', 'o', 'm', '\0', /* "sulek.eu", true */ 's', 'u', 'l', 'e', 'k', '.', 'e', 'u', '\0', @@ -10988,6 +10971,7 @@ static const char kSTSHostTable[] = { /* "sunbritetv.com", true */ 's', 'u', 'n', 'b', 'r', 'i', 't', 'e', 't', 'v', '.', 'c', 'o', 'm', '\0', /* "sundayfundayjapan.com", true */ 's', 'u', 'n', 'd', 'a', 'y', 'f', 'u', 'n', 'd', 'a', 'y', 'j', 'a', 'p', 'a', 'n', '.', 'c', 'o', 'm', '\0', /* "suneilpatel.com", true */ 's', 'u', 'n', 'e', 'i', 'l', 'p', 'a', 't', 'e', 'l', '.', 'c', 'o', 'm', '\0', + /* "sunflyer.cn", false */ 's', 'u', 'n', 'f', 'l', 'y', 'e', 'r', '.', 'c', 'n', '\0', /* "sunjaydhama.com", true */ 's', 'u', 'n', 'j', 'a', 'y', 'd', 'h', 'a', 'm', 'a', '.', 'c', 'o', 'm', '\0', /* "sunnyfruit.ru", true */ 's', 'u', 'n', 'n', 'y', 'f', 'r', 'u', 'i', 't', '.', 'r', 'u', '\0', /* "sunsetwx.com", true */ 's', 'u', 'n', 's', 'e', 't', 'w', 'x', '.', 'c', 'o', 'm', '\0', @@ -11046,7 +11030,6 @@ static const char kSTSHostTable[] = { /* "swedishhost.com", true */ 's', 'w', 'e', 'd', 'i', 's', 'h', 'h', 'o', 's', 't', '.', 'c', 'o', 'm', '\0', /* "swedishhost.se", true */ 's', 'w', 'e', 'd', 'i', 's', 'h', 'h', 'o', 's', 't', '.', 's', 'e', '\0', /* "sweetll.me", true */ 's', 'w', 'e', 'e', 't', 'l', 'l', '.', 'm', 'e', '\0', - /* "sweetstreats.ca", true */ 's', 'w', 'e', 'e', 't', 's', 't', 'r', 'e', 'a', 't', 's', '.', 'c', 'a', '\0', /* "swehack.org", true */ 's', 'w', 'e', 'h', 'a', 'c', 'k', '.', 'o', 'r', 'g', '\0', /* "swift-devedge.de", true */ 's', 'w', 'i', 'f', 't', '-', 'd', 'e', 'v', 'e', 'd', 'g', 'e', '.', 'd', 'e', '\0', /* "swiggy.com", true */ 's', 'w', 'i', 'g', 'g', 'y', '.', 'c', 'o', 'm', '\0', @@ -11087,6 +11070,7 @@ static const char kSTSHostTable[] = { /* "sysctl.se", false */ 's', 'y', 's', 'c', 't', 'l', '.', 's', 'e', '\0', /* "sysdb.io", true */ 's', 'y', 's', 'd', 'b', '.', 'i', 'o', '\0', /* "sysert.tv", true */ 's', 'y', 's', 'e', 'r', 't', '.', 't', 'v', '\0', + /* "sysmike.de", true */ 's', 'y', 's', 'm', 'i', 'k', 'e', '.', 'd', 'e', '\0', /* "sysmike.net", true */ 's', 'y', 's', 'm', 'i', 'k', 'e', '.', 'n', 'e', 't', '\0', /* "syss.de", true */ 's', 'y', 's', 's', '.', 'd', 'e', '\0', /* "system.is", true */ 's', 'y', 's', 't', 'e', 'm', '.', 'i', 's', '\0', @@ -11175,7 +11159,6 @@ static const char kSTSHostTable[] = { /* "taxsnaps.co.nz", true */ 't', 'a', 'x', 's', 'n', 'a', 'p', 's', '.', 'c', 'o', '.', 'n', 'z', '\0', /* "taxspeaker.com", true */ 't', 'a', 'x', 's', 'p', 'e', 'a', 'k', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "taxsquirrel.com", true */ 't', 'a', 'x', 's', 'q', 'u', 'i', 'r', 'r', 'e', 'l', '.', 'c', 'o', 'm', '\0', - /* "tazemama.biz", true */ 't', 'a', 'z', 'e', 'm', 'a', 'm', 'a', '.', 'b', 'i', 'z', '\0', /* "tazj.in", false */ 't', 'a', 'z', 'j', '.', 'i', 'n', '\0', /* "tbarter.com", false */ 't', 'b', 'a', 'r', 't', 'e', 'r', '.', 'c', 'o', 'm', '\0', /* "tbitc.ch", true */ 't', 'b', 'i', 't', 'c', '.', 'c', 'h', '\0', @@ -11404,6 +11387,7 @@ static const char kSTSHostTable[] = { /* "thenib.com", true */ 't', 'h', 'e', 'n', 'i', 'b', '.', 'c', 'o', 'm', '\0', /* "thenocman.com", true */ 't', 'h', 'e', 'n', 'o', 'c', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0', /* "thenorthschool.org.uk", true */ 't', 'h', 'e', 'n', 'o', 'r', 't', 'h', 's', 'c', 'h', 'o', 'o', 'l', '.', 'o', 'r', 'g', '.', 'u', 'k', '\0', + /* "theojones.name", true */ 't', 'h', 'e', 'o', 'j', 'o', 'n', 'e', 's', '.', 'n', 'a', 'm', 'e', '\0', /* "thepaymentscompany.com", true */ 't', 'h', 'e', 'p', 'a', 'y', 'm', 'e', 'n', 't', 's', 'c', 'o', 'm', 'p', 'a', 'n', 'y', '.', 'c', 'o', 'm', '\0', /* "thepb.in", true */ 't', 'h', 'e', 'p', 'b', '.', 'i', 'n', '\0', /* "thephonecaseplace.com", true */ 't', 'h', 'e', 'p', 'h', 'o', 'n', 'e', 'c', 'a', 's', 'e', 'p', 'l', 'a', 'c', 'e', '.', 'c', 'o', 'm', '\0', @@ -11555,6 +11539,7 @@ static const char kSTSHostTable[] = { /* "titouan.co", false */ 't', 'i', 't', 'o', 'u', 'a', 'n', '.', 'c', 'o', '\0', /* "tjenestetorvet.dk", true */ 't', 'j', 'e', 'n', 'e', 's', 't', 'e', 't', 'o', 'r', 'v', 'e', 't', '.', 'd', 'k', '\0', /* "tkat.ch", true */ 't', 'k', 'a', 't', '.', 'c', 'h', '\0', + /* "tlach.cz", true */ 't', 'l', 'a', 'c', 'h', '.', 'c', 'z', '\0', /* "tlo.link", true */ 't', 'l', 'o', '.', 'l', 'i', 'n', 'k', '\0', /* "tlo.xyz", true */ 't', 'l', 'o', '.', 'x', 'y', 'z', '\0', /* "tls.builders", true */ 't', 'l', 's', '.', 'b', 'u', 'i', 'l', 'd', 'e', 'r', 's', '\0', @@ -11612,6 +11597,7 @@ static const char kSTSHostTable[] = { /* "tomend.es", true */ 't', 'o', 'm', 'e', 'n', 'd', '.', 'e', 's', '\0', /* "tomfisher.eu", true */ 't', 'o', 'm', 'f', 'i', 's', 'h', 'e', 'r', '.', 'e', 'u', '\0', /* "tomli.me", true */ 't', 'o', 'm', 'l', 'i', '.', 'm', 'e', '\0', + /* "tommyads.com", true */ 't', 'o', 'm', 'm', 'y', 'a', 'd', 's', '.', 'c', 'o', 'm', '\0', /* "tomo.gr", false */ 't', 'o', 'm', 'o', '.', 'g', 'r', '\0', /* "tomrei.com", true */ 't', 'o', 'm', 'r', 'e', 'i', '.', 'c', 'o', 'm', '\0', /* "tomrichards.net", false */ 't', 'o', 'm', 'r', 'i', 'c', 'h', 'a', 'r', 'd', 's', '.', 'n', 'e', 't', '\0', @@ -11904,6 +11890,7 @@ static const char kSTSHostTable[] = { /* "typo3.com", true */ 't', 'y', 'p', 'o', '3', '.', 'c', 'o', 'm', '\0', /* "tysye.ca", true */ 't', 'y', 's', 'y', 'e', '.', 'c', 'a', '\0', /* "u5b.de", true */ 'u', '5', 'b', '.', 'd', 'e', '\0', + /* "uadp.pw", true */ 'u', 'a', 'd', 'p', '.', 'p', 'w', '\0', /* "uae-company-service.com", true */ 'u', 'a', 'e', '-', 'c', 'o', 'm', 'p', 'a', 'n', 'y', '-', 's', 'e', 'r', 'v', 'i', 'c', 'e', '.', 'c', 'o', 'm', '\0', /* "uangteman.com", true */ 'u', 'a', 'n', 'g', 't', 'e', 'm', 'a', 'n', '.', 'c', 'o', 'm', '\0', /* "uasmi.com", true */ 'u', 'a', 's', 'm', 'i', '.', 'c', 'o', 'm', '\0', @@ -11950,7 +11937,6 @@ static const char kSTSHostTable[] = { /* "umenlisam.com", true */ 'u', 'm', 'e', 'n', 'l', 'i', 's', 'a', 'm', '.', 'c', 'o', 'm', '\0', /* "umgardi.ca", true */ 'u', 'm', 'g', 'a', 'r', 'd', 'i', '.', 'c', 'a', '\0', /* "umisonoda.com", true */ 'u', 'm', 'i', 's', 'o', 'n', 'o', 'd', 'a', '.', 'c', 'o', 'm', '\0', - /* "umwandeln-online.de", true */ 'u', 'm', 'w', 'a', 'n', 'd', 'e', 'l', 'n', '-', 'o', 'n', 'l', 'i', 'n', 'e', '.', 'd', 'e', '\0', /* "un-zero-un.fr", true */ 'u', 'n', '-', 'z', 'e', 'r', 'o', '-', 'u', 'n', '.', 'f', 'r', '\0', /* "unblockall.xyz", true */ 'u', 'n', 'b', 'l', 'o', 'c', 'k', 'a', 'l', 'l', '.', 'x', 'y', 'z', '\0', /* "unblockat.tk", true */ 'u', 'n', 'b', 'l', 'o', 'c', 'k', 'a', 't', '.', 't', 'k', '\0', @@ -12213,6 +12199,7 @@ static const char kSTSHostTable[] = { /* "vietnamese.dating", true */ 'v', 'i', 'e', 't', 'n', 'a', 'm', 'e', 's', 'e', '.', 'd', 'a', 't', 'i', 'n', 'g', '\0', /* "vietnamhost.vn", true */ 'v', 'i', 'e', 't', 'n', 'a', 'm', 'h', 'o', 's', 't', '.', 'v', 'n', '\0', /* "viewmyrecords.com", true */ 'v', 'i', 'e', 'w', 'm', 'y', 'r', 'e', 'c', 'o', 'r', 'd', 's', '.', 'c', 'o', 'm', '\0', + /* "viewsea.com", true */ 'v', 'i', 'e', 'w', 's', 'e', 'a', '.', 'c', 'o', 'm', '\0', /* "vigilantnow.com", true */ 'v', 'i', 'g', 'i', 'l', 'a', 'n', 't', 'n', 'o', 'w', '.', 'c', 'o', 'm', '\0', /* "vigilo.cf", true */ 'v', 'i', 'g', 'i', 'l', 'o', '.', 'c', 'f', '\0', /* "vigilo.ga", true */ 'v', 'i', 'g', 'i', 'l', 'o', '.', 'g', 'a', '\0', @@ -12309,6 +12296,7 @@ static const char kSTSHostTable[] = { /* "votoot.com", true */ 'v', 'o', 't', 'o', 'o', 't', '.', 'c', 'o', 'm', '\0', /* "voxographe.com", false */ 'v', 'o', 'x', 'o', 'g', 'r', 'a', 'p', 'h', 'e', '.', 'c', 'o', 'm', '\0', /* "vpip.net", true */ 'v', 'p', 'i', 'p', '.', 'n', 'e', 't', '\0', + /* "vpn.black", true */ 'v', 'p', 'n', '.', 'b', 'l', 'a', 'c', 'k', '\0', /* "vpn.ht", true */ 'v', 'p', 'n', '.', 'h', 't', '\0', /* "vpnhot.com", true */ 'v', 'p', 'n', 'h', 'o', 't', '.', 'c', 'o', 'm', '\0', /* "vpnzoom.com", true */ 'v', 'p', 'n', 'z', 'o', 'o', 'm', '.', 'c', 'o', 'm', '\0', @@ -12467,11 +12455,10 @@ static const char kSTSHostTable[] = { /* "webthings.com.br", true */ 'w', 'e', 'b', 't', 'h', 'i', 'n', 'g', 's', '.', 'c', 'o', 'm', '.', 'b', 'r', '\0', /* "webtorrent.io", true */ 'w', 'e', 'b', 't', 'o', 'r', 'r', 'e', 'n', 't', '.', 'i', 'o', '\0', /* "webtrh.cz", true */ 'w', 'e', 'b', 't', 'r', 'h', '.', 'c', 'z', '\0', - /* "webtropia.com", true */ 'w', 'e', 'b', 't', 'r', 'o', 'p', 'i', 'a', '.', 'c', 'o', 'm', '\0', + /* "webtropia.com", false */ 'w', 'e', 'b', 't', 'r', 'o', 'p', 'i', 'a', '.', 'c', 'o', 'm', '\0', /* "webwit.nl", true */ 'w', 'e', 'b', 'w', 'i', 't', '.', 'n', 'l', '\0', /* "webyazilimankara.com", true */ 'w', 'e', 'b', 'y', 'a', 'z', 'i', 'l', 'i', 'm', 'a', 'n', 'k', 'a', 'r', 'a', '.', 'c', 'o', 'm', '\0', /* "webzanem.com", true */ 'w', 'e', 'b', 'z', 'a', 'n', 'e', 'm', '.', 'c', 'o', 'm', '\0', - /* "weddingibiza.nl", true */ 'w', 'e', 'd', 'd', 'i', 'n', 'g', 'i', 'b', 'i', 'z', 'a', '.', 'n', 'l', '\0', /* "weddywood.ru", true */ 'w', 'e', 'd', 'd', 'y', 'w', 'o', 'o', 'd', '.', 'r', 'u', '\0', /* "weeblr.com", true */ 'w', 'e', 'e', 'b', 'l', 'r', '.', 'c', 'o', 'm', '\0', /* "weekdone.com", true */ 'w', 'e', 'e', 'k', 'd', 'o', 'n', 'e', '.', 'c', 'o', 'm', '\0', @@ -12928,7 +12915,6 @@ static const char kSTSHostTable[] = { /* "yak.is", true */ 'y', 'a', 'k', '.', 'i', 's', '\0', /* "yakmade.com", true */ 'y', 'a', 'k', 'm', 'a', 'd', 'e', '.', 'c', 'o', 'm', '\0', /* "yakmoo.se", true */ 'y', 'a', 'k', 'm', 'o', 'o', '.', 's', 'e', '\0', - /* "yal.sh", true */ 'y', 'a', 'l', '.', 's', 'h', '\0', /* "yamadaya.tv", true */ 'y', 'a', 'm', 'a', 'd', 'a', 'y', 'a', '.', 't', 'v', '\0', /* "yameveo.com", false */ 'y', 'a', 'm', 'e', 'v', 'e', 'o', '.', 'c', 'o', 'm', '\0', /* "yanaduday.com", true */ 'y', 'a', 'n', 'a', 'd', 'u', 'd', 'a', 'y', '.', 'c', 'o', 'm', '\0', @@ -13064,8 +13050,8 @@ static const char kSTSHostTable[] = { /* "zehdenick-bleibt-bunt.de", true */ 'z', 'e', 'h', 'd', 'e', 'n', 'i', 'c', 'k', '-', 'b', 'l', 'e', 'i', 'b', 't', '-', 'b', 'u', 'n', 't', '.', 'd', 'e', '\0', /* "zehntner.ch", true */ 'z', 'e', 'h', 'n', 't', 'n', 'e', 'r', '.', 'c', 'h', '\0', /* "zelfrijdendeautos.com", true */ 'z', 'e', 'l', 'f', 'r', 'i', 'j', 'd', 'e', 'n', 'd', 'e', 'a', 'u', 't', 'o', 's', '.', 'c', 'o', 'm', '\0', - /* "zellari.ru", true */ 'z', 'e', 'l', 'l', 'a', 'r', 'i', '.', 'r', 'u', '\0', /* "zemlova.cz", true */ 'z', 'e', 'm', 'l', 'o', 'v', 'a', '.', 'c', 'z', '\0', + /* "zenithmedia.ca", false */ 'z', 'e', 'n', 'i', 't', 'h', 'm', 'e', 'd', 'i', 'a', '.', 'c', 'a', '\0', /* "zenk-security.com", true */ 'z', 'e', 'n', 'k', '-', 's', 'e', 'c', 'u', 'r', 'i', 't', 'y', '.', 'c', 'o', 'm', '\0', /* "zenlogic.com", true */ 'z', 'e', 'n', 'l', 'o', 'g', 'i', 'c', '.', 'c', 'o', 'm', '\0', /* "zeno-system.com", true */ 'z', 'e', 'n', 'o', '-', 's', 'y', 's', 't', 'e', 'm', '.', 'c', 'o', 'm', '\0', @@ -13240,1300 +13226,1300 @@ static const nsSTSPreload kSTSPreloadList[] = { { 795, true }, { 806, true }, { 813, true }, - { 824, true }, + { 820, true }, { 831, true }, - { 848, true }, - { 866, true }, - { 880, true }, - { 892, true }, - { 903, true }, - { 913, true }, - { 922, true }, - { 928, true }, - { 943, true }, - { 952, true }, - { 970, true }, - { 982, true }, - { 991, true }, - { 999, true }, - { 1007, true }, - { 1018, true }, - { 1030, true }, - { 1038, true }, - { 1048, true }, - { 1064, false }, - { 1077, true }, - { 1086, true }, - { 1100, true }, - { 1109, true }, - { 1130, true }, - { 1139, true }, - { 1149, true }, - { 1164, true }, - { 1181, true }, + { 838, true }, + { 855, true }, + { 873, true }, + { 887, true }, + { 899, true }, + { 910, true }, + { 920, true }, + { 929, true }, + { 935, true }, + { 950, true }, + { 959, true }, + { 977, true }, + { 989, true }, + { 998, true }, + { 1006, true }, + { 1014, true }, + { 1025, true }, + { 1037, true }, + { 1045, true }, + { 1055, true }, + { 1071, false }, + { 1084, true }, + { 1093, true }, + { 1107, true }, + { 1116, true }, + { 1137, true }, + { 1146, true }, + { 1156, true }, + { 1171, true }, { 1188, true }, - { 1201, true }, - { 1210, true }, - { 1222, false }, - { 1234, true }, - { 1242, true }, - { 1253, true }, - { 1262, true }, - { 1271, false }, - { 1287, true }, - { 1300, true }, - { 1309, true }, - { 1328, true }, - { 1347, true }, - { 1359, true }, - { 1372, true }, - { 1388, true }, - { 1403, true }, - { 1416, true }, - { 1426, true }, - { 1440, true }, - { 1456, true }, - { 1470, true }, - { 1485, true }, - { 1493, true }, + { 1195, true }, + { 1208, true }, + { 1217, true }, + { 1229, false }, + { 1241, true }, + { 1249, true }, + { 1260, true }, + { 1269, true }, + { 1278, false }, + { 1294, true }, + { 1307, true }, + { 1316, true }, + { 1335, true }, + { 1354, true }, + { 1366, true }, + { 1379, true }, + { 1395, true }, + { 1410, true }, + { 1423, true }, + { 1433, true }, + { 1447, true }, + { 1463, true }, + { 1477, true }, + { 1492, true }, { 1500, true }, { 1507, true }, - { 1519, true }, - { 1530, true }, - { 1539, true }, - { 1550, true }, - { 1565, true }, - { 1573, false }, - { 1586, true }, - { 1594, true }, - { 1606, true }, - { 1621, true }, - { 1640, true }, - { 1647, false }, - { 1666, true }, - { 1676, true }, - { 1682, true }, - { 1691, true }, - { 1704, false }, - { 1711, true }, - { 1723, true }, - { 1732, true }, - { 1745, true }, - { 1755, true }, - { 1763, false }, - { 1770, true }, - { 1781, true }, - { 1793, true }, - { 1801, true }, - { 1814, true }, + { 1514, true }, + { 1526, true }, + { 1537, true }, + { 1546, true }, + { 1557, true }, + { 1572, true }, + { 1580, false }, + { 1593, true }, + { 1601, true }, + { 1613, true }, + { 1628, true }, + { 1647, true }, + { 1654, false }, + { 1673, true }, + { 1683, true }, + { 1689, true }, + { 1698, true }, + { 1711, false }, + { 1718, true }, + { 1730, true }, + { 1739, true }, + { 1752, true }, + { 1762, true }, + { 1770, false }, + { 1777, true }, + { 1788, true }, + { 1800, true }, + { 1808, true }, { 1821, true }, - { 1830, true }, - { 1842, true }, - { 1851, true }, - { 1872, true }, - { 1896, true }, - { 1907, true }, - { 1913, true }, - { 1926, true }, - { 1938, true }, - { 1950, true }, - { 1960, true }, - { 1977, true }, + { 1828, true }, + { 1837, true }, + { 1849, true }, + { 1858, true }, + { 1879, true }, + { 1903, true }, + { 1914, true }, + { 1920, true }, + { 1933, true }, + { 1945, true }, + { 1957, true }, + { 1967, true }, { 1984, true }, - { 1993, true }, - { 2014, false }, - { 2027, true }, - { 2037, true }, - { 2048, true }, - { 2060, true }, - { 2069, true }, - { 2079, true }, - { 2090, true }, - { 2098, true }, - { 2110, true }, - { 2120, true }, - { 2139, true }, - { 2150, true }, - { 2162, true }, - { 2174, true }, - { 2186, true }, - { 2197, true }, - { 2206, true }, - { 2219, true }, - { 2239, true }, - { 2254, true }, - { 2262, true }, - { 2272, true }, - { 2289, true }, - { 2304, true }, - { 2311, false }, - { 2322, true }, - { 2337, false }, - { 2352, true }, - { 2371, true }, - { 2381, true }, - { 2392, true }, - { 2410, true }, - { 2424, true }, - { 2436, true }, - { 2452, true }, - { 2463, false }, - { 2479, false }, - { 2491, true }, - { 2504, true }, - { 2517, false }, - { 2525, true }, - { 2549, true }, - { 2564, true }, - { 2583, true }, - { 2596, true }, - { 2608, true }, - { 2619, true }, - { 2643, true }, - { 2656, true }, - { 2665, true }, - { 2682, true }, - { 2694, true }, - { 2713, true }, - { 2736, true }, - { 2752, true }, - { 2769, true }, - { 2789, true }, - { 2804, true }, - { 2825, true }, - { 2845, true }, - { 2857, true }, - { 2868, true }, - { 2880, true }, - { 2901, true }, - { 2913, true }, - { 2930, true }, - { 2943, true }, - { 2959, true }, - { 2971, true }, - { 2984, false }, - { 2993, true }, - { 3008, true }, - { 3025, true }, - { 3039, true }, - { 3055, true }, - { 3066, true }, - { 3078, true }, - { 3099, true }, - { 3116, false }, - { 3126, true }, - { 3141, true }, - { 3155, false }, - { 3168, true }, - { 3177, true }, - { 3191, true }, - { 3203, true }, - { 3218, true }, - { 3231, true }, - { 3243, true }, - { 3255, true }, - { 3267, true }, - { 3279, true }, - { 3291, true }, - { 3302, true }, - { 3316, true }, - { 3332, true }, - { 3345, true }, - { 3362, true }, - { 3377, true }, - { 3392, true }, - { 3410, true }, - { 3419, true }, - { 3432, true }, - { 3453, true }, - { 3462, true }, - { 3472, true }, - { 3497, true }, - { 3508, true }, - { 3527, true }, - { 3539, true }, - { 3558, true }, - { 3577, true }, - { 3596, true }, - { 3615, true }, - { 3630, true }, - { 3641, true }, - { 3654, true }, - { 3666, true }, - { 3679, true }, - { 3693, true }, - { 3704, true }, - { 3713, true }, - { 3727, true }, - { 3739, true }, - { 3766, true }, - { 3792, true }, - { 3805, true }, - { 3816, true }, - { 3840, true }, - { 3857, true }, - { 3885, true }, - { 3901, true }, - { 3910, true }, - { 3920, true }, - { 3934, true }, - { 3944, true }, - { 3958, false }, - { 3979, true }, - { 3997, true }, - { 4005, true }, - { 4014, true }, - { 4033, true }, - { 4052, true }, - { 4065, true }, - { 4076, true }, - { 4096, true }, - { 4114, false }, - { 4133, true }, - { 4147, true }, - { 4157, true }, - { 4178, true }, - { 4194, true }, - { 4204, true }, - { 4217, true }, - { 4230, true }, - { 4244, true }, - { 4258, true }, - { 4268, true }, - { 4278, true }, - { 4288, true }, - { 4298, true }, - { 4308, true }, - { 4318, true }, - { 4335, false }, - { 4343, true }, - { 4354, true }, - { 4373, true }, - { 4384, true }, - { 4395, true }, - { 4404, true }, - { 4424, true }, - { 4435, true }, - { 4459, true }, - { 4473, true }, - { 4489, true }, - { 4501, true }, - { 4517, true }, - { 4528, true }, - { 4542, true }, - { 4558, true }, - { 4566, true }, - { 4583, false }, - { 4607, true }, - { 4624, true }, - { 4632, false }, - { 4648, true }, - { 4656, true }, - { 4670, true }, - { 4682, false }, - { 4695, true }, - { 4707, true }, - { 4719, true }, - { 4731, true }, - { 4741, true }, - { 4749, true }, - { 4763, true }, - { 4776, true }, - { 4788, true }, - { 4807, true }, - { 4826, true }, - { 4859, true }, - { 4869, true }, + { 1991, true }, + { 2000, true }, + { 2021, false }, + { 2034, true }, + { 2044, true }, + { 2055, true }, + { 2067, true }, + { 2076, true }, + { 2086, true }, + { 2097, true }, + { 2105, true }, + { 2117, true }, + { 2127, true }, + { 2146, true }, + { 2157, true }, + { 2169, true }, + { 2181, true }, + { 2193, true }, + { 2204, true }, + { 2213, true }, + { 2226, true }, + { 2246, true }, + { 2261, true }, + { 2269, true }, + { 2279, true }, + { 2296, true }, + { 2311, true }, + { 2318, false }, + { 2329, true }, + { 2344, false }, + { 2359, true }, + { 2378, true }, + { 2388, true }, + { 2399, true }, + { 2417, true }, + { 2431, true }, + { 2443, true }, + { 2459, true }, + { 2470, false }, + { 2486, false }, + { 2498, true }, + { 2511, true }, + { 2524, false }, + { 2532, true }, + { 2556, true }, + { 2571, true }, + { 2590, true }, + { 2603, true }, + { 2615, true }, + { 2626, true }, + { 2650, true }, + { 2663, true }, + { 2672, true }, + { 2689, true }, + { 2701, true }, + { 2720, true }, + { 2743, true }, + { 2759, true }, + { 2776, true }, + { 2796, true }, + { 2811, true }, + { 2832, true }, + { 2852, true }, + { 2864, true }, + { 2875, true }, + { 2887, true }, + { 2908, true }, + { 2920, true }, + { 2937, true }, + { 2950, true }, + { 2966, true }, + { 2978, true }, + { 2991, false }, + { 3000, true }, + { 3015, true }, + { 3032, true }, + { 3046, true }, + { 3062, true }, + { 3073, true }, + { 3085, true }, + { 3106, true }, + { 3123, false }, + { 3133, true }, + { 3148, true }, + { 3162, false }, + { 3175, true }, + { 3184, true }, + { 3198, true }, + { 3210, true }, + { 3225, true }, + { 3238, true }, + { 3250, true }, + { 3262, true }, + { 3274, true }, + { 3286, true }, + { 3298, true }, + { 3309, true }, + { 3323, true }, + { 3339, true }, + { 3352, true }, + { 3369, true }, + { 3384, true }, + { 3399, true }, + { 3417, true }, + { 3426, true }, + { 3439, true }, + { 3460, true }, + { 3469, true }, + { 3479, true }, + { 3504, true }, + { 3515, true }, + { 3534, true }, + { 3546, true }, + { 3565, true }, + { 3584, true }, + { 3603, true }, + { 3622, true }, + { 3637, true }, + { 3648, true }, + { 3661, true }, + { 3673, true }, + { 3686, true }, + { 3700, true }, + { 3711, true }, + { 3720, true }, + { 3734, true }, + { 3746, true }, + { 3773, true }, + { 3799, true }, + { 3812, true }, + { 3823, true }, + { 3847, true }, + { 3864, true }, + { 3892, true }, + { 3908, true }, + { 3917, true }, + { 3927, true }, + { 3941, true }, + { 3951, true }, + { 3965, false }, + { 3986, true }, + { 4004, true }, + { 4012, true }, + { 4021, true }, + { 4040, true }, + { 4059, true }, + { 4072, true }, + { 4083, true }, + { 4103, true }, + { 4121, false }, + { 4140, true }, + { 4154, true }, + { 4164, true }, + { 4185, true }, + { 4201, true }, + { 4211, true }, + { 4224, true }, + { 4237, true }, + { 4251, true }, + { 4265, true }, + { 4275, true }, + { 4285, true }, + { 4295, true }, + { 4305, true }, + { 4315, true }, + { 4325, true }, + { 4342, false }, + { 4350, true }, + { 4361, true }, + { 4380, true }, + { 4391, true }, + { 4402, true }, + { 4411, true }, + { 4431, true }, + { 4442, true }, + { 4466, true }, + { 4480, true }, + { 4496, true }, + { 4508, true }, + { 4524, true }, + { 4535, true }, + { 4549, true }, + { 4565, true }, + { 4573, true }, + { 4590, false }, + { 4614, true }, + { 4631, true }, + { 4639, false }, + { 4655, true }, + { 4663, true }, + { 4677, true }, + { 4689, false }, + { 4702, true }, + { 4714, true }, + { 4726, true }, + { 4738, true }, + { 4748, true }, + { 4756, true }, + { 4770, true }, + { 4783, true }, + { 4795, true }, + { 4814, true }, + { 4833, true }, + { 4866, true }, { 4876, true }, - { 4893, true }, - { 4908, true }, - { 4917, true }, + { 4883, true }, + { 4900, true }, + { 4915, true }, { 4924, true }, - { 4938, true }, - { 4946, true }, - { 4957, true }, - { 4972, true }, - { 4987, true }, - { 4997, true }, - { 5008, true }, - { 5023, true }, - { 5035, true }, - { 5046, true }, - { 5066, true }, - { 5077, true }, - { 5090, true }, - { 5101, true }, - { 5112, true }, - { 5125, true }, - { 5143, true }, - { 5155, true }, - { 5164, true }, - { 5178, true }, - { 5189, true }, - { 5206, true }, - { 5217, true }, - { 5225, true }, - { 5234, true }, - { 5260, true }, - { 5271, false }, - { 5288, true }, - { 5298, true }, - { 5312, true }, - { 5324, true }, - { 5333, true }, + { 4931, true }, + { 4945, true }, + { 4953, true }, + { 4964, true }, + { 4979, true }, + { 4994, true }, + { 5004, true }, + { 5015, true }, + { 5030, true }, + { 5042, true }, + { 5053, true }, + { 5073, true }, + { 5084, true }, + { 5097, true }, + { 5108, true }, + { 5119, true }, + { 5132, true }, + { 5150, true }, + { 5162, true }, + { 5171, true }, + { 5185, true }, + { 5196, true }, + { 5213, true }, + { 5224, true }, + { 5232, true }, + { 5241, false }, + { 5267, true }, + { 5278, true }, + { 5288, false }, + { 5305, true }, + { 5315, true }, + { 5329, true }, + { 5341, true }, { 5350, true }, - { 5374, true }, - { 5390, true }, - { 5410, true }, - { 5435, true }, - { 5460, true }, - { 5485, true }, - { 5497, true }, - { 5509, true }, - { 5518, true }, - { 5545, true }, - { 5558, false }, - { 5567, true }, - { 5583, true }, - { 5599, true }, - { 5611, true }, - { 5625, true }, - { 5645, true }, - { 5660, true }, - { 5681, true }, - { 5693, true }, - { 5703, true }, - { 5715, true }, - { 5727, true }, - { 5736, true }, - { 5748, true }, - { 5767, true }, - { 5780, true }, - { 5791, true }, - { 5800, true }, - { 5811, true }, - { 5825, true }, - { 5841, true }, - { 5861, true }, - { 5882, true }, - { 5896, true }, - { 5909, true }, - { 5919, true }, - { 5934, true }, - { 5944, true }, - { 5959, true }, - { 5973, true }, - { 5988, true }, - { 5998, true }, - { 6012, true }, + { 5367, true }, + { 5391, true }, + { 5407, true }, + { 5427, true }, + { 5452, true }, + { 5477, true }, + { 5502, true }, + { 5514, true }, + { 5526, true }, + { 5535, true }, + { 5562, true }, + { 5575, false }, + { 5584, true }, + { 5600, true }, + { 5616, true }, + { 5628, true }, + { 5642, true }, + { 5662, true }, + { 5677, true }, + { 5698, true }, + { 5710, true }, + { 5720, true }, + { 5732, true }, + { 5744, true }, + { 5753, true }, + { 5765, true }, + { 5784, true }, + { 5797, true }, + { 5808, true }, + { 5817, true }, + { 5828, true }, + { 5842, true }, + { 5858, true }, + { 5878, true }, + { 5899, true }, + { 5913, true }, + { 5926, true }, + { 5936, true }, + { 5951, true }, + { 5961, true }, + { 5976, true }, + { 5990, true }, + { 6005, true }, + { 6015, true }, { 6029, true }, - { 6044, true }, - { 6058, true }, - { 6072, true }, - { 6088, true }, - { 6100, true }, - { 6112, true }, - { 6127, true }, - { 6141, true }, - { 6163, true }, - { 6184, false }, - { 6205, true }, - { 6218, true }, - { 6230, true }, - { 6243, true }, - { 6258, true }, - { 6269, true }, - { 6285, false }, - { 6292, true }, - { 6303, true }, - { 6315, true }, - { 6328, true }, - { 6348, true }, - { 6369, true }, - { 6382, true }, - { 6400, true }, - { 6417, true }, - { 6441, true }, - { 6460, true }, - { 6471, true }, - { 6485, true }, - { 6501, true }, - { 6520, true }, - { 6541, true }, - { 6561, true }, - { 6581, true }, - { 6594, false }, - { 6607, true }, - { 6619, true }, - { 6629, true }, - { 6642, true }, - { 6656, true }, - { 6672, true }, - { 6686, true }, - { 6702, true }, - { 6714, true }, - { 6728, true }, - { 6741, true }, - { 6755, true }, - { 6763, true }, - { 6778, true }, - { 6792, true }, - { 6811, true }, - { 6823, true }, - { 6837, true }, - { 6851, true }, - { 6863, true }, - { 6874, true }, - { 6885, true }, + { 6046, true }, + { 6061, true }, + { 6075, true }, + { 6089, true }, + { 6105, true }, + { 6117, true }, + { 6129, true }, + { 6144, true }, + { 6158, true }, + { 6180, true }, + { 6201, false }, + { 6222, true }, + { 6235, true }, + { 6247, true }, + { 6262, true }, + { 6273, true }, + { 6289, false }, + { 6296, true }, + { 6307, true }, + { 6319, true }, + { 6332, true }, + { 6352, true }, + { 6373, true }, + { 6386, true }, + { 6404, true }, + { 6421, true }, + { 6445, true }, + { 6464, true }, + { 6475, true }, + { 6489, true }, + { 6505, true }, + { 6524, true }, + { 6545, true }, + { 6565, true }, + { 6585, true }, + { 6598, false }, + { 6611, true }, + { 6623, true }, + { 6633, true }, + { 6646, true }, + { 6660, true }, + { 6676, true }, + { 6690, true }, + { 6706, true }, + { 6718, true }, + { 6732, true }, + { 6745, true }, + { 6759, true }, + { 6767, true }, + { 6782, true }, + { 6796, true }, + { 6815, true }, + { 6829, true }, + { 6843, true }, + { 6855, true }, + { 6866, true }, + { 6877, true }, + { 6891, true }, { 6899, true }, - { 6907, true }, + { 6910, true }, { 6918, true }, { 6926, true }, { 6934, true }, { 6942, true }, - { 6950, true }, - { 6963, true }, - { 6970, true }, - { 6980, true }, - { 6993, true }, - { 7005, true }, - { 7018, true }, - { 7038, true }, - { 7050, true }, - { 7061, true }, - { 7079, true }, - { 7092, true }, - { 7101, true }, - { 7113, true }, - { 7127, true }, - { 7140, true }, - { 7149, true }, - { 7165, true }, - { 7193, true }, - { 7212, true }, - { 7227, true }, - { 7247, true }, - { 7259, true }, - { 7270, true }, - { 7281, true }, - { 7301, true }, - { 7319, true }, - { 7329, false }, - { 7340, true }, - { 7350, true }, - { 7361, true }, - { 7370, true }, - { 7381, true }, - { 7400, true }, - { 7411, true }, - { 7429, true }, - { 7455, true }, - { 7465, true }, - { 7487, true }, - { 7501, true }, - { 7516, true }, - { 7530, true }, - { 7544, true }, - { 7559, true }, - { 7580, true }, - { 7590, true }, - { 7601, true }, - { 7622, true }, - { 7640, true }, + { 6955, true }, + { 6962, true }, + { 6972, true }, + { 6985, true }, + { 6997, true }, + { 7010, true }, + { 7030, true }, + { 7042, true }, + { 7053, true }, + { 7071, true }, + { 7084, true }, + { 7093, true }, + { 7105, true }, + { 7119, true }, + { 7132, true }, + { 7141, true }, + { 7157, true }, + { 7185, true }, + { 7204, true }, + { 7219, true }, + { 7239, true }, + { 7251, true }, + { 7262, true }, + { 7273, true }, + { 7293, true }, + { 7311, true }, + { 7321, false }, + { 7332, true }, + { 7342, true }, + { 7353, true }, + { 7362, true }, + { 7373, true }, + { 7392, true }, + { 7403, true }, + { 7421, true }, + { 7447, true }, + { 7457, true }, + { 7479, true }, + { 7493, true }, + { 7508, true }, + { 7522, true }, + { 7536, true }, + { 7551, true }, + { 7572, true }, + { 7582, true }, + { 7593, true }, + { 7614, true }, + { 7632, true }, + { 7645, true }, { 7653, true }, - { 7661, true }, - { 7675, true }, - { 7691, true }, - { 7709, true }, - { 7731, true }, - { 7746, true }, - { 7763, true }, - { 7779, true }, - { 7795, true }, - { 7812, true }, - { 7831, true }, - { 7846, true }, - { 7865, true }, - { 7882, true }, - { 7899, true }, - { 7917, true }, - { 7934, true }, - { 7949, true }, - { 7963, true }, - { 7980, true }, - { 7998, true }, - { 8013, true }, - { 8025, true }, - { 8038, true }, - { 8058, true }, - { 8069, true }, - { 8080, true }, - { 8091, true }, - { 8102, true }, - { 8113, true }, - { 8124, true }, - { 8136, true }, - { 8149, true }, - { 8168, true }, - { 8179, true }, - { 8192, true }, - { 8206, false }, - { 8219, false }, - { 8228, true }, - { 8245, true }, - { 8265, true }, - { 8276, true }, - { 8294, false }, - { 8327, true }, - { 8359, true }, - { 8386, true }, - { 8396, true }, - { 8414, true }, - { 8429, true }, - { 8441, true }, - { 8453, true }, - { 8473, true }, - { 8492, true }, - { 8512, true }, - { 8535, true }, - { 8559, true }, - { 8571, true }, - { 8582, true }, - { 8594, true }, - { 8606, true }, - { 8622, true }, - { 8639, true }, - { 8658, true }, - { 8672, true }, - { 8683, true }, - { 8716, true }, - { 8727, true }, - { 8740, true }, - { 8752, false }, - { 8776, true }, - { 8792, true }, - { 8808, true }, - { 8820, true }, - { 8836, true }, - { 8853, true }, - { 8871, true }, - { 8887, true }, - { 8908, true }, - { 8918, true }, - { 8935, true }, - { 8948, true }, - { 8961, true }, - { 8977, true }, - { 8988, true }, - { 9000, true }, - { 9011, true }, + { 7667, true }, + { 7683, true }, + { 7701, true }, + { 7723, true }, + { 7738, true }, + { 7755, true }, + { 7771, true }, + { 7787, true }, + { 7804, true }, + { 7823, true }, + { 7838, true }, + { 7857, true }, + { 7874, true }, + { 7891, true }, + { 7909, true }, + { 7926, true }, + { 7941, true }, + { 7955, true }, + { 7972, true }, + { 7990, true }, + { 8005, true }, + { 8017, true }, + { 8030, true }, + { 8050, true }, + { 8061, true }, + { 8072, true }, + { 8083, true }, + { 8094, true }, + { 8105, true }, + { 8116, true }, + { 8128, true }, + { 8141, true }, + { 8160, true }, + { 8171, true }, + { 8184, true }, + { 8198, false }, + { 8211, false }, + { 8220, true }, + { 8237, true }, + { 8257, true }, + { 8268, true }, + { 8286, false }, + { 8319, true }, + { 8351, true }, + { 8378, true }, + { 8388, true }, + { 8406, true }, + { 8421, true }, + { 8433, true }, + { 8445, true }, + { 8465, true }, + { 8484, true }, + { 8504, true }, + { 8527, true }, + { 8551, true }, + { 8563, true }, + { 8574, true }, + { 8586, true }, + { 8598, true }, + { 8614, true }, + { 8631, true }, + { 8650, true }, + { 8664, true }, + { 8675, true }, + { 8708, true }, + { 8719, true }, + { 8732, true }, + { 8744, false }, + { 8768, true }, + { 8784, true }, + { 8800, true }, + { 8812, true }, + { 8828, true }, + { 8845, true }, + { 8863, true }, + { 8879, true }, + { 8900, true }, + { 8910, true }, + { 8927, true }, + { 8940, true }, + { 8953, true }, + { 8969, true }, + { 8980, true }, + { 8992, true }, + { 9003, true }, + { 9010, true }, { 9018, true }, - { 9026, true }, - { 9039, false }, - { 9047, true }, - { 9057, true }, - { 9071, false }, - { 9085, true }, - { 9101, true }, - { 9131, true }, - { 9154, true }, - { 9167, true }, - { 9186, true }, - { 9199, false }, - { 9218, true }, - { 9234, true }, - { 9250, false }, - { 9265, false }, - { 9278, true }, - { 9294, true }, - { 9305, true }, - { 9317, true }, - { 9336, true }, - { 9355, true }, - { 9370, true }, - { 9391, false }, - { 9406, true }, - { 9419, true }, - { 9429, true }, - { 9440, true }, - { 9451, true }, - { 9465, true }, - { 9481, true }, - { 9498, false }, - { 9515, true }, - { 9541, true }, - { 9554, true }, - { 9568, true }, - { 9587, true }, - { 9608, true }, - { 9620, true }, - { 9634, true }, - { 9658, true }, - { 9671, true }, - { 9684, true }, - { 9698, true }, - { 9709, true }, - { 9718, true }, - { 9731, true }, - { 9744, true }, - { 9756, false }, - { 9774, true }, - { 9797, true }, - { 9824, true }, - { 9843, true }, - { 9855, true }, - { 9868, true }, - { 9888, true }, - { 9899, true }, - { 9911, true }, + { 9031, false }, + { 9039, true }, + { 9049, true }, + { 9063, false }, + { 9077, true }, + { 9093, true }, + { 9123, true }, + { 9146, true }, + { 9159, true }, + { 9178, true }, + { 9191, false }, + { 9210, true }, + { 9226, true }, + { 9242, false }, + { 9257, false }, + { 9270, true }, + { 9286, true }, + { 9297, true }, + { 9309, true }, + { 9328, true }, + { 9347, true }, + { 9362, true }, + { 9383, false }, + { 9398, true }, + { 9411, true }, + { 9421, true }, + { 9432, true }, + { 9443, true }, + { 9457, true }, + { 9473, true }, + { 9490, false }, + { 9507, true }, + { 9533, true }, + { 9546, true }, + { 9560, true }, + { 9579, true }, + { 9600, true }, + { 9612, true }, + { 9626, true }, + { 9650, true }, + { 9663, true }, + { 9676, true }, + { 9690, true }, + { 9701, true }, + { 9710, true }, + { 9723, true }, + { 9736, true }, + { 9748, false }, + { 9766, true }, + { 9789, true }, + { 9816, true }, + { 9835, true }, + { 9847, true }, + { 9860, true }, + { 9880, true }, + { 9891, true }, + { 9903, true }, + { 9917, true }, { 9925, true }, - { 9933, true }, - { 9950, true }, - { 9962, true }, - { 9980, true }, - { 10003, false }, - { 10019, true }, - { 10025, true }, - { 10037, true }, - { 10048, false }, - { 10065, true }, - { 10084, true }, - { 10096, true }, - { 10125, true }, - { 10141, true }, - { 10154, true }, - { 10170, true }, - { 10183, true }, - { 10194, true }, - { 10206, true }, - { 10222, true }, - { 10236, true }, - { 10252, true }, + { 9942, true }, + { 9954, true }, + { 9972, true }, + { 9995, false }, + { 10011, true }, + { 10017, true }, + { 10029, true }, + { 10040, false }, + { 10057, true }, + { 10076, true }, + { 10088, true }, + { 10117, true }, + { 10133, true }, + { 10146, true }, + { 10162, true }, + { 10175, true }, + { 10186, true }, + { 10198, true }, + { 10214, true }, + { 10228, true }, + { 10244, true }, + { 10258, true }, { 10266, true }, - { 10274, true }, - { 10288, true }, - { 10308, true }, - { 10320, true }, - { 10336, true }, - { 10350, false }, - { 10363, true }, - { 10378, true }, - { 10392, true }, - { 10401, true }, - { 10413, true }, - { 10431, true }, - { 10446, true }, - { 10456, true }, - { 10470, true }, - { 10496, true }, - { 10506, true }, - { 10520, true }, - { 10534, true }, - { 10552, true }, - { 10570, true }, - { 10586, true }, - { 10596, true }, - { 10607, true }, + { 10280, true }, + { 10300, true }, + { 10312, true }, + { 10328, true }, + { 10342, false }, + { 10355, true }, + { 10370, true }, + { 10384, true }, + { 10393, true }, + { 10405, true }, + { 10423, true }, + { 10438, true }, + { 10448, true }, + { 10462, true }, + { 10488, true }, + { 10498, true }, + { 10512, true }, + { 10526, true }, + { 10544, true }, + { 10562, true }, + { 10578, true }, + { 10588, true }, + { 10599, true }, + { 10615, true }, { 10623, true }, { 10631, true }, - { 10639, true }, - { 10650, true }, - { 10660, true }, - { 10675, true }, - { 10694, true }, - { 10707, true }, - { 10722, true }, - { 10737, true }, - { 10757, true }, - { 10768, true }, - { 10780, true }, - { 10793, true }, - { 10813, false }, - { 10827, true }, - { 10840, true }, - { 10858, true }, - { 10872, true }, - { 10885, true }, - { 10899, true }, - { 10913, true }, - { 10925, true }, - { 10936, true }, - { 10947, true }, - { 10960, true }, - { 10975, true }, - { 10986, true }, - { 10997, true }, - { 11008, true }, - { 11018, true }, - { 11039, true }, - { 11050, true }, - { 11059, true }, - { 11066, true }, - { 11080, false }, - { 11093, true }, - { 11103, true }, - { 11109, true }, - { 11122, true }, - { 11135, true }, - { 11146, true }, - { 11158, true }, - { 11172, true }, - { 11182, true }, - { 11200, true }, - { 11210, true }, - { 11222, true }, - { 11236, true }, - { 11246, true }, - { 11262, true }, - { 11273, true }, - { 11290, true }, - { 11309, true }, - { 11323, true }, - { 11345, true }, - { 11371, true }, - { 11381, true }, - { 11399, true }, - { 11410, true }, - { 11420, true }, - { 11430, true }, - { 11440, true }, - { 11459, true }, - { 11479, true }, - { 11493, true }, - { 11500, true }, - { 11510, true }, - { 11528, true }, - { 11550, true }, - { 11563, true }, + { 10642, true }, + { 10652, true }, + { 10667, true }, + { 10686, true }, + { 10699, true }, + { 10714, true }, + { 10729, true }, + { 10749, true }, + { 10760, true }, + { 10772, true }, + { 10785, true }, + { 10805, false }, + { 10819, true }, + { 10832, true }, + { 10850, true }, + { 10864, true }, + { 10877, true }, + { 10891, true }, + { 10905, true }, + { 10917, true }, + { 10928, true }, + { 10939, true }, + { 10952, true }, + { 10967, true }, + { 10978, true }, + { 10989, true }, + { 11000, true }, + { 11010, true }, + { 11031, true }, + { 11042, true }, + { 11051, true }, + { 11058, true }, + { 11072, false }, + { 11085, true }, + { 11095, true }, + { 11101, true }, + { 11114, true }, + { 11127, true }, + { 11138, true }, + { 11150, true }, + { 11164, true }, + { 11174, true }, + { 11192, true }, + { 11202, true }, + { 11214, true }, + { 11228, true }, + { 11238, true }, + { 11254, true }, + { 11265, true }, + { 11282, true }, + { 11301, true }, + { 11315, true }, + { 11337, true }, + { 11363, true }, + { 11373, true }, + { 11391, true }, + { 11402, true }, + { 11412, true }, + { 11422, true }, + { 11432, true }, + { 11451, true }, + { 11471, true }, + { 11485, true }, + { 11492, true }, + { 11502, true }, + { 11520, true }, + { 11542, true }, + { 11555, true }, + { 11571, true }, { 11579, true }, - { 11587, true }, - { 11599, false }, - { 11619, true }, - { 11626, true }, - { 11642, true }, - { 11658, true }, - { 11673, true }, - { 11683, true }, - { 11701, true }, - { 11728, true }, - { 11745, true }, + { 11591, false }, + { 11611, true }, + { 11618, true }, + { 11634, true }, + { 11650, true }, + { 11665, true }, + { 11675, true }, + { 11693, true }, + { 11720, true }, + { 11737, true }, + { 11755, true }, { 11763, true }, - { 11771, true }, - { 11785, true }, - { 11796, true }, - { 11805, true }, - { 11832, true }, - { 11842, true }, - { 11858, true }, - { 11870, true }, - { 11885, true }, - { 11897, true }, - { 11912, true }, - { 11927, true }, - { 11939, true }, - { 11960, true }, - { 11977, true }, - { 11991, true }, - { 12003, true }, - { 12013, true }, - { 12023, true }, - { 12038, true }, - { 12053, true }, + { 11777, true }, + { 11788, true }, + { 11797, true }, + { 11824, true }, + { 11834, true }, + { 11850, true }, + { 11862, true }, + { 11877, true }, + { 11889, true }, + { 11904, true }, + { 11919, true }, + { 11931, true }, + { 11952, true }, + { 11969, true }, + { 11983, true }, + { 11995, true }, + { 12005, true }, + { 12015, true }, + { 12030, true }, + { 12045, true }, + { 12057, true }, { 12065, true }, - { 12073, true }, - { 12086, true }, - { 12104, true }, - { 12125, true }, - { 12139, true }, - { 12155, true }, - { 12165, true }, - { 12177, true }, - { 12190, true }, - { 12209, true }, - { 12235, true }, - { 12247, true }, - { 12259, true }, - { 12278, true }, - { 12304, true }, - { 12317, true }, - { 12328, true }, - { 12339, true }, - { 12357, true }, - { 12387, true }, - { 12410, true }, - { 12423, false }, - { 12431, true }, - { 12443, true }, - { 12459, true }, - { 12474, true }, - { 12492, true }, - { 12502, true }, - { 12518, true }, - { 12547, true }, - { 12563, true }, - { 12579, true }, - { 12590, true }, - { 12602, true }, - { 12614, true }, - { 12637, true }, - { 12655, true }, - { 12673, true }, - { 12694, true }, - { 12719, true }, - { 12733, true }, - { 12746, true }, - { 12759, true }, - { 12770, true }, - { 12796, true }, - { 12812, true }, - { 12822, true }, - { 12834, true }, - { 12851, true }, - { 12863, true }, + { 12078, true }, + { 12096, true }, + { 12117, true }, + { 12131, true }, + { 12147, true }, + { 12157, true }, + { 12169, true }, + { 12182, true }, + { 12201, true }, + { 12227, true }, + { 12239, true }, + { 12251, true }, + { 12270, true }, + { 12296, true }, + { 12309, true }, + { 12320, true }, + { 12331, true }, + { 12349, true }, + { 12379, true }, + { 12402, true }, + { 12415, false }, + { 12423, true }, + { 12435, true }, + { 12451, true }, + { 12466, true }, + { 12484, true }, + { 12494, true }, + { 12510, true }, + { 12539, true }, + { 12555, true }, + { 12571, true }, + { 12582, true }, + { 12594, true }, + { 12606, true }, + { 12629, true }, + { 12647, true }, + { 12665, true }, + { 12686, true }, + { 12711, true }, + { 12725, true }, + { 12738, true }, + { 12751, true }, + { 12762, true }, + { 12788, true }, + { 12804, true }, + { 12814, true }, + { 12826, true }, + { 12843, true }, + { 12855, true }, + { 12868, true }, { 12876, true }, - { 12884, true }, - { 12895, true }, - { 12906, true }, - { 12924, true }, - { 12939, true }, - { 12957, true }, - { 12966, true }, - { 12977, true }, - { 12991, true }, + { 12887, true }, + { 12898, true }, + { 12916, true }, + { 12931, true }, + { 12949, true }, + { 12958, true }, + { 12969, true }, + { 12983, true }, + { 12994, true }, { 13002, true }, - { 13010, true }, - { 13020, true }, + { 13012, true }, + { 13023, true }, { 13031, true }, - { 13039, true }, - { 13049, true }, + { 13041, true }, + { 13056, true }, { 13064, true }, - { 13072, true }, - { 13097, true }, - { 13113, true }, + { 13089, true }, + { 13105, true }, + { 13112, true }, { 13120, true }, - { 13128, true }, - { 13137, false }, - { 13146, true }, - { 13162, true }, - { 13175, true }, - { 13184, true }, - { 13193, true }, - { 13203, true }, - { 13215, true }, - { 13233, true }, - { 13245, true }, - { 13255, true }, - { 13265, true }, - { 13277, true }, - { 13290, true }, - { 13303, true }, - { 13313, true }, - { 13323, true }, - { 13333, true }, - { 13345, false }, - { 13357, true }, - { 13373, true }, - { 13384, false }, - { 13394, true }, + { 13129, false }, + { 13138, true }, + { 13154, true }, + { 13167, true }, + { 13176, true }, + { 13185, true }, + { 13195, true }, + { 13207, true }, + { 13225, false }, + { 13241, true }, + { 13253, true }, + { 13263, true }, + { 13273, true }, + { 13285, true }, + { 13298, true }, + { 13311, true }, + { 13321, true }, + { 13331, true }, + { 13341, true }, + { 13353, false }, + { 13365, true }, + { 13381, true }, + { 13392, false }, { 13402, true }, - { 13411, true }, - { 13425, true }, - { 13440, true }, - { 13454, true }, - { 13465, true }, - { 13489, true }, - { 13502, true }, - { 13514, true }, - { 13531, true }, - { 13542, true }, - { 13562, true }, - { 13580, true }, - { 13595, true }, - { 13616, true }, - { 13640, true }, - { 13650, true }, - { 13660, true }, - { 13670, true }, - { 13681, true }, - { 13706, true }, - { 13735, true }, - { 13748, true }, - { 13767, true }, - { 13779, true }, - { 13789, true }, + { 13410, true }, + { 13419, true }, + { 13433, true }, + { 13448, true }, + { 13462, true }, + { 13473, true }, + { 13497, true }, + { 13510, true }, + { 13522, true }, + { 13539, true }, + { 13550, true }, + { 13570, true }, + { 13588, true }, + { 13603, true }, + { 13624, true }, + { 13648, true }, + { 13658, true }, + { 13668, true }, + { 13678, true }, + { 13689, true }, + { 13714, true }, + { 13743, true }, + { 13756, true }, + { 13775, true }, + { 13787, true }, { 13797, true }, - { 13806, true }, - { 13820, true }, - { 13837, true }, - { 13849, true }, - { 13864, true }, - { 13871, true }, - { 13884, true }, - { 13896, true }, + { 13805, true }, + { 13814, true }, + { 13828, true }, + { 13845, true }, + { 13857, true }, + { 13872, true }, + { 13879, true }, + { 13892, true }, { 13904, true }, - { 13919, true }, - { 13928, true }, - { 13940, true }, - { 13951, true }, - { 13961, true }, - { 13976, true }, - { 13989, true }, - { 13999, true }, - { 14012, true }, - { 14026, true }, - { 14040, true }, - { 14052, true }, - { 14067, true }, - { 14083, true }, - { 14098, true }, - { 14112, true }, - { 14128, true }, - { 14140, true }, - { 14154, true }, - { 14166, true }, - { 14178, true }, - { 14194, true }, - { 14209, false }, - { 14225, true }, - { 14243, true }, - { 14260, true }, - { 14278, true }, - { 14289, true }, - { 14302, true }, - { 14319, false }, - { 14335, true }, - { 14351, true }, - { 14371, true }, - { 14386, true }, - { 14400, true }, - { 14411, true }, - { 14423, true }, - { 14436, true }, - { 14449, true }, - { 14467, true }, - { 14485, true }, - { 14503, true }, - { 14520, true }, - { 14530, true }, - { 14539, true }, - { 14554, true }, - { 14565, false }, - { 14575, true }, - { 14586, true }, - { 14600, true }, - { 14613, true }, - { 14623, true }, - { 14636, true }, - { 14650, true }, - { 14661, true }, - { 14671, true }, - { 14689, true }, - { 14698, true }, - { 14710, true }, - { 14727, true }, - { 14747, true }, - { 14766, true }, - { 14781, true }, - { 14799, true }, - { 14814, true }, - { 14825, true }, - { 14839, true }, - { 14850, true }, - { 14861, true }, - { 14872, true }, - { 14899, true }, - { 14909, true }, - { 14921, true }, - { 14933, true }, - { 14942, true }, - { 14951, true }, - { 14960, true }, - { 14975, true }, - { 14986, true }, - { 14995, true }, - { 15007, true }, - { 15016, true }, - { 15026, true }, - { 15037, true }, - { 15047, true }, - { 15059, true }, - { 15073, true }, - { 15083, true }, - { 15093, true }, - { 15103, false }, - { 15114, true }, - { 15132, true }, - { 15142, true }, - { 15161, true }, - { 15173, true }, - { 15194, true }, - { 15207, true }, - { 15221, true }, - { 15234, false }, - { 15248, false }, - { 15263, true }, - { 15275, true }, - { 15289, true }, - { 15307, true }, - { 15320, true }, - { 15329, true }, - { 15347, true }, - { 15358, true }, - { 15370, true }, - { 15384, true }, - { 15397, true }, - { 15411, true }, - { 15424, true }, - { 15438, true }, - { 15454, true }, - { 15465, true }, - { 15480, true }, - { 15493, true }, - { 15506, true }, - { 15522, true }, - { 15534, true }, - { 15547, true }, - { 15559, true }, - { 15575, true }, - { 15588, true }, - { 15598, true }, - { 15626, true }, - { 15641, true }, - { 15657, true }, - { 15668, true }, - { 15679, true }, - { 15689, true }, - { 15699, false }, - { 15713, true }, - { 15725, false }, - { 15744, true }, - { 15771, true }, - { 15792, true }, - { 15808, true }, - { 15819, true }, - { 15837, true }, - { 15852, true }, - { 15863, true }, - { 15878, false }, - { 15893, true }, - { 15903, true }, - { 15917, true }, - { 15939, true }, - { 15954, true }, - { 15969, true }, - { 15990, true }, - { 16000, true }, - { 16014, true }, - { 16029, true }, - { 16047, true }, - { 16061, true }, - { 16080, true }, - { 16094, true }, - { 16104, true }, + { 13912, true }, + { 13927, true }, + { 13936, true }, + { 13948, true }, + { 13959, true }, + { 13969, true }, + { 13984, true }, + { 13997, true }, + { 14007, true }, + { 14020, true }, + { 14034, true }, + { 14048, true }, + { 14060, true }, + { 14075, true }, + { 14091, true }, + { 14106, true }, + { 14120, true }, + { 14136, true }, + { 14148, true }, + { 14162, true }, + { 14174, true }, + { 14186, true }, + { 14202, true }, + { 14217, false }, + { 14233, true }, + { 14251, true }, + { 14268, true }, + { 14286, true }, + { 14297, true }, + { 14310, true }, + { 14327, false }, + { 14343, true }, + { 14359, true }, + { 14379, true }, + { 14394, true }, + { 14408, true }, + { 14419, true }, + { 14431, true }, + { 14444, true }, + { 14457, true }, + { 14475, true }, + { 14493, true }, + { 14511, true }, + { 14528, true }, + { 14538, true }, + { 14547, true }, + { 14562, true }, + { 14573, false }, + { 14583, true }, + { 14594, true }, + { 14608, true }, + { 14621, true }, + { 14631, true }, + { 14644, true }, + { 14658, true }, + { 14669, true }, + { 14679, true }, + { 14697, true }, + { 14706, true }, + { 14718, true }, + { 14735, true }, + { 14755, true }, + { 14774, true }, + { 14789, true }, + { 14807, true }, + { 14822, true }, + { 14833, true }, + { 14847, true }, + { 14858, true }, + { 14869, true }, + { 14880, true }, + { 14907, true }, + { 14917, true }, + { 14929, true }, + { 14941, true }, + { 14950, true }, + { 14959, true }, + { 14968, true }, + { 14983, true }, + { 14994, true }, + { 15003, true }, + { 15015, true }, + { 15024, true }, + { 15034, true }, + { 15045, true }, + { 15055, true }, + { 15067, true }, + { 15081, true }, + { 15091, true }, + { 15101, true }, + { 15111, false }, + { 15122, true }, + { 15140, true }, + { 15150, true }, + { 15169, true }, + { 15181, true }, + { 15202, true }, + { 15215, true }, + { 15229, true }, + { 15242, false }, + { 15256, false }, + { 15271, true }, + { 15283, true }, + { 15297, true }, + { 15315, true }, + { 15328, true }, + { 15337, true }, + { 15355, true }, + { 15366, true }, + { 15378, true }, + { 15392, true }, + { 15405, true }, + { 15419, true }, + { 15432, true }, + { 15446, true }, + { 15462, true }, + { 15473, true }, + { 15488, true }, + { 15501, true }, + { 15514, true }, + { 15530, true }, + { 15542, true }, + { 15555, true }, + { 15567, true }, + { 15583, true }, + { 15596, true }, + { 15606, true }, + { 15634, true }, + { 15649, true }, + { 15665, true }, + { 15676, true }, + { 15687, true }, + { 15697, true }, + { 15707, false }, + { 15721, true }, + { 15733, false }, + { 15752, true }, + { 15779, true }, + { 15800, true }, + { 15816, true }, + { 15827, true }, + { 15845, true }, + { 15860, true }, + { 15871, true }, + { 15886, false }, + { 15901, true }, + { 15911, true }, + { 15925, true }, + { 15947, true }, + { 15962, true }, + { 15977, true }, + { 15998, true }, + { 16008, true }, + { 16022, true }, + { 16037, true }, + { 16049, true }, + { 16067, true }, + { 16081, true }, + { 16100, true }, { 16114, true }, - { 16127, true }, - { 16142, true }, - { 16156, true }, - { 16169, true }, - { 16182, true }, - { 16199, true }, - { 16215, true }, - { 16228, true }, - { 16245, true }, - { 16257, true }, - { 16275, true }, - { 16288, true }, + { 16124, true }, + { 16134, true }, + { 16147, true }, + { 16162, true }, + { 16176, true }, + { 16189, true }, + { 16202, true }, + { 16219, true }, + { 16235, true }, + { 16248, true }, + { 16265, true }, + { 16277, true }, + { 16295, true }, { 16308, true }, - { 16324, true }, - { 16340, true }, - { 16349, true }, - { 16357, true }, - { 16366, true }, - { 16375, true }, - { 16392, true }, - { 16405, true }, - { 16415, true }, + { 16328, true }, + { 16344, true }, + { 16360, true }, + { 16369, true }, + { 16377, true }, + { 16386, true }, + { 16395, true }, + { 16412, true }, { 16425, true }, { 16435, true }, - { 16453, true }, - { 16477, true }, - { 16491, true }, - { 16506, true }, - { 16524, true }, - { 16536, true }, - { 16559, true }, - { 16581, true }, - { 16607, true }, - { 16625, true }, - { 16647, true }, - { 16660, true }, - { 16672, true }, - { 16684, false }, - { 16700, true }, - { 16714, true }, - { 16729, true }, - { 16741, true }, - { 16763, true }, - { 16780, true }, - { 16795, true }, - { 16816, true }, - { 16830, true }, - { 16849, true }, - { 16866, true }, - { 16880, true }, - { 16901, true }, - { 16917, true }, - { 16930, true }, - { 16949, true }, - { 16966, true }, - { 16984, true }, - { 17002, true }, - { 17011, true }, - { 17027, true }, - { 17043, true }, - { 17062, true }, - { 17080, true }, - { 17096, true }, - { 17110, true }, - { 17122, true }, - { 17135, true }, - { 17145, true }, + { 16445, true }, + { 16455, true }, + { 16473, true }, + { 16497, true }, + { 16511, true }, + { 16526, true }, + { 16544, true }, + { 16556, true }, + { 16579, true }, + { 16601, true }, + { 16627, true }, + { 16645, true }, + { 16667, true }, + { 16680, true }, + { 16692, true }, + { 16704, false }, + { 16720, true }, + { 16734, true }, + { 16749, true }, + { 16761, true }, + { 16783, true }, + { 16800, true }, + { 16815, true }, + { 16836, true }, + { 16850, true }, + { 16869, true }, + { 16886, true }, + { 16900, true }, + { 16921, true }, + { 16937, true }, + { 16950, true }, + { 16969, true }, + { 16986, true }, + { 17004, true }, + { 17022, true }, + { 17031, true }, + { 17047, true }, + { 17063, true }, + { 17082, true }, + { 17100, true }, + { 17116, true }, + { 17130, true }, + { 17142, true }, { 17155, true }, - { 17169, true }, - { 17179, true }, - { 17190, true }, - { 17199, false }, - { 17208, true }, - { 17222, true }, - { 17236, true }, - { 17248, true }, - { 17263, true }, - { 17273, true }, - { 17286, true }, - { 17297, true }, - { 17309, true }, - { 17324, true }, - { 17340, true }, - { 17349, true }, - { 17364, true }, - { 17380, true }, - { 17395, true }, - { 17408, true }, - { 17421, true }, - { 17440, true }, - { 17450, true }, + { 17165, true }, + { 17175, true }, + { 17189, true }, + { 17199, true }, + { 17210, true }, + { 17219, false }, + { 17228, true }, + { 17242, true }, + { 17256, true }, + { 17268, true }, + { 17283, true }, + { 17293, true }, + { 17306, true }, + { 17317, true }, + { 17329, true }, + { 17344, true }, + { 17360, true }, + { 17369, true }, + { 17384, true }, + { 17400, true }, + { 17415, true }, + { 17428, true }, + { 17441, true }, { 17460, true }, - { 17472, true }, - { 17487, true }, - { 17502, true }, - { 17517, false }, - { 17530, true }, - { 17546, true }, - { 17565, true }, - { 17574, true }, - { 17587, true }, - { 17602, false }, - { 17617, true }, - { 17632, true }, - { 17642, true }, + { 17470, true }, + { 17480, true }, + { 17492, true }, + { 17507, true }, + { 17522, true }, + { 17537, false }, + { 17550, true }, + { 17566, true }, + { 17585, true }, + { 17594, true }, + { 17607, true }, + { 17622, false }, + { 17637, true }, { 17652, true }, { 17667, true }, - { 17689, true }, - { 17704, true }, - { 17717, true }, - { 17744, true }, - { 17758, true }, - { 17770, true }, - { 17785, true }, - { 17795, true }, - { 17816, true }, - { 17838, true }, - { 17856, false }, - { 17875, true }, - { 17889, true }, - { 17901, true }, - { 17918, true }, - { 17933, true }, - { 17944, true }, - { 17960, true }, - { 17978, true }, - { 17990, true }, - { 18000, true }, - { 18012, true }, - { 18026, false }, - { 18039, true }, - { 18056, true }, - { 18069, true }, - { 18081, true }, + { 17677, true }, + { 17687, true }, + { 17702, true }, + { 17724, true }, + { 17739, true }, + { 17752, true }, + { 17779, true }, + { 17793, true }, + { 17805, true }, + { 17820, true }, + { 17830, true }, + { 17851, true }, + { 17873, true }, + { 17891, false }, + { 17910, true }, + { 17924, true }, + { 17936, true }, + { 17953, true }, + { 17968, true }, + { 17979, true }, + { 17995, true }, + { 18013, true }, + { 18025, true }, + { 18035, true }, + { 18047, true }, + { 18061, false }, + { 18074, true }, + { 18091, true }, { 18104, true }, - { 18117, true }, - { 18125, false }, - { 18136, true }, - { 18154, true }, - { 18166, true }, - { 18187, true }, - { 18201, true }, - { 18218, true }, - { 18229, true }, - { 18238, true }, - { 18250, true }, + { 18116, true }, + { 18139, true }, + { 18152, true }, + { 18160, false }, + { 18171, true }, + { 18189, true }, + { 18210, true }, + { 18224, true }, + { 18241, true }, + { 18252, true }, { 18261, true }, - { 18271, false }, - { 18285, true }, - { 18303, true }, - { 18316, true }, - { 18327, true }, - { 18341, true }, - { 18353, true }, + { 18273, true }, + { 18284, true }, + { 18294, false }, + { 18308, true }, + { 18326, true }, + { 18339, true }, + { 18350, true }, { 18364, true }, - { 18375, true }, - { 18388, true }, - { 18400, true }, + { 18376, true }, + { 18387, true }, + { 18398, true }, { 18411, true }, - { 18430, true }, - { 18446, true }, - { 18460, true }, - { 18479, true }, - { 18491, true }, - { 18506, true }, - { 18515, true }, - { 18530, true }, - { 18544, true }, - { 18557, true }, - { 18569, true }, - { 18581, true }, - { 18595, true }, - { 18606, true }, - { 18620, true }, - { 18631, true }, - { 18642, false }, - { 18652, true }, - { 18662, true }, - { 18672, true }, - { 18683, true }, - { 18694, true }, - { 18705, true }, + { 18423, true }, + { 18434, true }, + { 18453, true }, + { 18469, true }, + { 18483, true }, + { 18502, true }, + { 18514, true }, + { 18529, true }, + { 18538, true }, + { 18553, true }, + { 18567, true }, + { 18580, true }, + { 18592, true }, + { 18604, true }, + { 18618, true }, + { 18629, true }, + { 18643, true }, + { 18654, true }, + { 18665, true }, + { 18675, true }, + { 18685, true }, + { 18696, true }, + { 18707, true }, { 18718, true }, - { 18732, true }, - { 18744, true }, - { 18758, true }, - { 18783, true }, - { 18795, true }, - { 18812, true }, - { 18823, true }, - { 18834, true }, - { 18853, true }, - { 18869, true }, - { 18880, true }, - { 18892, true }, - { 18907, true }, - { 18926, true }, - { 18943, true }, - { 18951, true }, - { 18967, true }, - { 18981, true }, - { 18998, true }, - { 19015, true }, + { 18731, true }, + { 18745, true }, + { 18757, true }, + { 18771, true }, + { 18796, true }, + { 18808, true }, + { 18825, true }, + { 18836, true }, + { 18847, true }, + { 18866, true }, + { 18882, true }, + { 18893, true }, + { 18905, true }, + { 18920, true }, + { 18939, true }, + { 18956, true }, + { 18964, true }, + { 18980, true }, + { 18994, true }, + { 19011, true }, { 19028, true }, { 19041, true }, { 19054, true }, @@ -14548,11780 +14534,11766 @@ static const nsSTSPreload kSTSPreloadList[] = { { 19171, true }, { 19184, true }, { 19197, true }, - { 19214, true }, - { 19226, true }, - { 19248, true }, - { 19260, true }, - { 19283, true }, - { 19307, true }, - { 19325, false }, - { 19346, true }, + { 19210, true }, + { 19227, true }, + { 19239, true }, + { 19261, true }, + { 19273, true }, + { 19296, true }, + { 19320, true }, + { 19338, false }, { 19359, true }, - { 19374, true }, - { 19390, true }, - { 19416, true }, - { 19426, true }, - { 19443, true }, - { 19458, true }, - { 19477, true }, - { 19494, true }, - { 19510, true }, - { 19522, true }, - { 19532, true }, - { 19542, true }, - { 19563, true }, - { 19585, true }, - { 19597, true }, - { 19608, true }, - { 19623, true }, - { 19634, true }, - { 19649, true }, - { 19664, true }, - { 19676, true }, - { 19695, true }, + { 19372, true }, + { 19387, true }, + { 19403, true }, + { 19429, true }, + { 19439, true }, + { 19456, true }, + { 19471, true }, + { 19490, true }, + { 19507, true }, + { 19523, true }, + { 19535, true }, + { 19545, true }, + { 19555, true }, + { 19576, true }, + { 19598, true }, + { 19610, true }, + { 19621, true }, + { 19636, true }, + { 19647, true }, + { 19662, true }, + { 19677, true }, + { 19689, true }, { 19708, true }, - { 19722, true }, - { 19744, true }, - { 19763, true }, - { 19783, true }, - { 19791, true }, + { 19721, true }, + { 19735, true }, + { 19757, true }, + { 19776, true }, + { 19796, true }, { 19804, true }, - { 19818, true }, - { 19832, true }, - { 19843, true }, + { 19817, true }, + { 19831, true }, + { 19845, true }, { 19856, true }, - { 19872, true }, - { 19892, true }, - { 19906, true }, - { 19918, true }, - { 19935, false }, - { 19951, false }, - { 19971, true }, + { 19869, true }, + { 19885, true }, + { 19905, true }, + { 19919, true }, + { 19931, true }, + { 19948, false }, + { 19964, false }, { 19984, true }, - { 20000, true }, - { 20016, true }, + { 19997, true }, + { 20013, true }, { 20029, true }, { 20042, true }, - { 20053, true }, - { 20069, true }, - { 20083, true }, - { 20099, true }, - { 20110, true }, + { 20055, true }, + { 20066, true }, + { 20082, true }, + { 20096, true }, + { 20112, true }, { 20123, true }, - { 20138, true }, - { 20152, true }, - { 20164, true }, - { 20184, true }, - { 20196, true }, + { 20136, true }, + { 20151, true }, + { 20165, true }, + { 20177, true }, + { 20197, true }, { 20209, true }, { 20222, true }, - { 20243, true }, - { 20263, true }, - { 20277, true }, - { 20292, true }, - { 20301, true }, - { 20312, true }, - { 20322, true }, - { 20332, true }, - { 20350, true }, - { 20375, true }, - { 20386, true }, - { 20408, true }, - { 20420, true }, + { 20235, true }, + { 20256, true }, + { 20276, true }, + { 20290, true }, + { 20305, true }, + { 20314, true }, + { 20325, true }, + { 20335, true }, + { 20345, true }, + { 20363, true }, + { 20388, true }, + { 20399, true }, + { 20421, true }, { 20433, true }, { 20446, true }, - { 20454, true }, - { 20473, true }, - { 20483, true }, - { 20498, true }, - { 20515, true }, - { 20531, true }, - { 20543, true }, - { 20554, true }, - { 20568, true }, - { 20592, false }, - { 20606, true }, - { 20621, true }, - { 20636, true }, - { 20658, true }, - { 20669, true }, + { 20459, true }, + { 20467, true }, + { 20486, true }, + { 20496, true }, + { 20511, true }, + { 20528, true }, + { 20544, true }, + { 20556, true }, + { 20567, true }, + { 20581, true }, + { 20605, false }, + { 20619, true }, + { 20634, true }, + { 20649, true }, + { 20671, true }, { 20682, true }, - { 20702, true }, - { 20713, true }, - { 20721, true }, - { 20738, true }, - { 20756, true }, - { 20775, true }, - { 20789, true }, - { 20804, true }, - { 20819, true }, - { 20829, true }, - { 20838, true }, - { 20853, true }, - { 20867, true }, - { 20879, true }, - { 20905, true }, - { 20920, true }, - { 20935, true }, - { 20947, true }, - { 20965, true }, - { 20985, true }, - { 21001, true }, - { 21013, true }, - { 21030, true }, - { 21044, true }, - { 21056, true }, - { 21073, true }, - { 21082, true }, - { 21094, true }, - { 21116, true }, - { 21130, true }, - { 21146, true }, - { 21163, true }, - { 21175, false }, - { 21197, false }, - { 21222, false }, - { 21246, true }, - { 21258, true }, - { 21268, true }, + { 20695, true }, + { 20715, true }, + { 20726, true }, + { 20734, true }, + { 20751, true }, + { 20769, true }, + { 20788, true }, + { 20802, true }, + { 20817, true }, + { 20832, true }, + { 20842, true }, + { 20851, true }, + { 20866, true }, + { 20880, true }, + { 20892, true }, + { 20918, true }, + { 20933, true }, + { 20948, true }, + { 20960, true }, + { 20978, true }, + { 20998, true }, + { 21014, true }, + { 21026, true }, + { 21043, true }, + { 21057, true }, + { 21069, true }, + { 21086, true }, + { 21095, true }, + { 21107, true }, + { 21129, true }, + { 21143, true }, + { 21159, true }, + { 21176, true }, + { 21188, false }, + { 21210, false }, + { 21235, false }, + { 21259, true }, + { 21271, true }, { 21281, true }, - { 21291, true }, - { 21301, true }, - { 21311, true }, - { 21321, true }, - { 21331, true }, - { 21341, true }, - { 21351, true }, - { 21365, true }, - { 21383, true }, - { 21398, true }, - { 21412, true }, - { 21424, true }, - { 21436, true }, - { 21447, true }, - { 21461, true }, - { 21476, true }, - { 21490, true }, - { 21504, false }, - { 21524, true }, - { 21543, true }, - { 21558, true }, - { 21569, true }, - { 21580, true }, - { 21592, true }, - { 21605, false }, - { 21618, true }, - { 21634, true }, - { 21647, true }, - { 21659, true }, - { 21674, true }, - { 21684, true }, - { 21709, true }, - { 21725, true }, - { 21742, true }, - { 21755, true }, - { 21770, true }, - { 21790, true }, - { 21802, true }, - { 21818, true }, - { 21846, false }, - { 21858, true }, - { 21871, true }, - { 21880, true }, - { 21890, true }, - { 21899, true }, - { 21908, true }, - { 21915, false }, - { 21931, true }, - { 21945, true }, - { 21955, true }, - { 21975, true }, - { 21995, true }, - { 22006, true }, - { 22020, true }, - { 22035, true }, - { 22048, true }, - { 22063, true }, - { 22080, true }, - { 22088, true }, - { 22102, true }, - { 22114, true }, - { 22131, false }, - { 22152, false }, - { 22174, false }, - { 22193, false }, - { 22211, true }, - { 22227, true }, - { 22251, true }, - { 22279, true }, - { 22290, true }, - { 22305, true }, - { 22324, true }, - { 22347, true }, - { 22364, true }, - { 22378, true }, - { 22389, true }, - { 22407, true }, - { 22422, true }, - { 22435, true }, - { 22448, true }, - { 22463, true }, - { 22475, true }, - { 22490, true }, - { 22509, true }, - { 22527, true }, - { 22535, true }, - { 22543, true }, - { 22555, true }, - { 22573, true }, - { 22588, true }, - { 22605, false }, - { 22614, true }, - { 22624, true }, - { 22637, false }, - { 22651, true }, - { 22664, true }, - { 22680, false }, - { 22687, true }, - { 22697, true }, - { 22711, true }, - { 22726, true }, - { 22734, true }, - { 22744, true }, - { 22762, true }, - { 22775, true }, - { 22788, true }, - { 22797, true }, - { 22807, true }, - { 22822, true }, - { 22851, true }, - { 22868, true }, - { 22878, true }, - { 22892, true }, - { 22903, true }, - { 22917, true }, - { 22939, true }, - { 22964, true }, - { 22977, true }, - { 22990, true }, - { 23007, true }, - { 23025, true }, - { 23040, true }, - { 23050, true }, - { 23071, true }, - { 23081, false }, - { 23100, true }, - { 23112, true }, - { 23141, true }, - { 23162, true }, - { 23176, true }, - { 23202, true }, - { 23210, true }, - { 23223, true }, - { 23235, true }, - { 23251, true }, - { 23270, true }, - { 23283, true }, - { 23296, true }, - { 23315, true }, - { 23328, false }, - { 23338, true }, - { 23360, true }, - { 23374, true }, - { 23390, true }, - { 23405, true }, - { 23422, false }, - { 23430, true }, - { 23446, true }, - { 23466, true }, - { 23480, true }, - { 23495, true }, - { 23506, true }, - { 23519, true }, - { 23531, true }, - { 23543, true }, - { 23556, true }, - { 23569, false }, - { 23591, true }, - { 23615, true }, - { 23638, true }, - { 23656, true }, - { 23682, true }, - { 23709, true }, - { 23732, true }, - { 23748, true }, - { 23777, true }, - { 23789, true }, - { 23802, true }, - { 23811, true }, - { 23820, true }, - { 23837, true }, - { 23850, true }, - { 23859, true }, - { 23876, true }, - { 23885, true }, - { 23893, true }, - { 23917, true }, - { 23927, true }, - { 23936, true }, - { 23949, true }, - { 23961, true }, - { 23975, true }, - { 23989, true }, - { 24007, true }, - { 24022, true }, - { 24036, true }, - { 24048, true }, - { 24064, true }, - { 24077, true }, - { 24092, true }, - { 24104, true }, - { 24119, true }, - { 24133, true }, - { 24142, true }, - { 24151, true }, - { 24165, true }, - { 24174, true }, - { 24188, true }, - { 24197, true }, - { 24210, true }, - { 24220, true }, - { 24235, true }, - { 24250, true }, - { 24264, true }, - { 24279, true }, - { 24292, true }, - { 24311, true }, - { 24327, true }, - { 24341, true }, - { 24352, true }, - { 24366, true }, - { 24376, true }, - { 24388, true }, - { 24404, true }, - { 24418, true }, - { 24423, true }, - { 24431, true }, - { 24438, true }, - { 24447, true }, - { 24462, false }, - { 24482, true }, - { 24492, true }, - { 24505, true }, - { 24523, true }, - { 24536, true }, - { 24552, true }, - { 24564, true }, - { 24577, true }, - { 24588, true }, - { 24599, true }, - { 24617, true }, - { 24630, true }, - { 24643, true }, - { 24663, true }, - { 24679, true }, - { 24687, true }, - { 24698, false }, - { 24708, true }, - { 24720, true }, - { 24734, true }, - { 24753, true }, - { 24761, true }, - { 24780, true }, - { 24794, false }, - { 24810, true }, - { 24822, false }, - { 24837, true }, - { 24849, false }, - { 24857, false }, - { 24869, true }, - { 24881, true }, - { 24892, true }, - { 24906, true }, - { 24919, true }, - { 24931, true }, - { 24951, true }, - { 24961, true }, - { 24980, true }, - { 24991, true }, - { 25003, true }, - { 25026, true }, - { 25049, true }, - { 25060, true }, - { 25075, true }, - { 25088, true }, - { 25104, true }, - { 25120, true }, - { 25138, false }, - { 25161, true }, - { 25181, true }, - { 25195, true }, - { 25218, true }, - { 25237, true }, - { 25255, true }, - { 25272, true }, - { 25298, true }, - { 25317, true }, - { 25333, true }, - { 25347, true }, - { 25368, true }, - { 25384, true }, - { 25409, true }, - { 25423, true }, - { 25432, true }, - { 25444, true }, - { 25457, true }, - { 25470, true }, - { 25482, true }, - { 25495, true }, - { 25509, true }, - { 25519, true }, - { 25532, true }, - { 25540, true }, - { 25547, true }, - { 25559, true }, - { 25571, true }, - { 25586, true }, - { 25612, true }, - { 25634, true }, - { 25648, true }, - { 25660, true }, - { 25670, true }, - { 25683, true }, - { 25691, true }, - { 25705, true }, - { 25729, true }, - { 25743, true }, - { 25767, true }, - { 25787, true }, - { 25798, true }, - { 25807, true }, - { 25829, true }, - { 25852, true }, - { 25876, true }, - { 25899, false }, - { 25930, false }, - { 25945, true }, - { 25957, true }, - { 25977, true }, - { 25992, true }, - { 26008, true }, - { 26019, true }, - { 26031, true }, - { 26047, true }, - { 26058, true }, - { 26072, true }, - { 26082, true }, - { 26091, false }, - { 26104, true }, - { 26121, true }, - { 26133, true }, - { 26152, true }, - { 26169, true }, - { 26182, true }, - { 26202, true }, - { 26224, true }, - { 26237, true }, - { 26248, true }, - { 26259, true }, - { 26275, true }, - { 26290, true }, - { 26304, true }, - { 26320, true }, - { 26333, true }, - { 26346, true }, - { 26358, true }, - { 26371, true }, - { 26384, true }, - { 26396, true }, - { 26409, true }, - { 26421, true }, - { 26440, true }, - { 26455, true }, - { 26468, true }, - { 26484, true }, + { 21294, true }, + { 21304, true }, + { 21314, true }, + { 21324, true }, + { 21334, true }, + { 21344, true }, + { 21354, true }, + { 21364, true }, + { 21378, true }, + { 21396, true }, + { 21411, true }, + { 21425, true }, + { 21437, true }, + { 21449, true }, + { 21460, true }, + { 21474, true }, + { 21489, true }, + { 21503, false }, + { 21523, true }, + { 21542, true }, + { 21557, true }, + { 21568, true }, + { 21579, true }, + { 21591, true }, + { 21604, false }, + { 21617, true }, + { 21633, true }, + { 21646, true }, + { 21658, true }, + { 21673, true }, + { 21683, true }, + { 21708, true }, + { 21724, true }, + { 21741, true }, + { 21754, true }, + { 21769, true }, + { 21789, true }, + { 21801, true }, + { 21817, true }, + { 21845, false }, + { 21857, true }, + { 21870, true }, + { 21879, true }, + { 21889, true }, + { 21898, true }, + { 21907, true }, + { 21914, false }, + { 21930, true }, + { 21944, true }, + { 21954, true }, + { 21974, true }, + { 21994, true }, + { 22005, true }, + { 22019, true }, + { 22034, true }, + { 22047, true }, + { 22062, true }, + { 22079, true }, + { 22087, true }, + { 22101, true }, + { 22113, true }, + { 22130, false }, + { 22151, false }, + { 22173, false }, + { 22192, false }, + { 22210, true }, + { 22226, true }, + { 22250, true }, + { 22278, true }, + { 22289, true }, + { 22304, true }, + { 22323, true }, + { 22346, true }, + { 22363, true }, + { 22377, true }, + { 22388, true }, + { 22406, true }, + { 22421, true }, + { 22434, true }, + { 22447, true }, + { 22462, true }, + { 22474, true }, + { 22489, true }, + { 22508, true }, + { 22526, true }, + { 22534, true }, + { 22542, true }, + { 22554, true }, + { 22572, true }, + { 22587, true }, + { 22604, false }, + { 22613, true }, + { 22623, true }, + { 22636, false }, + { 22650, true }, + { 22663, true }, + { 22679, false }, + { 22686, true }, + { 22696, true }, + { 22710, true }, + { 22725, true }, + { 22733, true }, + { 22743, true }, + { 22761, true }, + { 22774, true }, + { 22787, true }, + { 22796, true }, + { 22806, true }, + { 22821, true }, + { 22850, true }, + { 22867, true }, + { 22877, true }, + { 22891, true }, + { 22902, true }, + { 22916, true }, + { 22938, true }, + { 22963, true }, + { 22976, true }, + { 22989, true }, + { 23006, true }, + { 23024, true }, + { 23039, true }, + { 23049, true }, + { 23070, true }, + { 23080, false }, + { 23099, true }, + { 23111, true }, + { 23140, true }, + { 23161, true }, + { 23175, true }, + { 23201, true }, + { 23209, true }, + { 23222, true }, + { 23234, true }, + { 23250, true }, + { 23269, true }, + { 23282, true }, + { 23295, true }, + { 23314, true }, + { 23327, false }, + { 23337, true }, + { 23359, true }, + { 23373, true }, + { 23389, true }, + { 23404, true }, + { 23421, false }, + { 23429, true }, + { 23445, true }, + { 23465, true }, + { 23479, true }, + { 23494, true }, + { 23505, true }, + { 23518, true }, + { 23530, true }, + { 23542, true }, + { 23555, true }, + { 23568, false }, + { 23590, true }, + { 23614, true }, + { 23637, true }, + { 23655, true }, + { 23681, true }, + { 23708, true }, + { 23731, true }, + { 23747, true }, + { 23776, true }, + { 23788, true }, + { 23801, true }, + { 23810, true }, + { 23819, true }, + { 23836, true }, + { 23849, true }, + { 23858, true }, + { 23875, true }, + { 23884, true }, + { 23892, true }, + { 23916, true }, + { 23926, true }, + { 23935, true }, + { 23948, true }, + { 23960, true }, + { 23974, true }, + { 23988, true }, + { 24006, true }, + { 24021, true }, + { 24035, true }, + { 24047, true }, + { 24063, true }, + { 24076, true }, + { 24091, true }, + { 24103, true }, + { 24118, true }, + { 24132, true }, + { 24141, true }, + { 24150, true }, + { 24164, true }, + { 24173, true }, + { 24187, true }, + { 24196, true }, + { 24209, true }, + { 24219, true }, + { 24234, true }, + { 24249, true }, + { 24263, true }, + { 24278, true }, + { 24291, true }, + { 24310, true }, + { 24326, true }, + { 24340, true }, + { 24351, true }, + { 24365, true }, + { 24375, true }, + { 24387, true }, + { 24403, true }, + { 24417, true }, + { 24422, true }, + { 24430, true }, + { 24437, true }, + { 24446, true }, + { 24461, false }, + { 24481, true }, + { 24491, true }, + { 24504, true }, + { 24522, true }, + { 24535, true }, + { 24551, true }, + { 24563, true }, + { 24576, true }, + { 24587, true }, + { 24598, true }, + { 24616, true }, + { 24629, true }, + { 24642, true }, + { 24662, true }, + { 24678, true }, + { 24686, true }, + { 24697, false }, + { 24707, true }, + { 24719, true }, + { 24733, true }, + { 24752, true }, + { 24760, true }, + { 24779, true }, + { 24793, false }, + { 24809, true }, + { 24821, false }, + { 24836, true }, + { 24848, false }, + { 24856, false }, + { 24868, true }, + { 24880, true }, + { 24891, true }, + { 24905, true }, + { 24918, true }, + { 24930, true }, + { 24943, true }, + { 24963, true }, + { 24982, true }, + { 24993, true }, + { 25005, true }, + { 25028, true }, + { 25051, true }, + { 25062, true }, + { 25077, true }, + { 25090, true }, + { 25106, true }, + { 25122, true }, + { 25140, false }, + { 25163, true }, + { 25183, true }, + { 25197, true }, + { 25220, true }, + { 25239, true }, + { 25257, true }, + { 25274, true }, + { 25300, true }, + { 25319, true }, + { 25335, true }, + { 25349, true }, + { 25370, true }, + { 25386, true }, + { 25411, true }, + { 25425, true }, + { 25434, true }, + { 25446, true }, + { 25459, true }, + { 25472, true }, + { 25484, true }, + { 25497, true }, + { 25511, true }, + { 25521, true }, + { 25534, true }, + { 25542, true }, + { 25549, true }, + { 25561, true }, + { 25573, true }, + { 25588, true }, + { 25614, true }, + { 25636, true }, + { 25650, true }, + { 25662, true }, + { 25672, true }, + { 25685, true }, + { 25693, true }, + { 25707, true }, + { 25731, true }, + { 25745, true }, + { 25769, true }, + { 25789, true }, + { 25800, true }, + { 25809, true }, + { 25831, true }, + { 25854, true }, + { 25878, true }, + { 25901, false }, + { 25932, false }, + { 25947, true }, + { 25959, true }, + { 25979, true }, + { 25994, true }, + { 26010, true }, + { 26021, true }, + { 26033, true }, + { 26049, true }, + { 26060, true }, + { 26074, true }, + { 26084, true }, + { 26093, false }, + { 26106, true }, + { 26123, true }, + { 26135, true }, + { 26154, true }, + { 26171, true }, + { 26184, true }, + { 26204, true }, + { 26226, true }, + { 26239, true }, + { 26250, true }, + { 26261, true }, + { 26277, true }, + { 26292, true }, + { 26306, true }, + { 26322, true }, + { 26335, true }, + { 26348, true }, + { 26360, true }, + { 26373, true }, + { 26386, true }, + { 26398, true }, + { 26411, true }, + { 26423, true }, + { 26442, true }, + { 26457, true }, + { 26473, true }, + { 26491, true }, { 26502, true }, - { 26513, true }, - { 26521, false }, - { 26544, true }, - { 26559, true }, + { 26510, false }, + { 26533, true }, + { 26548, true }, + { 26561, true }, { 26572, true }, - { 26583, true }, - { 26595, false }, - { 26605, true }, + { 26584, false }, + { 26594, true }, + { 26610, true }, { 26621, true }, - { 26632, true }, + { 26630, true }, { 26641, true }, - { 26652, true }, + { 26651, true }, { 26662, true }, - { 26673, true }, - { 26685, true }, - { 26702, true }, - { 26718, true }, - { 26728, true }, - { 26736, false }, - { 26744, true }, - { 26759, true }, - { 26773, true }, - { 26787, true }, - { 26797, true }, - { 26805, true }, - { 26819, true }, - { 26835, true }, - { 26850, false }, - { 26863, true }, - { 26876, true }, - { 26894, true }, + { 26674, true }, + { 26691, true }, + { 26707, true }, + { 26717, true }, + { 26725, false }, + { 26733, true }, + { 26748, true }, + { 26762, true }, + { 26776, true }, + { 26786, true }, + { 26794, true }, + { 26808, true }, + { 26824, true }, + { 26839, false }, + { 26852, true }, + { 26865, true }, + { 26883, true }, + { 26899, true }, { 26910, true }, - { 26921, true }, - { 26939, true }, - { 26961, false }, - { 26978, true }, - { 26993, true }, - { 27009, true }, - { 27025, true }, - { 27044, true }, - { 27061, true }, - { 27076, true }, - { 27091, true }, - { 27106, true }, - { 27127, true }, - { 27145, true }, - { 27157, true }, - { 27170, true }, - { 27183, true }, - { 27197, false }, - { 27213, true }, - { 27228, true }, - { 27242, true }, + { 26928, true }, + { 26950, false }, + { 26967, true }, + { 26982, true }, + { 26998, true }, + { 27014, true }, + { 27033, true }, + { 27050, true }, + { 27065, true }, + { 27080, true }, + { 27095, true }, + { 27116, true }, + { 27134, true }, + { 27146, true }, + { 27159, true }, + { 27172, true }, + { 27186, false }, + { 27202, true }, + { 27217, true }, + { 27231, true }, + { 27244, true }, { 27255, true }, - { 27266, true }, - { 27276, true }, - { 27293, true }, - { 27309, true }, - { 27325, true }, - { 27340, true }, - { 27352, true }, - { 27363, false }, - { 27371, true }, - { 27392, true }, - { 27400, true }, - { 27413, true }, - { 27421, true }, - { 27429, true }, - { 27447, true }, - { 27461, true }, - { 27475, true }, - { 27483, true }, - { 27497, true }, - { 27517, true }, - { 27525, true }, - { 27534, false }, - { 27554, true }, + { 27265, true }, + { 27282, true }, + { 27298, true }, + { 27314, true }, + { 27329, true }, + { 27341, true }, + { 27352, false }, + { 27360, true }, + { 27381, true }, + { 27389, true }, + { 27402, true }, + { 27410, true }, + { 27418, true }, + { 27436, true }, + { 27450, true }, + { 27464, true }, + { 27472, true }, + { 27486, true }, + { 27506, true }, + { 27514, true }, + { 27523, false }, + { 27543, true }, + { 27561, true }, { 27572, true }, - { 27583, true }, - { 27601, true }, - { 27619, true }, - { 27631, true }, - { 27643, true }, - { 27657, true }, - { 27670, true }, - { 27687, true }, - { 27700, true }, - { 27714, true }, - { 27727, true }, - { 27741, true }, - { 27751, true }, - { 27768, true }, - { 27788, true }, - { 27797, true }, - { 27814, true }, - { 27834, true }, - { 27852, true }, - { 27866, true }, - { 27884, true }, - { 27899, true }, - { 27912, true }, - { 27926, true }, - { 27941, true }, - { 27961, false }, - { 27971, true }, - { 27988, true }, + { 27590, true }, + { 27608, true }, + { 27620, true }, + { 27632, true }, + { 27646, true }, + { 27659, true }, + { 27676, true }, + { 27689, true }, + { 27703, true }, + { 27716, true }, + { 27730, true }, + { 27740, true }, + { 27757, true }, + { 27777, true }, + { 27786, true }, + { 27803, true }, + { 27823, true }, + { 27841, true }, + { 27855, true }, + { 27873, true }, + { 27888, true }, + { 27901, true }, + { 27915, true }, + { 27930, true }, + { 27950, false }, + { 27960, true }, + { 27977, true }, + { 27987, true }, { 27998, true }, - { 28009, true }, - { 28024, true }, - { 28032, true }, - { 28053, true }, - { 28074, true }, - { 28095, false }, - { 28111, true }, - { 28124, true }, - { 28139, true }, - { 28151, false }, - { 28172, true }, - { 28192, true }, - { 28206, true }, - { 28224, true }, - { 28244, true }, - { 28257, true }, - { 28271, true }, - { 28287, true }, + { 28013, true }, + { 28021, true }, + { 28042, true }, + { 28063, true }, + { 28084, false }, + { 28100, true }, + { 28113, true }, + { 28128, true }, + { 28140, false }, + { 28161, true }, + { 28181, true }, + { 28195, true }, + { 28213, true }, + { 28233, true }, + { 28246, true }, + { 28260, true }, + { 28276, true }, + { 28294, true }, { 28305, true }, - { 28316, true }, - { 28329, true }, - { 28341, true }, - { 28355, true }, - { 28370, true }, - { 28389, false }, - { 28411, true }, - { 28419, true }, - { 28434, true }, - { 28451, true }, - { 28465, true }, - { 28482, true }, + { 28318, true }, + { 28330, true }, + { 28344, true }, + { 28359, true }, + { 28378, false }, + { 28400, true }, + { 28408, true }, + { 28423, true }, + { 28440, true }, + { 28454, true }, + { 28471, true }, + { 28489, true }, { 28500, true }, - { 28511, true }, - { 28535, true }, - { 28551, true }, - { 28567, true }, - { 28582, true }, - { 28591, true }, - { 28606, true }, - { 28619, false }, - { 28629, true }, - { 28648, true }, - { 28662, true }, - { 28682, true }, - { 28691, true }, - { 28709, false }, - { 28731, true }, - { 28740, true }, - { 28759, false }, - { 28775, false }, - { 28789, true }, - { 28805, true }, - { 28820, true }, - { 28838, true }, - { 28860, true }, - { 28878, true }, - { 28902, true }, - { 28919, true }, - { 28934, true }, - { 28951, false }, - { 28967, true }, - { 28981, true }, - { 28995, true }, - { 29014, true }, - { 29031, true }, - { 29046, true }, - { 29073, true }, - { 29095, true }, - { 29118, true }, - { 29138, true }, - { 29156, true }, - { 29178, true }, - { 29197, true }, - { 29217, true }, - { 29240, true }, - { 29257, true }, - { 29271, true }, - { 29308, false }, - { 29319, true }, - { 29337, true }, - { 29357, true }, - { 29380, true }, - { 29405, false }, - { 29436, true }, - { 29450, true }, + { 28524, true }, + { 28540, true }, + { 28556, true }, + { 28571, true }, + { 28580, true }, + { 28595, true }, + { 28608, false }, + { 28618, true }, + { 28637, true }, + { 28651, true }, + { 28671, true }, + { 28680, true }, + { 28698, false }, + { 28720, true }, + { 28729, true }, + { 28748, false }, + { 28764, false }, + { 28778, true }, + { 28794, true }, + { 28809, true }, + { 28827, true }, + { 28849, true }, + { 28867, true }, + { 28891, true }, + { 28908, true }, + { 28923, true }, + { 28940, false }, + { 28956, true }, + { 28970, true }, + { 28984, true }, + { 29003, true }, + { 29020, true }, + { 29035, true }, + { 29062, true }, + { 29084, true }, + { 29107, true }, + { 29127, true }, + { 29145, true }, + { 29167, true }, + { 29186, true }, + { 29206, true }, + { 29229, true }, + { 29246, true }, + { 29260, true }, + { 29297, false }, + { 29308, true }, + { 29326, true }, + { 29346, true }, + { 29369, true }, + { 29394, false }, + { 29425, true }, + { 29439, true }, + { 29448, true }, { 29459, true }, - { 29470, true }, - { 29482, true }, - { 29494, true }, - { 29503, true }, - { 29515, true }, - { 29532, false }, - { 29540, true }, - { 29551, true }, - { 29570, true }, - { 29582, false }, - { 29600, true }, - { 29610, true }, - { 29623, true }, - { 29632, false }, - { 29645, true }, - { 29658, true }, - { 29675, true }, - { 29691, true }, - { 29702, true }, - { 29716, true }, - { 29728, true }, - { 29743, true }, - { 29751, true }, - { 29765, true }, - { 29777, true }, - { 29789, true }, - { 29801, true }, - { 29811, true }, - { 29822, true }, - { 29833, true }, - { 29847, true }, - { 29870, true }, - { 29886, true }, - { 29894, true }, - { 29909, true }, - { 29928, true }, - { 29944, true }, - { 29954, true }, - { 29973, true }, - { 29986, true }, - { 29994, true }, - { 30009, true }, + { 29471, true }, + { 29483, true }, + { 29492, true }, + { 29504, true }, + { 29521, true }, + { 29539, false }, + { 29547, true }, + { 29558, true }, + { 29577, true }, + { 29589, false }, + { 29607, true }, + { 29617, true }, + { 29630, true }, + { 29639, false }, + { 29652, true }, + { 29665, true }, + { 29682, true }, + { 29698, true }, + { 29709, true }, + { 29723, true }, + { 29735, true }, + { 29750, true }, + { 29758, true }, + { 29772, true }, + { 29784, true }, + { 29796, true }, + { 29808, true }, + { 29818, true }, + { 29829, true }, + { 29840, true }, + { 29854, true }, + { 29877, true }, + { 29893, true }, + { 29901, true }, + { 29916, true }, + { 29935, true }, + { 29951, true }, + { 29961, true }, + { 29980, true }, + { 29993, true }, + { 30001, true }, + { 30013, true }, { 30021, true }, - { 30029, true }, - { 30035, true }, - { 30048, true }, - { 30057, true }, - { 30071, true }, - { 30085, true }, - { 30098, false }, - { 30118, true }, - { 30134, true }, - { 30146, true }, - { 30162, true }, - { 30175, true }, - { 30195, true }, - { 30209, true }, - { 30225, true }, - { 30239, true }, - { 30259, true }, - { 30273, true }, - { 30296, true }, - { 30311, true }, - { 30325, true }, - { 30338, true }, - { 30347, true }, - { 30357, false }, - { 30367, true }, - { 30383, true }, - { 30405, true }, - { 30437, true }, - { 30453, true }, - { 30474, true }, - { 30494, true }, - { 30507, true }, - { 30524, true }, - { 30544, true }, - { 30563, true }, - { 30582, true }, - { 30597, true }, - { 30610, true }, - { 30625, true }, - { 30641, true }, - { 30653, true }, + { 30027, true }, + { 30040, true }, + { 30049, true }, + { 30063, true }, + { 30077, true }, + { 30090, false }, + { 30110, true }, + { 30126, true }, + { 30138, true }, + { 30154, true }, + { 30167, true }, + { 30187, true }, + { 30201, true }, + { 30217, true }, + { 30231, true }, + { 30251, true }, + { 30265, true }, + { 30288, true }, + { 30303, true }, + { 30317, true }, + { 30330, true }, + { 30339, true }, + { 30349, false }, + { 30359, true }, + { 30375, true }, + { 30397, true }, + { 30429, true }, + { 30445, true }, + { 30466, true }, + { 30486, true }, + { 30499, true }, + { 30516, true }, + { 30536, true }, + { 30555, true }, + { 30574, true }, + { 30587, true }, + { 30602, true }, + { 30618, true }, + { 30630, true }, + { 30645, true }, { 30668, true }, - { 30691, true }, - { 30707, true }, - { 30719, false }, - { 30740, true }, + { 30684, true }, + { 30696, false }, + { 30717, true }, + { 30725, true }, + { 30734, true }, { 30748, true }, { 30757, true }, - { 30771, true }, - { 30780, true }, - { 30792, true }, - { 30808, true }, - { 30825, false }, + { 30769, true }, + { 30785, true }, + { 30802, false }, + { 30812, true }, + { 30823, true }, { 30835, true }, - { 30846, true }, - { 30858, true }, - { 30871, true }, - { 30889, true }, - { 30906, true }, - { 30923, false }, - { 30933, true }, - { 30951, true }, - { 30965, true }, - { 30987, true }, - { 31000, true }, - { 31015, true }, - { 31036, true }, - { 31058, true }, - { 31074, true }, - { 31089, true }, - { 31103, true }, - { 31129, true }, - { 31154, true }, - { 31174, true }, - { 31188, true }, - { 31203, true }, - { 31216, true }, - { 31228, true }, - { 31238, true }, - { 31253, true }, - { 31263, true }, - { 31277, true }, - { 31288, true }, - { 31299, true }, - { 31314, true }, - { 31326, true }, - { 31340, true }, - { 31353, true }, - { 31369, true }, - { 31387, true }, - { 31397, true }, - { 31407, true }, - { 31427, true }, + { 30848, true }, + { 30866, true }, + { 30883, true }, + { 30900, false }, + { 30910, true }, + { 30928, true }, + { 30942, true }, + { 30964, true }, + { 30977, true }, + { 30992, true }, + { 31013, true }, + { 31035, true }, + { 31051, true }, + { 31066, true }, + { 31080, true }, + { 31106, true }, + { 31131, true }, + { 31151, true }, + { 31165, true }, + { 31180, true }, + { 31193, true }, + { 31205, true }, + { 31215, true }, + { 31230, true }, + { 31240, true }, + { 31254, true }, + { 31265, true }, + { 31276, true }, + { 31291, true }, + { 31303, true }, + { 31317, true }, + { 31330, true }, + { 31346, true }, + { 31364, true }, + { 31374, true }, + { 31384, true }, + { 31404, true }, + { 31413, true }, + { 31425, true }, { 31436, true }, - { 31448, true }, - { 31459, true }, - { 31468, true }, - { 31484, true }, - { 31499, true }, - { 31509, false }, - { 31529, true }, - { 31553, true }, - { 31574, true }, - { 31582, true }, - { 31592, true }, - { 31606, false }, - { 31616, true }, - { 31634, false }, - { 31648, true }, - { 31667, true }, - { 31684, true }, - { 31698, false }, - { 31716, true }, - { 31724, true }, - { 31740, true }, - { 31751, true }, - { 31764, true }, - { 31779, true }, - { 31799, false }, - { 31814, true }, - { 31826, true }, - { 31839, true }, - { 31851, true }, - { 31864, true }, - { 31876, true }, - { 31891, true }, + { 31445, true }, + { 31461, true }, + { 31476, true }, + { 31486, false }, + { 31506, true }, + { 31530, true }, + { 31551, true }, + { 31559, true }, + { 31569, true }, + { 31583, false }, + { 31593, true }, + { 31611, false }, + { 31625, true }, + { 31644, true }, + { 31661, true }, + { 31675, false }, + { 31693, true }, + { 31701, true }, + { 31717, true }, + { 31728, true }, + { 31741, true }, + { 31756, true }, + { 31776, false }, + { 31791, true }, + { 31803, true }, + { 31816, true }, + { 31828, true }, + { 31841, true }, + { 31853, true }, + { 31868, true }, + { 31881, false }, { 31904, false }, - { 31927, false }, - { 31951, true }, - { 31968, true }, + { 31928, true }, + { 31945, true }, + { 31958, true }, + { 31969, true }, { 31981, true }, - { 31992, true }, - { 32004, true }, - { 32018, true }, - { 32029, true }, - { 32048, true }, - { 32065, true }, - { 32087, true }, - { 32101, true }, - { 32120, true }, - { 32130, true }, - { 32144, true }, - { 32165, true }, - { 32180, true }, - { 32194, true }, - { 32205, true }, - { 32219, true }, - { 32232, true }, - { 32245, true }, - { 32265, true }, - { 32273, true }, - { 32285, false }, - { 32297, true }, - { 32308, true }, - { 32325, true }, - { 32347, true }, - { 32359, true }, - { 32371, true }, - { 32389, true }, - { 32403, true }, - { 32418, true }, - { 32437, true }, - { 32452, true }, - { 32466, true }, - { 32478, true }, - { 32494, true }, - { 32515, true }, - { 32534, true }, - { 32551, true }, - { 32578, false }, - { 32597, true }, - { 32611, true }, - { 32631, true }, - { 32651, true }, - { 32664, true }, - { 32685, true }, - { 32706, true }, - { 32719, true }, - { 32726, true }, - { 32738, true }, - { 32760, true }, - { 32776, true }, - { 32791, true }, - { 32804, true }, - { 32824, true }, - { 32839, true }, - { 32849, true }, - { 32861, true }, - { 32873, true }, - { 32891, true }, - { 32910, true }, - { 32925, true }, - { 32946, false }, - { 32967, true }, - { 32987, true }, + { 31995, true }, + { 32006, true }, + { 32025, true }, + { 32042, true }, + { 32064, true }, + { 32078, true }, + { 32097, true }, + { 32107, true }, + { 32121, true }, + { 32142, true }, + { 32157, true }, + { 32171, true }, + { 32182, true }, + { 32196, true }, + { 32209, true }, + { 32222, true }, + { 32242, true }, + { 32250, true }, + { 32262, false }, + { 32274, true }, + { 32285, true }, + { 32302, true }, + { 32324, true }, + { 32336, true }, + { 32348, true }, + { 32366, true }, + { 32380, true }, + { 32395, true }, + { 32414, true }, + { 32429, true }, + { 32443, true }, + { 32455, true }, + { 32471, true }, + { 32492, true }, + { 32511, true }, + { 32528, true }, + { 32555, false }, + { 32574, true }, + { 32588, true }, + { 32608, true }, + { 32628, true }, + { 32641, true }, + { 32662, true }, + { 32683, true }, + { 32696, true }, + { 32703, true }, + { 32715, true }, + { 32737, true }, + { 32753, true }, + { 32768, true }, + { 32781, true }, + { 32801, true }, + { 32816, true }, + { 32826, true }, + { 32838, true }, + { 32850, true }, + { 32868, true }, + { 32887, true }, + { 32902, true }, + { 32923, false }, + { 32944, true }, + { 32964, true }, + { 32996, true }, + { 33006, true }, { 33019, true }, - { 33029, true }, - { 33042, true }, - { 33061, true }, - { 33078, false }, - { 33102, false }, - { 33124, true }, - { 33148, true }, - { 33178, true }, - { 33202, true }, - { 33219, true }, - { 33237, true }, - { 33252, true }, - { 33269, true }, - { 33283, true }, - { 33305, true }, - { 33330, true }, - { 33343, true }, - { 33362, true }, - { 33377, true }, - { 33401, true }, - { 33422, true }, - { 33436, true }, - { 33451, true }, - { 33467, true }, - { 33484, true }, - { 33502, true }, - { 33526, false }, - { 33548, true }, + { 33038, true }, + { 33055, false }, + { 33079, false }, + { 33101, true }, + { 33125, true }, + { 33155, true }, + { 33179, true }, + { 33196, true }, + { 33214, true }, + { 33229, true }, + { 33246, true }, + { 33260, true }, + { 33282, true }, + { 33307, true }, + { 33320, true }, + { 33339, true }, + { 33354, true }, + { 33378, true }, + { 33399, true }, + { 33413, true }, + { 33428, true }, + { 33444, true }, + { 33461, true }, + { 33479, true }, + { 33503, false }, + { 33525, true }, + { 33538, true }, + { 33549, true }, { 33561, true }, - { 33572, true }, - { 33584, true }, - { 33599, false }, - { 33610, true }, - { 33638, true }, + { 33576, false }, + { 33587, true }, + { 33615, true }, + { 33630, true }, { 33653, true }, - { 33676, true }, - { 33689, true }, - { 33700, true }, - { 33713, true }, - { 33731, true }, - { 33753, true }, + { 33666, true }, + { 33677, true }, + { 33690, true }, + { 33708, true }, + { 33730, true }, + { 33755, true }, { 33778, true }, - { 33801, true }, - { 33815, true }, - { 33831, true }, - { 33844, true }, + { 33792, true }, + { 33808, true }, + { 33821, true }, + { 33839, true }, + { 33849, true }, { 33862, true }, - { 33872, true }, - { 33885, true }, - { 33906, true }, - { 33921, true }, - { 33945, true }, - { 33959, true }, - { 33984, true }, + { 33883, true }, + { 33898, true }, + { 33922, true }, + { 33936, true }, + { 33961, true }, + { 33976, true }, { 33999, true }, - { 34022, true }, - { 34031, true }, - { 34052, true }, - { 34069, true }, - { 34080, true }, - { 34093, true }, - { 34106, false }, - { 34145, true }, - { 34158, true }, - { 34174, true }, - { 34188, false }, + { 34008, true }, + { 34029, true }, + { 34046, true }, + { 34057, true }, + { 34070, false }, + { 34109, true }, + { 34122, true }, + { 34138, true }, + { 34152, false }, + { 34167, true }, + { 34187, false }, { 34203, true }, - { 34223, false }, - { 34239, true }, - { 34258, true }, + { 34222, true }, + { 34233, true }, + { 34246, true }, { 34269, true }, - { 34282, true }, - { 34305, true }, - { 34317, true }, - { 34326, true }, - { 34336, true }, - { 34350, true }, - { 34365, true }, - { 34379, true }, - { 34390, true }, - { 34406, true }, - { 34423, true }, - { 34435, true }, - { 34458, true }, - { 34483, true }, - { 34503, true }, - { 34522, true }, - { 34535, true }, + { 34281, true }, + { 34290, true }, + { 34300, true }, + { 34314, true }, + { 34329, true }, + { 34343, true }, + { 34354, true }, + { 34370, true }, + { 34387, true }, + { 34399, true }, + { 34422, true }, + { 34447, true }, + { 34467, true }, + { 34486, true }, + { 34499, true }, + { 34521, true }, + { 34533, true }, { 34557, true }, - { 34569, true }, + { 34580, true }, { 34593, true }, { 34616, true }, - { 34629, true }, - { 34652, true }, - { 34671, true }, - { 34682, true }, - { 34696, true }, - { 34708, true }, - { 34726, true }, - { 34742, true }, - { 34760, true }, - { 34777, true }, - { 34790, true }, + { 34635, true }, + { 34646, true }, + { 34660, true }, + { 34672, true }, + { 34690, true }, + { 34706, true }, + { 34724, true }, + { 34741, true }, + { 34754, true }, + { 34765, true }, + { 34783, true }, { 34801, true }, - { 34819, true }, - { 34837, true }, - { 34860, true }, - { 34877, false }, - { 34892, true }, - { 34904, true }, - { 34916, true }, - { 34929, true }, - { 34938, true }, - { 34953, true }, - { 34972, true }, - { 34986, true }, - { 35001, true }, - { 35013, true }, - { 35025, true }, - { 35039, false }, - { 35056, true }, - { 35067, true }, - { 35080, true }, - { 35099, true }, - { 35112, true }, - { 35130, true }, - { 35156, true }, - { 35169, true }, - { 35188, true }, - { 35203, true }, - { 35217, true }, - { 35234, true }, - { 35251, true }, - { 35267, true }, - { 35286, true }, + { 34824, true }, + { 34841, false }, + { 34856, true }, + { 34868, true }, + { 34880, true }, + { 34893, true }, + { 34902, true }, + { 34917, true }, + { 34936, true }, + { 34950, true }, + { 34965, true }, + { 34977, true }, + { 34989, true }, + { 35003, false }, + { 35020, true }, + { 35031, true }, + { 35044, true }, + { 35063, true }, + { 35076, true }, + { 35094, true }, + { 35120, true }, + { 35133, true }, + { 35152, true }, + { 35167, true }, + { 35181, true }, + { 35198, true }, + { 35215, true }, + { 35231, true }, + { 35250, true }, + { 35269, true }, + { 35289, true }, { 35305, true }, - { 35325, true }, - { 35341, true }, - { 35357, true }, - { 35371, false }, - { 35381, true }, - { 35389, true }, - { 35415, true }, - { 35432, true }, - { 35453, true }, - { 35471, true }, - { 35487, false }, - { 35506, true }, - { 35515, true }, - { 35529, true }, - { 35544, true }, - { 35561, true }, - { 35572, true }, - { 35591, true }, - { 35604, true }, - { 35619, true }, - { 35635, true }, - { 35657, true }, - { 35671, false }, - { 35685, true }, - { 35700, true }, - { 35712, true }, - { 35724, true }, - { 35747, true }, - { 35766, true }, - { 35782, true }, - { 35797, true }, - { 35807, true }, - { 35814, false }, - { 35827, true }, - { 35838, true }, - { 35855, true }, - { 35869, true }, - { 35878, true }, - { 35886, true }, - { 35905, false }, - { 35916, true }, - { 35932, false }, - { 35942, false }, - { 35958, true }, - { 35971, true }, - { 35985, true }, - { 36000, true }, - { 36016, true }, - { 36038, true }, - { 36052, true }, - { 36065, true }, - { 36079, true }, - { 36093, true }, - { 36108, true }, - { 36123, true }, - { 36142, true }, - { 36167, true }, - { 36187, true }, - { 36203, true }, - { 36218, true }, - { 36231, true }, - { 36243, true }, - { 36258, true }, - { 36274, true }, - { 36282, false }, - { 36294, true }, - { 36305, true }, - { 36314, true }, - { 36331, true }, - { 36347, true }, - { 36360, true }, - { 36377, true }, - { 36385, true }, - { 36396, true }, - { 36405, true }, + { 35321, true }, + { 35335, false }, + { 35345, true }, + { 35353, true }, + { 35379, true }, + { 35396, true }, + { 35417, true }, + { 35435, true }, + { 35451, false }, + { 35470, true }, + { 35479, true }, + { 35493, true }, + { 35508, true }, + { 35525, true }, + { 35536, true }, + { 35555, true }, + { 35568, true }, + { 35583, true }, + { 35599, true }, + { 35621, true }, + { 35635, false }, + { 35649, true }, + { 35664, true }, + { 35676, true }, + { 35688, true }, + { 35711, true }, + { 35730, true }, + { 35746, true }, + { 35761, true }, + { 35771, true }, + { 35778, true }, + { 35789, true }, + { 35806, true }, + { 35820, true }, + { 35829, true }, + { 35837, true }, + { 35851, true }, + { 35870, false }, + { 35881, true }, + { 35897, false }, + { 35907, false }, + { 35923, true }, + { 35936, true }, + { 35950, true }, + { 35965, true }, + { 35981, true }, + { 36003, true }, + { 36017, true }, + { 36030, true }, + { 36044, true }, + { 36058, true }, + { 36073, true }, + { 36088, true }, + { 36107, true }, + { 36132, true }, + { 36152, true }, + { 36168, true }, + { 36183, true }, + { 36196, true }, + { 36208, true }, + { 36223, true }, + { 36239, true }, + { 36247, false }, + { 36259, true }, + { 36270, true }, + { 36279, true }, + { 36296, true }, + { 36312, true }, + { 36325, true }, + { 36342, true }, + { 36350, true }, + { 36361, true }, + { 36370, true }, + { 36381, true }, + { 36395, true }, + { 36408, true }, { 36416, true }, - { 36430, true }, + { 36434, true }, { 36443, true }, - { 36451, true }, - { 36469, true }, - { 36478, true }, + { 36452, true }, + { 36460, true }, + { 36468, true }, { 36487, true }, - { 36495, true }, - { 36503, true }, - { 36522, true }, - { 36541, true }, - { 36550, true }, - { 36570, true }, - { 36593, true }, - { 36603, true }, - { 36613, true }, - { 36631, true }, - { 36651, true }, - { 36665, true }, - { 36681, true }, - { 36691, true }, - { 36702, true }, + { 36506, true }, + { 36515, true }, + { 36535, true }, + { 36558, true }, + { 36568, true }, + { 36578, true }, + { 36596, true }, + { 36616, true }, + { 36630, true }, + { 36646, true }, + { 36656, true }, + { 36667, true }, + { 36677, true }, + { 36694, true }, { 36712, true }, - { 36729, true }, - { 36747, true }, - { 36762, true }, - { 36773, true }, - { 36780, true }, - { 36791, true }, - { 36802, true }, - { 36810, true }, - { 36830, true }, - { 36851, true }, - { 36870, true }, - { 36885, true }, - { 36907, true }, - { 36919, false }, - { 36941, true }, - { 36960, true }, - { 36975, true }, + { 36727, true }, + { 36738, true }, + { 36745, true }, + { 36756, true }, + { 36767, true }, + { 36775, true }, + { 36795, true }, + { 36816, true }, + { 36835, true }, + { 36850, true }, + { 36872, true }, + { 36884, false }, + { 36906, true }, + { 36925, true }, + { 36940, true }, + { 36959, true }, + { 36971, true }, + { 36985, true }, { 36994, true }, { 37006, true }, - { 37020, true }, - { 37029, true }, - { 37041, true }, - { 37051, true }, - { 37060, true }, - { 37069, true }, - { 37078, true }, - { 37087, true }, - { 37097, true }, - { 37107, true }, - { 37116, true }, - { 37125, true }, - { 37143, true }, - { 37159, true }, - { 37167, true }, - { 37174, true }, - { 37187, true }, - { 37204, true }, - { 37218, true }, - { 37229, true }, - { 37246, true }, - { 37266, true }, - { 37285, true }, - { 37299, true }, - { 37317, true }, - { 37330, true }, - { 37347, true }, - { 37361, true }, - { 37387, true }, - { 37402, true }, - { 37416, true }, - { 37427, true }, - { 37440, true }, - { 37450, true }, - { 37461, true }, - { 37480, true }, - { 37495, true }, - { 37510, true }, - { 37537, true }, - { 37547, true }, - { 37559, true }, - { 37571, true }, - { 37579, true }, - { 37590, true }, - { 37599, true }, - { 37607, true }, - { 37618, true }, - { 37645, true }, + { 37016, true }, + { 37025, true }, + { 37034, true }, + { 37043, true }, + { 37052, true }, + { 37062, true }, + { 37072, true }, + { 37081, true }, + { 37090, true }, + { 37108, true }, + { 37124, true }, + { 37132, true }, + { 37139, true }, + { 37152, true }, + { 37169, true }, + { 37183, true }, + { 37194, true }, + { 37211, true }, + { 37231, true }, + { 37250, true }, + { 37264, true }, + { 37282, true }, + { 37295, true }, + { 37312, true }, + { 37326, true }, + { 37352, true }, + { 37367, true }, + { 37381, true }, + { 37392, true }, + { 37405, true }, + { 37415, true }, + { 37426, true }, + { 37445, true }, + { 37460, true }, + { 37475, true }, + { 37502, true }, + { 37512, true }, + { 37524, true }, + { 37536, true }, + { 37544, true }, + { 37555, true }, + { 37564, true }, + { 37572, true }, + { 37583, true }, + { 37610, true }, + { 37620, true }, + { 37631, true }, + { 37641, true }, { 37655, true }, - { 37666, true }, - { 37676, true }, - { 37690, true }, - { 37704, true }, - { 37715, true }, - { 37722, true }, - { 37730, true }, - { 37738, true }, - { 37754, true }, + { 37669, true }, + { 37680, true }, + { 37687, true }, + { 37695, true }, + { 37703, true }, + { 37719, true }, + { 37733, true }, + { 37747, true }, + { 37756, true }, { 37768, true }, + { 37775, true }, { 37782, true }, - { 37791, true }, - { 37803, true }, + { 37798, true }, { 37810, true }, - { 37817, true }, - { 37833, true }, - { 37845, true }, - { 37859, true }, - { 37881, true }, - { 37899, true }, - { 37910, true }, - { 37921, true }, - { 37932, true }, - { 37948, true }, - { 37965, true }, - { 37991, false }, - { 38014, true }, - { 38030, true }, - { 38040, true }, - { 38053, true }, - { 38064, true }, - { 38079, true }, - { 38097, false }, - { 38109, true }, - { 38123, true }, + { 37824, true }, + { 37846, true }, + { 37864, true }, + { 37875, true }, + { 37886, true }, + { 37897, true }, + { 37913, true }, + { 37930, true }, + { 37956, false }, + { 37979, true }, + { 37995, true }, + { 38005, true }, + { 38018, true }, + { 38029, true }, + { 38044, true }, + { 38062, false }, + { 38074, true }, + { 38088, true }, + { 38102, true }, + { 38119, true }, { 38137, true }, - { 38154, true }, - { 38172, true }, - { 38185, true }, - { 38204, true }, - { 38214, true }, - { 38227, true }, - { 38243, true }, - { 38252, true }, - { 38270, true }, - { 38284, true }, - { 38302, true }, - { 38317, true }, - { 38332, true }, - { 38353, true }, - { 38374, true }, + { 38150, true }, + { 38169, true }, + { 38179, true }, + { 38192, true }, + { 38208, true }, + { 38217, true }, + { 38235, true }, + { 38249, true }, + { 38267, true }, + { 38282, true }, + { 38297, true }, + { 38318, true }, + { 38334, true }, + { 38355, true }, + { 38371, true }, { 38390, true }, - { 38409, true }, - { 38430, true }, - { 38450, true }, - { 38470, true }, - { 38490, true }, - { 38506, true }, + { 38411, true }, + { 38431, true }, + { 38451, true }, + { 38471, true }, + { 38487, true }, + { 38504, true }, { 38523, true }, - { 38542, true }, - { 38560, true }, - { 38580, true }, - { 38596, true }, - { 38607, false }, - { 38617, true }, - { 38626, true }, - { 38644, true }, - { 38658, true }, - { 38676, true }, - { 38689, true }, - { 38704, true }, - { 38719, true }, - { 38727, true }, - { 38761, true }, - { 38772, false }, - { 38786, true }, - { 38804, true }, - { 38822, true }, - { 38833, true }, - { 38847, true }, - { 38862, true }, - { 38879, true }, - { 38894, true }, - { 38906, true }, - { 38935, true }, - { 38968, true }, - { 38980, true }, + { 38541, true }, + { 38561, true }, + { 38577, true }, + { 38588, false }, + { 38598, true }, + { 38607, true }, + { 38625, true }, + { 38639, true }, + { 38657, true }, + { 38670, true }, + { 38685, true }, + { 38700, true }, + { 38708, true }, + { 38742, true }, + { 38753, false }, + { 38767, true }, + { 38785, true }, + { 38803, true }, + { 38814, true }, + { 38828, true }, + { 38843, true }, + { 38860, true }, + { 38875, true }, + { 38904, true }, + { 38937, true }, + { 38949, true }, + { 38961, true }, + { 38975, true }, { 38992, true }, - { 39006, true }, - { 39023, true }, - { 39035, true }, - { 39050, false }, - { 39062, true }, - { 39071, true }, - { 39087, true }, - { 39099, true }, - { 39116, true }, - { 39131, false }, - { 39145, true }, - { 39165, false }, - { 39179, true }, - { 39190, true }, - { 39203, true }, - { 39213, false }, - { 39229, true }, - { 39243, true }, - { 39257, true }, - { 39271, true }, - { 39282, true }, - { 39298, true }, - { 39309, true }, - { 39326, true }, - { 39352, true }, + { 39004, true }, + { 39019, false }, + { 39031, true }, + { 39040, true }, + { 39056, true }, + { 39068, true }, + { 39085, true }, + { 39100, false }, + { 39114, true }, + { 39134, false }, + { 39148, true }, + { 39159, true }, + { 39172, true }, + { 39182, false }, + { 39198, true }, + { 39212, true }, + { 39226, true }, + { 39240, true }, + { 39251, true }, + { 39267, true }, + { 39278, true }, + { 39295, true }, + { 39321, true }, + { 39341, true }, + { 39355, true }, { 39372, true }, { 39386, true }, - { 39403, true }, - { 39417, true }, - { 39431, false }, - { 39449, false }, - { 39466, true }, - { 39477, true }, - { 39492, true }, - { 39504, true }, - { 39519, true }, - { 39541, true }, - { 39559, true }, - { 39575, true }, - { 39589, true }, + { 39400, false }, + { 39418, false }, + { 39435, true }, + { 39446, true }, + { 39461, true }, + { 39473, true }, + { 39488, true }, + { 39510, true }, + { 39528, true }, + { 39544, true }, + { 39558, true }, + { 39574, true }, + { 39592, true }, { 39605, true }, - { 39623, true }, - { 39636, true }, - { 39653, true }, - { 39666, true }, + { 39622, true }, + { 39635, true }, + { 39650, true }, + { 39665, true }, { 39681, true }, - { 39696, true }, - { 39712, true }, - { 39731, true }, - { 39752, true }, - { 39767, true }, - { 39779, true }, - { 39792, true }, + { 39700, true }, + { 39721, true }, + { 39736, true }, + { 39748, true }, + { 39761, true }, + { 39787, true }, + { 39807, true }, { 39818, true }, - { 39838, true }, - { 39849, true }, - { 39867, true }, - { 39886, true }, - { 39900, true }, - { 39909, true }, - { 39926, true }, - { 39937, true }, + { 39836, true }, + { 39855, true }, + { 39869, true }, + { 39878, true }, + { 39895, true }, + { 39906, true }, + { 39918, true }, + { 39928, true }, { 39949, true }, - { 39959, true }, - { 39980, true }, - { 39992, true }, - { 40000, true }, - { 40008, true }, - { 40019, true }, - { 40035, true }, - { 40045, true }, - { 40054, true }, - { 40067, true }, - { 40082, true }, - { 40099, true }, - { 40121, true }, - { 40142, true }, + { 39961, true }, + { 39969, true }, + { 39977, true }, + { 39988, true }, + { 40004, true }, + { 40014, true }, + { 40023, true }, + { 40036, true }, + { 40051, true }, + { 40068, true }, + { 40090, true }, + { 40111, true }, + { 40124, true }, + { 40135, false }, { 40155, true }, - { 40166, false }, - { 40186, true }, - { 40201, true }, - { 40214, true }, - { 40226, true }, - { 40247, true }, + { 40170, true }, + { 40183, true }, + { 40195, true }, + { 40216, true }, + { 40230, true }, + { 40244, true }, { 40261, true }, - { 40275, true }, - { 40292, true }, - { 40307, true }, - { 40321, true }, - { 40335, true }, - { 40349, true }, - { 40363, true }, - { 40377, true }, - { 40392, true }, - { 40404, true }, - { 40418, true }, - { 40433, true }, - { 40443, true }, - { 40459, true }, - { 40480, true }, - { 40495, true }, - { 40508, true }, - { 40523, true }, - { 40535, true }, - { 40550, true }, - { 40567, true }, - { 40584, true }, - { 40596, true }, + { 40276, true }, + { 40290, true }, + { 40304, true }, + { 40318, true }, + { 40332, true }, + { 40346, true }, + { 40361, true }, + { 40373, true }, + { 40387, true }, + { 40402, true }, + { 40412, true }, + { 40428, true }, + { 40449, true }, + { 40464, true }, + { 40477, true }, + { 40492, true }, + { 40504, true }, + { 40519, true }, + { 40536, true }, + { 40553, true }, + { 40565, true }, + { 40574, true }, + { 40594, true }, { 40605, true }, - { 40625, true }, + { 40620, true }, { 40636, true }, - { 40651, true }, - { 40667, true }, - { 40674, true }, - { 40697, true }, - { 40711, true }, - { 40726, true }, - { 40741, true }, - { 40756, true }, - { 40767, true }, - { 40777, true }, - { 40788, true }, - { 40799, true }, - { 40810, true }, - { 40823, true }, - { 40836, true }, - { 40848, true }, - { 40876, true }, - { 40888, true }, - { 40902, true }, - { 40918, true }, + { 40643, true }, + { 40666, true }, + { 40680, true }, + { 40695, true }, + { 40710, true }, + { 40725, true }, + { 40736, true }, + { 40746, true }, + { 40757, true }, + { 40768, true }, + { 40779, true }, + { 40792, true }, + { 40805, true }, + { 40817, true }, + { 40845, true }, + { 40857, true }, + { 40871, true }, + { 40887, true }, + { 40906, true }, + { 40917, true }, { 40937, true }, - { 40948, true }, - { 40968, true }, - { 40989, true }, - { 41004, true }, - { 41018, true }, - { 41028, true }, - { 41047, true }, - { 41064, true }, - { 41077, true }, - { 41091, false }, - { 41104, true }, - { 41116, true }, - { 41129, true }, - { 41141, true }, - { 41154, true }, - { 41167, true }, - { 41178, true }, - { 41196, true }, - { 41214, true }, - { 41226, true }, - { 41240, true }, - { 41254, true }, - { 41283, true }, - { 41302, true }, - { 41315, true }, - { 41340, true }, - { 41357, true }, - { 41377, true }, - { 41398, true }, - { 41410, true }, - { 41434, true }, - { 41467, true }, - { 41479, true }, - { 41496, true }, - { 41511, true }, - { 41525, true }, - { 41551, true }, - { 41561, true }, - { 41574, true }, - { 41584, true }, - { 41594, true }, - { 41612, true }, - { 41630, true }, - { 41657, true }, - { 41673, true }, - { 41698, true }, - { 41718, false }, - { 41739, true }, - { 41754, true }, - { 41769, true }, - { 41790, true }, - { 41814, true }, - { 41827, true }, - { 41837, false }, - { 41851, true }, - { 41862, true }, - { 41876, true }, - { 41895, true }, - { 41910, true }, - { 41925, true }, - { 41934, true }, - { 41944, true }, - { 41955, true }, - { 41963, true }, - { 41973, true }, - { 41983, true }, - { 41993, true }, - { 42007, false }, - { 42032, true }, - { 42050, false }, - { 42074, true }, - { 42088, true }, - { 42107, true }, - { 42134, true }, + { 40958, true }, + { 40973, true }, + { 40987, true }, + { 40997, true }, + { 41016, true }, + { 41033, true }, + { 41046, true }, + { 41060, false }, + { 41073, true }, + { 41085, true }, + { 41098, true }, + { 41110, true }, + { 41123, true }, + { 41136, true }, + { 41147, true }, + { 41165, true }, + { 41183, true }, + { 41195, true }, + { 41209, true }, + { 41223, true }, + { 41252, true }, + { 41271, true }, + { 41284, true }, + { 41309, true }, + { 41326, true }, + { 41346, true }, + { 41367, true }, + { 41379, true }, + { 41403, true }, + { 41436, true }, + { 41448, true }, + { 41465, true }, + { 41480, true }, + { 41494, true }, + { 41520, true }, + { 41530, true }, + { 41543, true }, + { 41553, true }, + { 41563, true }, + { 41581, true }, + { 41599, true }, + { 41626, true }, + { 41642, true }, + { 41667, true }, + { 41687, false }, + { 41708, true }, + { 41723, true }, + { 41738, true }, + { 41759, true }, + { 41783, true }, + { 41796, true }, + { 41806, false }, + { 41820, true }, + { 41831, true }, + { 41845, true }, + { 41864, true }, + { 41879, true }, + { 41894, true }, + { 41903, true }, + { 41913, true }, + { 41924, true }, + { 41932, true }, + { 41942, true }, + { 41952, true }, + { 41962, true }, + { 41976, false }, + { 42001, true }, + { 42019, false }, + { 42043, true }, + { 42057, true }, + { 42076, true }, + { 42103, true }, + { 42112, true }, + { 42126, true }, { 42143, true }, - { 42157, true }, + { 42159, true }, { 42174, true }, - { 42190, true }, - { 42205, true }, - { 42222, true }, - { 42234, true }, - { 42246, true }, - { 42256, true }, - { 42267, true }, - { 42279, true }, + { 42191, true }, + { 42203, true }, + { 42215, true }, + { 42225, true }, + { 42236, true }, + { 42248, true }, + { 42261, true }, + { 42275, true }, { 42292, true }, - { 42306, true }, - { 42323, true }, - { 42334, true }, - { 42352, false }, - { 42372, true }, - { 42384, true }, - { 42396, true }, - { 42409, true }, - { 42431, true }, - { 42445, true }, - { 42454, true }, + { 42303, true }, + { 42321, false }, + { 42341, true }, + { 42353, true }, + { 42365, true }, + { 42378, true }, + { 42400, true }, + { 42414, true }, + { 42423, true }, + { 42435, true }, + { 42447, true }, + { 42456, true }, { 42466, true }, - { 42478, true }, - { 42487, true }, + { 42480, true }, { 42497, true }, - { 42511, true }, - { 42528, true }, - { 42539, true }, - { 42553, true }, - { 42562, true }, - { 42571, true }, - { 42586, true }, - { 42598, true }, - { 42614, true }, + { 42508, true }, + { 42522, true }, + { 42531, true }, + { 42540, true }, + { 42555, true }, + { 42567, true }, + { 42583, true }, + { 42600, true }, + { 42622, true }, { 42631, true }, - { 42653, true }, - { 42662, true }, - { 42674, true }, - { 42688, true }, - { 42721, true }, - { 42746, true }, - { 42755, true }, - { 42771, true }, - { 42783, true }, - { 42794, true }, - { 42819, true }, - { 42834, true }, - { 42856, true }, + { 42643, true }, + { 42657, true }, + { 42690, true }, + { 42715, true }, + { 42724, true }, + { 42740, true }, + { 42752, true }, + { 42763, true }, + { 42788, true }, + { 42803, true }, + { 42825, true }, + { 42850, true }, { 42881, true }, - { 42912, true }, - { 42923, true }, - { 42939, true }, - { 42953, true }, - { 42971, true }, - { 42985, true }, - { 43000, false }, + { 42892, true }, + { 42908, true }, + { 42922, true }, + { 42940, true }, + { 42954, true }, + { 42969, false }, + { 42986, true }, + { 43004, true }, { 43017, true }, - { 43035, true }, - { 43048, true }, - { 43058, true }, - { 43070, true }, - { 43085, true }, - { 43096, true }, - { 43110, true }, - { 43123, true }, - { 43135, true }, - { 43147, true }, - { 43160, true }, - { 43176, true }, - { 43189, true }, - { 43201, false }, - { 43218, true }, - { 43238, true }, - { 43255, true }, - { 43270, true }, - { 43293, true }, - { 43319, true }, - { 43339, false }, - { 43357, true }, - { 43376, true }, - { 43393, true }, - { 43406, true }, - { 43423, true }, - { 43433, false }, - { 43450, true }, + { 43027, true }, + { 43039, true }, + { 43054, true }, + { 43065, true }, + { 43079, true }, + { 43092, true }, + { 43104, true }, + { 43116, true }, + { 43129, true }, + { 43145, true }, + { 43158, true }, + { 43170, false }, + { 43187, true }, + { 43207, true }, + { 43224, true }, + { 43239, true }, + { 43262, true }, + { 43288, true }, + { 43308, false }, + { 43326, true }, + { 43345, true }, + { 43362, true }, + { 43375, true }, + { 43392, true }, + { 43402, false }, + { 43419, true }, + { 43438, true }, + { 43455, true }, { 43469, true }, { 43486, true }, - { 43500, true }, - { 43517, true }, - { 43525, true }, - { 43537, true }, - { 43547, true }, - { 43558, true }, - { 43572, true }, - { 43583, true }, - { 43596, true }, - { 43615, false }, - { 43623, true }, - { 43634, true }, - { 43647, true }, - { 43660, true }, - { 43679, true }, - { 43695, true }, - { 43707, true }, - { 43721, true }, - { 43735, true }, - { 43747, true }, - { 43759, true }, - { 43774, true }, - { 43792, true }, + { 43494, true }, + { 43506, true }, + { 43516, true }, + { 43527, true }, + { 43541, true }, + { 43552, true }, + { 43565, true }, + { 43584, false }, + { 43592, true }, + { 43603, true }, + { 43616, true }, + { 43629, true }, + { 43648, true }, + { 43664, true }, + { 43676, true }, + { 43690, true }, + { 43704, true }, + { 43716, true }, + { 43728, true }, + { 43743, true }, + { 43761, true }, + { 43776, true }, + { 43791, true }, { 43807, true }, - { 43822, true }, - { 43838, true }, - { 43852, true }, - { 43873, true }, - { 43886, true }, - { 43902, true }, - { 43921, true }, - { 43940, true }, - { 43957, false }, - { 43977, true }, - { 44007, true }, - { 44033, true }, - { 44050, true }, - { 44062, true }, - { 44082, true }, - { 44096, true }, - { 44115, true }, - { 44133, true }, - { 44148, true }, - { 44159, true }, - { 44170, true }, - { 44180, true }, - { 44198, true }, - { 44217, true }, - { 44227, true }, - { 44245, true }, - { 44254, false }, - { 44265, false }, - { 44279, false }, - { 44299, true }, - { 44307, true }, - { 44321, true }, - { 44334, true }, - { 44350, true }, - { 44361, true }, - { 44370, true }, - { 44383, true }, - { 44403, false }, - { 44418, false }, - { 44435, true }, - { 44444, true }, - { 44453, true }, - { 44469, true }, - { 44486, true }, - { 44495, true }, - { 44502, true }, + { 43821, true }, + { 43842, true }, + { 43855, true }, + { 43871, true }, + { 43890, true }, + { 43909, true }, + { 43926, false }, + { 43946, true }, + { 43976, true }, + { 44002, true }, + { 44019, true }, + { 44031, true }, + { 44051, true }, + { 44065, true }, + { 44084, true }, + { 44102, true }, + { 44117, true }, + { 44128, true }, + { 44139, true }, + { 44149, true }, + { 44167, true }, + { 44186, true }, + { 44196, true }, + { 44214, true }, + { 44223, false }, + { 44234, false }, + { 44248, false }, + { 44268, true }, + { 44276, true }, + { 44290, true }, + { 44303, true }, + { 44319, true }, + { 44330, true }, + { 44339, true }, + { 44352, true }, + { 44372, false }, + { 44387, false }, + { 44404, true }, + { 44413, true }, + { 44422, true }, + { 44438, true }, + { 44455, true }, + { 44464, true }, + { 44471, true }, + { 44479, true }, + { 44491, true }, + { 44500, true }, { 44510, true }, - { 44522, true }, - { 44531, true }, - { 44541, true }, - { 44558, true }, - { 44568, true }, - { 44576, true }, + { 44527, true }, + { 44537, true }, + { 44545, true }, + { 44553, true }, + { 44560, true }, + { 44571, true }, { 44584, true }, { 44591, true }, - { 44602, true }, - { 44615, true }, - { 44622, true }, - { 44632, true }, - { 44647, true }, - { 44662, true }, - { 44675, true }, - { 44687, true }, - { 44702, true }, - { 44713, true }, - { 44723, true }, - { 44731, true }, - { 44740, true }, - { 44752, true }, - { 44767, true }, - { 44777, true }, - { 44794, true }, - { 44803, true }, - { 44813, true }, - { 44829, true }, - { 44845, true }, - { 44864, true }, - { 44878, true }, - { 44894, true }, - { 44907, true }, - { 44922, true }, - { 44935, true }, - { 44947, true }, - { 44972, false }, - { 44981, true }, - { 44994, true }, - { 45003, true }, - { 45019, true }, - { 45040, true }, - { 45054, true }, - { 45068, true }, - { 45080, true }, - { 45102, false }, - { 45113, true }, - { 45125, true }, - { 45136, true }, - { 45150, true }, - { 45170, true }, - { 45184, true }, + { 44601, true }, + { 44616, true }, + { 44631, true }, + { 44644, true }, + { 44656, true }, + { 44671, true }, + { 44682, true }, + { 44692, true }, + { 44700, true }, + { 44709, true }, + { 44721, true }, + { 44736, true }, + { 44746, true }, + { 44763, true }, + { 44772, true }, + { 44782, true }, + { 44798, true }, + { 44814, true }, + { 44833, true }, + { 44847, true }, + { 44863, true }, + { 44876, true }, + { 44891, true }, + { 44904, true }, + { 44916, true }, + { 44941, false }, + { 44950, true }, + { 44963, true }, + { 44972, true }, + { 44988, true }, + { 45009, true }, + { 45023, true }, + { 45037, true }, + { 45049, true }, + { 45071, false }, + { 45082, true }, + { 45094, true }, + { 45105, true }, + { 45119, true }, + { 45139, true }, + { 45153, true }, + { 45176, true }, + { 45190, true }, { 45207, true }, { 45221, true }, - { 45238, true }, - { 45252, true }, - { 45271, true }, - { 45287, true }, - { 45298, true }, - { 45309, true }, - { 45321, true }, - { 45342, false }, - { 45358, true }, - { 45375, true }, - { 45393, true }, - { 45408, true }, - { 45436, false }, - { 45446, false }, + { 45240, true }, + { 45256, true }, + { 45267, true }, + { 45278, true }, + { 45290, true }, + { 45311, false }, + { 45327, true }, + { 45344, true }, + { 45362, true }, + { 45377, true }, + { 45405, false }, + { 45415, false }, + { 45425, true }, + { 45444, false }, { 45456, true }, - { 45475, false }, - { 45487, true }, - { 45501, true }, - { 45514, true }, + { 45470, true }, + { 45483, true }, + { 45502, true }, + { 45518, true }, { 45533, true }, - { 45549, true }, - { 45564, true }, - { 45587, true }, - { 45606, true }, - { 45619, true }, - { 45636, true }, - { 45645, true }, + { 45556, true }, + { 45575, true }, + { 45588, true }, + { 45605, true }, + { 45614, true }, + { 45635, true }, + { 45650, true }, { 45666, true }, - { 45681, true }, - { 45697, true }, - { 45710, true }, - { 45723, true }, + { 45679, true }, + { 45692, true }, + { 45704, true }, + { 45718, true }, { 45735, true }, - { 45749, true }, - { 45766, true }, + { 45752, true }, + { 45759, true }, + { 45768, true }, { 45783, true }, - { 45790, true }, - { 45799, true }, - { 45814, true }, - { 45825, true }, - { 45849, true }, - { 45860, true }, - { 45870, true }, - { 45881, true }, - { 45893, true }, - { 45914, true }, - { 45928, true }, - { 45943, true }, - { 45958, true }, - { 45970, true }, - { 45987, true }, - { 46003, true }, - { 46019, true }, - { 46036, true }, - { 46065, true }, - { 46076, false }, - { 46090, true }, - { 46099, true }, - { 46114, true }, - { 46131, true }, - { 46148, true }, - { 46159, true }, - { 46177, true }, - { 46200, true }, - { 46214, true }, - { 46233, true }, - { 46252, true }, - { 46266, true }, - { 46277, true }, - { 46287, true }, - { 46300, true }, - { 46316, true }, - { 46336, true }, - { 46355, true }, - { 46384, true }, - { 46400, true }, - { 46416, true }, - { 46426, true }, - { 46442, true }, - { 46451, true }, - { 46466, true }, - { 46478, true }, - { 46492, true }, - { 46507, true }, - { 46520, false }, - { 46530, true }, - { 46547, true }, - { 46560, true }, - { 46578, true }, - { 46600, true }, - { 46611, true }, - { 46620, true }, - { 46632, false }, - { 46645, true }, - { 46657, true }, - { 46670, true }, - { 46685, true }, + { 45794, true }, + { 45818, true }, + { 45829, true }, + { 45839, true }, + { 45850, true }, + { 45862, true }, + { 45883, true }, + { 45897, true }, + { 45912, true }, + { 45927, true }, + { 45939, true }, + { 45956, true }, + { 45972, true }, + { 45988, true }, + { 46005, true }, + { 46034, true }, + { 46045, false }, + { 46059, true }, + { 46068, true }, + { 46083, true }, + { 46100, true }, + { 46117, true }, + { 46128, true }, + { 46146, true }, + { 46169, true }, + { 46183, true }, + { 46202, true }, + { 46221, true }, + { 46235, true }, + { 46246, true }, + { 46256, true }, + { 46269, true }, + { 46285, true }, + { 46305, true }, + { 46324, true }, + { 46353, true }, + { 46369, true }, + { 46379, true }, + { 46395, true }, + { 46404, true }, + { 46419, true }, + { 46431, true }, + { 46445, true }, + { 46460, true }, + { 46473, false }, + { 46483, true }, + { 46500, true }, + { 46513, true }, + { 46531, true }, + { 46553, true }, + { 46564, true }, + { 46573, true }, + { 46585, false }, + { 46598, true }, + { 46610, true }, + { 46623, true }, + { 46638, true }, + { 46650, true }, + { 46665, true }, { 46697, true }, - { 46712, true }, - { 46744, true }, - { 46756, true }, - { 46770, true }, - { 46786, true }, - { 46796, true }, - { 46806, true }, - { 46821, true }, - { 46835, true }, - { 46845, true }, - { 46856, true }, - { 46872, true }, - { 46890, true }, - { 46909, true }, - { 46923, true }, - { 46938, true }, - { 46946, true }, - { 46955, true }, - { 46978, true }, - { 46989, true }, - { 47007, true }, - { 47019, true }, - { 47035, true }, - { 47050, true }, - { 47063, true }, + { 46709, true }, + { 46723, true }, + { 46739, true }, + { 46749, true }, + { 46759, true }, + { 46774, true }, + { 46788, true }, + { 46798, true }, + { 46809, true }, + { 46825, true }, + { 46843, true }, + { 46862, true }, + { 46876, true }, + { 46891, true }, + { 46899, true }, + { 46908, true }, + { 46931, true }, + { 46942, true }, + { 46957, true }, + { 46975, true }, + { 46987, true }, + { 47003, true }, + { 47018, true }, + { 47031, true }, + { 47042, true }, + { 47057, true }, { 47074, true }, - { 47089, true }, + { 47085, true }, + { 47094, true }, { 47106, true }, - { 47117, true }, - { 47126, true }, - { 47138, true }, + { 47122, true }, + { 47132, true }, + { 47146, true }, { 47154, true }, - { 47164, true }, - { 47178, true }, - { 47186, true }, - { 47195, true }, - { 47205, true }, - { 47226, true }, - { 47235, true }, - { 47246, true }, + { 47163, true }, + { 47173, true }, + { 47194, true }, + { 47203, true }, + { 47219, true }, + { 47229, true }, + { 47248, true }, { 47262, true }, - { 47272, true }, - { 47291, true }, - { 47305, true }, - { 47318, true }, - { 47336, true }, - { 47356, true }, - { 47376, true }, - { 47384, true }, - { 47397, true }, - { 47408, true }, - { 47426, true }, - { 47436, true }, - { 47445, true }, - { 47454, true }, - { 47465, true }, - { 47472, true }, - { 47482, true }, - { 47494, true }, - { 47504, true }, - { 47518, true }, - { 47533, true }, - { 47540, true }, - { 47553, false }, - { 47568, true }, - { 47588, true }, - { 47605, true }, - { 47620, true }, - { 47636, true }, - { 47650, true }, - { 47671, true }, - { 47680, true }, - { 47689, true }, - { 47702, true }, - { 47712, true }, + { 47275, true }, + { 47293, true }, + { 47313, true }, + { 47333, true }, + { 47341, true }, + { 47354, true }, + { 47365, true }, + { 47383, true }, + { 47393, true }, + { 47402, true }, + { 47411, true }, + { 47422, true }, + { 47429, true }, + { 47439, true }, + { 47451, true }, + { 47461, true }, + { 47476, true }, + { 47483, true }, + { 47496, false }, + { 47511, true }, + { 47531, true }, + { 47548, true }, + { 47563, true }, + { 47579, true }, + { 47593, true }, + { 47614, true }, + { 47623, true }, + { 47632, true }, + { 47645, true }, + { 47655, true }, + { 47667, true }, + { 47676, true }, + { 47686, true }, + { 47698, true }, + { 47709, true }, + { 47717, true }, { 47724, true }, - { 47733, true }, - { 47743, true }, - { 47755, true }, - { 47766, true }, - { 47774, true }, - { 47781, true }, - { 47806, true }, - { 47824, true }, - { 47842, true }, - { 47856, true }, - { 47865, true }, - { 47878, true }, - { 47895, true }, + { 47749, true }, + { 47767, true }, + { 47785, true }, + { 47799, true }, + { 47808, true }, + { 47821, true }, + { 47838, true }, + { 47851, true }, + { 47867, true }, + { 47877, true }, + { 47895, false }, { 47908, true }, { 47924, true }, - { 47934, true }, - { 47952, false }, - { 47965, true }, - { 47981, true }, - { 47997, true }, - { 48010, true }, - { 48023, true }, - { 48033, false }, - { 48051, true }, - { 48064, true }, + { 47940, true }, + { 47953, true }, + { 47966, true }, + { 47976, false }, + { 47994, true }, + { 48007, true }, + { 48020, true }, + { 48036, true }, + { 48055, true }, + { 48070, true }, { 48077, true }, - { 48093, true }, - { 48112, true }, - { 48127, true }, - { 48134, true }, - { 48147, true }, - { 48176, true }, - { 48198, true }, - { 48219, true }, - { 48246, true }, - { 48266, true }, - { 48274, true }, - { 48285, true }, - { 48305, true }, - { 48324, true }, - { 48340, true }, - { 48356, false }, - { 48371, true }, - { 48386, true }, - { 48405, true }, - { 48423, true }, - { 48432, true }, - { 48442, true }, - { 48458, true }, - { 48472, true }, - { 48486, true }, - { 48519, true }, - { 48533, true }, - { 48547, true }, - { 48556, true }, - { 48566, true }, - { 48577, true }, - { 48601, true }, - { 48613, true }, - { 48624, false }, - { 48637, true }, - { 48643, true }, - { 48653, true }, - { 48662, true }, + { 48090, true }, + { 48119, true }, + { 48141, true }, + { 48162, true }, + { 48189, true }, + { 48209, true }, + { 48217, true }, + { 48228, true }, + { 48248, true }, + { 48267, true }, + { 48283, true }, + { 48299, false }, + { 48314, true }, + { 48329, true }, + { 48348, true }, + { 48366, true }, + { 48375, true }, + { 48385, true }, + { 48401, true }, + { 48415, true }, + { 48429, true }, + { 48462, true }, + { 48476, true }, + { 48490, true }, + { 48499, true }, + { 48510, true }, + { 48534, true }, + { 48546, true }, + { 48557, false }, + { 48570, true }, + { 48576, true }, + { 48586, true }, + { 48595, true }, + { 48609, true }, + { 48619, true }, + { 48635, true }, + { 48648, true }, + { 48660, true }, { 48676, true }, - { 48686, true }, - { 48702, true }, - { 48715, true }, - { 48727, true }, - { 48743, true }, + { 48687, true }, + { 48699, true }, + { 48714, true }, + { 48731, true }, + { 48742, true }, { 48754, true }, - { 48766, true }, - { 48781, true }, - { 48798, true }, - { 48809, true }, - { 48821, true }, - { 48837, false }, - { 48852, true }, - { 48862, true }, - { 48878, true }, - { 48890, true }, - { 48912, true }, - { 48923, true }, - { 48942, true }, - { 48965, true }, - { 48982, true }, - { 48991, false }, - { 49000, true }, - { 49011, true }, - { 49028, true }, - { 49044, true }, - { 49058, true }, - { 49072, true }, - { 49090, false }, - { 49098, true }, - { 49107, true }, - { 49119, true }, - { 49129, true }, - { 49138, true }, - { 49146, true }, - { 49156, true }, - { 49162, true }, - { 49170, true }, - { 49187, true }, - { 49199, true }, - { 49208, true }, - { 49223, true }, - { 49233, true }, - { 49242, true }, - { 49254, true }, + { 48770, false }, + { 48785, true }, + { 48795, true }, + { 48811, true }, + { 48823, true }, + { 48845, true }, + { 48856, true }, + { 48875, true }, + { 48898, true }, + { 48915, true }, + { 48924, false }, + { 48933, true }, + { 48944, true }, + { 48961, true }, + { 48977, true }, + { 48991, true }, + { 49005, true }, + { 49023, false }, + { 49031, true }, + { 49040, true }, + { 49053, true }, + { 49065, true }, + { 49075, true }, + { 49084, true }, + { 49092, true }, + { 49102, true }, + { 49108, true }, + { 49116, true }, + { 49133, true }, + { 49145, true }, + { 49154, true }, + { 49169, true }, + { 49179, true }, + { 49188, true }, + { 49200, true }, + { 49221, true }, + { 49232, true }, + { 49246, true }, + { 49263, true }, { 49275, true }, - { 49286, true }, - { 49300, true }, - { 49317, true }, - { 49329, true }, - { 49352, true }, - { 49366, false }, - { 49382, true }, + { 49298, true }, + { 49312, false }, + { 49328, true }, + { 49343, true }, + { 49354, true }, + { 49370, true }, + { 49381, true }, { 49397, true }, - { 49408, true }, - { 49424, true }, - { 49435, true }, - { 49451, true }, - { 49479, true }, - { 49491, false }, - { 49509, true }, - { 49520, true }, - { 49530, true }, - { 49551, true }, - { 49561, false }, + { 49425, true }, + { 49437, false }, + { 49455, true }, + { 49466, true }, + { 49476, true }, + { 49497, true }, + { 49507, false }, + { 49519, true }, + { 49534, true }, + { 49548, true }, + { 49558, true }, { 49573, true }, - { 49588, true }, - { 49602, true }, - { 49612, true }, + { 49584, true }, + { 49596, true }, + { 49614, true }, { 49627, true }, - { 49638, true }, - { 49650, true }, - { 49668, true }, - { 49681, true }, - { 49694, true }, - { 49703, true }, - { 49712, true }, - { 49724, true }, - { 49740, true }, - { 49753, true }, - { 49764, true }, - { 49780, true }, - { 49799, true }, - { 49815, true }, - { 49830, true }, - { 49861, true }, - { 49885, true }, - { 49904, true }, - { 49924, true }, - { 49940, true }, - { 49955, true }, - { 49974, true }, - { 49996, true }, - { 50008, true }, - { 50025, true }, - { 50040, true }, - { 50059, true }, - { 50072, true }, - { 50087, true }, - { 50102, true }, - { 50115, true }, - { 50131, true }, - { 50143, true }, - { 50156, true }, - { 50166, false }, - { 50175, true }, - { 50195, true }, - { 50210, true }, - { 50221, true }, - { 50242, true }, - { 50258, true }, - { 50282, false }, + { 49640, true }, + { 49649, true }, + { 49658, true }, + { 49670, true }, + { 49686, true }, + { 49699, true }, + { 49710, true }, + { 49726, true }, + { 49745, true }, + { 49761, true }, + { 49776, true }, + { 49807, true }, + { 49831, true }, + { 49850, true }, + { 49870, true }, + { 49887, true }, + { 49903, true }, + { 49918, true }, + { 49937, true }, + { 49959, true }, + { 49971, true }, + { 49988, true }, + { 50003, true }, + { 50022, true }, + { 50035, true }, + { 50050, true }, + { 50065, true }, + { 50078, true }, + { 50094, true }, + { 50106, true }, + { 50119, true }, + { 50129, false }, + { 50138, true }, + { 50158, true }, + { 50169, true }, + { 50190, true }, + { 50206, true }, + { 50230, false }, + { 50247, true }, + { 50260, true }, + { 50273, true }, + { 50286, true }, { 50299, true }, - { 50312, true }, - { 50325, true }, - { 50338, true }, - { 50351, true }, - { 50362, true }, - { 50371, true }, - { 50389, true }, - { 50398, true }, + { 50310, true }, + { 50319, true }, + { 50337, true }, + { 50346, true }, + { 50359, true }, + { 50368, true }, + { 50384, true }, { 50411, true }, - { 50420, true }, - { 50436, true }, - { 50463, true }, - { 50474, true }, - { 50491, true }, - { 50504, true }, - { 50518, true }, - { 50535, true }, - { 50550, true }, - { 50573, true }, - { 50583, true }, - { 50601, true }, - { 50616, true }, - { 50641, true }, - { 50665, true }, - { 50674, true }, - { 50695, true }, - { 50715, true }, - { 50727, true }, - { 50740, true }, - { 50754, true }, - { 50771, true }, - { 50788, false }, - { 50800, false }, - { 50813, true }, - { 50827, true }, - { 50836, true }, - { 50847, true }, - { 50867, true }, - { 50881, true }, - { 50892, true }, - { 50906, true }, - { 50923, false }, - { 50951, true }, - { 50960, true }, - { 50969, true }, - { 50979, true }, - { 50995, true }, - { 51005, true }, - { 51019, false }, - { 51033, false }, - { 51048, true }, - { 51072, true }, - { 51093, true }, - { 51115, true }, - { 51129, true }, + { 50422, true }, + { 50439, true }, + { 50452, true }, + { 50466, true }, + { 50483, true }, + { 50498, true }, + { 50521, true }, + { 50531, true }, + { 50549, true }, + { 50564, true }, + { 50589, true }, + { 50613, true }, + { 50622, true }, + { 50643, true }, + { 50663, true }, + { 50675, true }, + { 50688, true }, + { 50702, true }, + { 50719, true }, + { 50736, false }, + { 50748, false }, + { 50761, true }, + { 50775, true }, + { 50784, true }, + { 50795, true }, + { 50815, true }, + { 50829, true }, + { 50840, true }, + { 50854, true }, + { 50871, false }, + { 50899, true }, + { 50908, true }, + { 50917, true }, + { 50927, true }, + { 50943, true }, + { 50953, true }, + { 50967, false }, + { 50981, false }, + { 50996, true }, + { 51020, true }, + { 51041, true }, + { 51063, true }, + { 51077, true }, + { 51087, true }, + { 51097, true }, + { 51109, true }, + { 51125, true }, { 51139, true }, - { 51149, true }, - { 51161, true }, - { 51177, true }, - { 51191, true }, - { 51210, true }, - { 51226, true }, - { 51239, true }, - { 51251, true }, - { 51264, true }, - { 51276, true }, - { 51288, true }, - { 51301, true }, - { 51311, true }, - { 51330, true }, - { 51354, true }, - { 51370, true }, - { 51380, true }, - { 51396, true }, - { 51415, true }, - { 51433, true }, - { 51450, true }, - { 51476, true }, - { 51488, true }, - { 51508, true }, - { 51524, true }, + { 51158, true }, + { 51174, true }, + { 51187, true }, + { 51199, true }, + { 51212, true }, + { 51224, true }, + { 51236, true }, + { 51249, true }, + { 51259, true }, + { 51278, true }, + { 51302, true }, + { 51318, true }, + { 51328, true }, + { 51344, true }, + { 51363, true }, + { 51381, true }, + { 51398, true }, + { 51424, true }, + { 51436, true }, + { 51456, true }, + { 51472, true }, + { 51486, true }, + { 51496, true }, + { 51511, true }, + { 51523, true }, { 51538, true }, - { 51548, true }, - { 51563, true }, + { 51556, true }, { 51575, true }, - { 51590, true }, - { 51608, true }, - { 51627, true }, - { 51641, true }, - { 51651, true }, - { 51662, true }, - { 51681, true }, - { 51697, true }, + { 51589, true }, + { 51599, true }, + { 51610, true }, + { 51629, true }, + { 51645, true }, + { 51664, true }, + { 51674, true }, + { 51693, true }, + { 51705, true }, { 51716, true }, - { 51726, true }, - { 51745, true }, - { 51757, true }, - { 51768, true }, - { 51781, true }, - { 51805, true }, + { 51729, true }, + { 51753, true }, + { 51773, true }, + { 51786, false }, + { 51798, true }, + { 51810, true }, { 51825, true }, - { 51838, false }, - { 51850, true }, - { 51862, true }, - { 51877, true }, - { 51897, true }, - { 51907, true }, - { 51917, false }, - { 51934, true }, - { 51942, true }, - { 51958, true }, - { 51973, true }, - { 51989, true }, - { 52005, true }, - { 52019, true }, - { 52031, true }, - { 52051, true }, - { 52067, true }, - { 52084, true }, - { 52094, true }, - { 52107, true }, - { 52121, true }, + { 51845, true }, + { 51855, true }, + { 51865, false }, + { 51882, true }, + { 51890, true }, + { 51906, true }, + { 51921, true }, + { 51937, true }, + { 51953, true }, + { 51967, true }, + { 51979, true }, + { 51999, true }, + { 52015, true }, + { 52032, true }, + { 52042, true }, + { 52055, true }, + { 52069, true }, + { 52082, true }, + { 52092, true }, + { 52106, true }, + { 52118, true }, { 52134, true }, - { 52144, true }, { 52158, true }, - { 52170, true }, - { 52186, true }, - { 52210, true }, - { 52235, true }, - { 52248, true }, - { 52261, true }, - { 52273, true }, - { 52292, true }, - { 52305, true }, - { 52318, true }, - { 52331, true }, - { 52351, true }, - { 52366, true }, - { 52384, true }, - { 52393, true }, - { 52404, true }, - { 52415, true }, - { 52425, true }, - { 52439, true }, - { 52451, true }, - { 52461, true }, - { 52475, true }, - { 52485, true }, + { 52183, true }, + { 52196, true }, + { 52209, true }, + { 52221, true }, + { 52240, true }, + { 52253, true }, + { 52266, true }, + { 52279, true }, + { 52299, true }, + { 52314, true }, + { 52332, true }, + { 52341, true }, + { 52352, true }, + { 52363, true }, + { 52373, true }, + { 52387, true }, + { 52399, true }, + { 52409, true }, + { 52423, true }, + { 52433, true }, + { 52444, true }, + { 52456, true }, + { 52465, true }, + { 52476, false }, + { 52489, true }, { 52496, true }, { 52508, true }, - { 52517, true }, - { 52528, false }, + { 52524, true }, { 52541, true }, - { 52548, true }, - { 52560, true }, - { 52576, true }, - { 52593, true }, - { 52606, false }, - { 52626, true }, - { 52638, true }, - { 52651, true }, - { 52670, true }, - { 52691, true }, - { 52700, true }, - { 52715, true }, - { 52728, true }, - { 52739, true }, - { 52748, true }, + { 52554, false }, + { 52574, true }, + { 52586, true }, + { 52599, true }, + { 52618, true }, + { 52639, true }, + { 52648, true }, + { 52663, true }, + { 52676, true }, + { 52687, true }, + { 52696, true }, + { 52709, true }, + { 52722, true }, + { 52731, true }, + { 52743, true }, + { 52752, true }, { 52761, true }, - { 52774, true }, - { 52786, true }, - { 52795, true }, - { 52804, true }, - { 52823, true }, - { 52837, true }, - { 52855, true }, - { 52877, false }, - { 52902, true }, - { 52911, true }, - { 52921, true }, - { 52934, true }, - { 52946, true }, + { 52780, true }, + { 52794, true }, + { 52812, true }, + { 52834, false }, + { 52859, true }, + { 52868, true }, + { 52878, true }, + { 52891, true }, + { 52903, true }, + { 52928, true }, + { 52944, true }, + { 52957, true }, { 52971, true }, - { 52987, true }, - { 53000, true }, - { 53014, true }, - { 53032, true }, - { 53042, true }, - { 53060, true }, - { 53071, false }, + { 52989, true }, + { 52999, true }, + { 53017, true }, + { 53028, false }, + { 53043, true }, + { 53052, true }, + { 53061, true }, + { 53075, false }, { 53086, true }, - { 53095, true }, - { 53104, true }, - { 53118, false }, - { 53129, true }, - { 53137, true }, - { 53145, true }, - { 53154, true }, - { 53169, true }, - { 53181, true }, - { 53195, true }, - { 53209, true }, - { 53221, true }, - { 53239, true }, - { 53261, true }, - { 53277, true }, - { 53291, true }, - { 53308, true }, - { 53321, true }, - { 53331, true }, - { 53345, true }, - { 53359, true }, - { 53372, true }, - { 53385, true }, - { 53398, true }, - { 53409, true }, - { 53419, true }, - { 53426, true }, - { 53435, true }, - { 53454, true }, - { 53468, true }, - { 53482, true }, - { 53493, true }, - { 53506, true }, + { 53094, true }, + { 53102, true }, + { 53111, true }, + { 53126, true }, + { 53138, true }, + { 53152, true }, + { 53166, true }, + { 53178, true }, + { 53196, true }, + { 53218, true }, + { 53234, true }, + { 53248, true }, + { 53265, true }, + { 53278, true }, + { 53288, true }, + { 53302, true }, + { 53316, true }, + { 53329, true }, + { 53342, true }, + { 53355, true }, + { 53366, true }, + { 53376, true }, + { 53383, true }, + { 53392, true }, + { 53411, true }, + { 53425, true }, + { 53439, true }, + { 53450, true }, + { 53463, true }, + { 53479, true }, + { 53502, true }, { 53522, true }, - { 53545, true }, - { 53565, true }, - { 53577, true }, - { 53592, true }, - { 53611, true }, + { 53534, true }, + { 53549, true }, + { 53568, true }, + { 53582, true }, + { 53600, true }, + { 53618, true }, { 53625, true }, - { 53643, true }, - { 53661, true }, - { 53668, true }, - { 53680, true }, - { 53697, true }, + { 53637, true }, + { 53654, true }, + { 53673, true }, + { 53683, true }, + { 53703, true }, { 53716, true }, - { 53726, true }, - { 53746, true }, - { 53759, true }, - { 53773, true }, - { 53790, true }, - { 53803, true }, - { 53815, true }, - { 53827, false }, + { 53730, true }, + { 53747, true }, + { 53760, true }, + { 53772, true }, + { 53784, false }, + { 53799, true }, + { 53813, true }, + { 53830, true }, { 53842, true }, - { 53856, true }, + { 53861, true }, { 53873, true }, { 53885, true }, - { 53904, true }, - { 53916, true }, - { 53928, true }, - { 53939, true }, - { 53953, true }, - { 53976, false }, - { 53986, true }, + { 53896, true }, + { 53910, true }, + { 53933, false }, + { 53943, true }, + { 53954, true }, + { 53967, true }, + { 53978, true }, + { 53987, true }, { 53997, true }, - { 54010, true }, - { 54021, true }, - { 54030, true }, - { 54040, true }, - { 54051, true }, - { 54063, true }, - { 54081, true }, - { 54098, true }, - { 54112, true }, - { 54135, true }, - { 54145, true }, - { 54160, true }, - { 54173, true }, - { 54181, true }, + { 54008, true }, + { 54020, true }, + { 54038, true }, + { 54055, true }, + { 54069, true }, + { 54092, true }, + { 54102, true }, + { 54117, true }, + { 54130, true }, + { 54138, true }, + { 54150, true }, + { 54164, true }, + { 54186, true }, { 54193, true }, - { 54207, true }, - { 54229, true }, - { 54236, true }, - { 54249, true }, - { 54269, true }, - { 54287, true }, - { 54309, true }, - { 54322, true }, - { 54333, true }, - { 54347, true }, - { 54360, true }, - { 54379, true }, - { 54395, true }, - { 54414, true }, + { 54206, true }, + { 54226, true }, + { 54244, true }, + { 54266, true }, + { 54279, true }, + { 54290, true }, + { 54304, true }, + { 54317, true }, + { 54336, true }, + { 54352, true }, + { 54371, true }, + { 54390, true }, + { 54405, true }, + { 54417, true }, { 54433, true }, - { 54448, true }, - { 54460, true }, - { 54476, true }, - { 54495, true }, - { 54516, true }, - { 54535, true }, - { 54553, true }, - { 54571, true }, - { 54580, true }, - { 54603, true }, - { 54617, true }, - { 54630, true }, - { 54642, true }, - { 54653, false }, - { 54663, true }, - { 54683, true }, - { 54696, true }, - { 54711, true }, - { 54720, true }, - { 54732, true }, - { 54742, true }, - { 54749, true }, - { 54758, true }, - { 54771, true }, - { 54784, true }, - { 54804, true }, - { 54820, true }, - { 54836, true }, - { 54850, true }, - { 54867, true }, - { 54877, true }, - { 54904, true }, - { 54939, true }, - { 54965, false }, - { 54978, true }, - { 54991, true }, - { 55010, true }, - { 55035, true }, - { 55050, false }, - { 55060, true }, - { 55077, true }, - { 55094, true }, - { 55104, true }, - { 55114, true }, + { 54452, true }, + { 54473, true }, + { 54492, true }, + { 54510, true }, + { 54528, true }, + { 54537, true }, + { 54560, true }, + { 54574, true }, + { 54587, true }, + { 54599, true }, + { 54610, false }, + { 54620, true }, + { 54640, true }, + { 54653, true }, + { 54668, true }, + { 54677, true }, + { 54689, true }, + { 54699, true }, + { 54706, true }, + { 54715, true }, + { 54728, true }, + { 54741, true }, + { 54761, true }, + { 54777, true }, + { 54793, true }, + { 54807, true }, + { 54824, true }, + { 54834, true }, + { 54861, true }, + { 54896, true }, + { 54922, false }, + { 54935, true }, + { 54948, true }, + { 54967, true }, + { 54992, true }, + { 55007, false }, + { 55017, true }, + { 55034, true }, + { 55051, true }, + { 55061, true }, + { 55071, true }, + { 55084, true }, + { 55099, true }, + { 55112, true }, { 55127, true }, - { 55142, true }, - { 55155, true }, + { 55143, true }, + { 55156, true }, { 55170, true }, - { 55186, true }, - { 55199, true }, - { 55212, true }, - { 55226, true }, - { 55237, true }, + { 55181, true }, + { 55193, true }, + { 55206, true }, + { 55225, true }, { 55249, true }, - { 55262, true }, - { 55281, true }, - { 55305, true }, - { 55327, true }, - { 55348, true }, - { 55373, true }, - { 55396, true }, - { 55418, true }, - { 55438, true }, - { 55449, true }, + { 55271, true }, + { 55292, true }, + { 55317, true }, + { 55340, true }, + { 55362, true }, + { 55382, true }, + { 55393, true }, + { 55413, true }, + { 55430, true }, + { 55451, true }, { 55469, true }, - { 55486, true }, - { 55507, true }, - { 55525, true }, - { 55548, true }, - { 55564, true }, - { 55584, true }, - { 55597, true }, - { 55607, true }, - { 55618, true }, - { 55637, true }, - { 55647, true }, - { 55657, true }, - { 55665, true }, - { 55678, true }, - { 55691, true }, - { 55700, true }, - { 55707, false }, - { 55723, true }, - { 55740, true }, - { 55754, true }, - { 55773, true }, - { 55785, true }, - { 55808, true }, - { 55824, true }, - { 55836, true }, + { 55492, true }, + { 55508, true }, + { 55528, true }, + { 55541, true }, + { 55551, true }, + { 55562, true }, + { 55581, true }, + { 55591, true }, + { 55601, true }, + { 55609, true }, + { 55622, true }, + { 55635, true }, + { 55644, true }, + { 55651, false }, + { 55667, true }, + { 55684, true }, + { 55698, true }, + { 55717, true }, + { 55729, true }, + { 55752, true }, + { 55768, true }, + { 55780, true }, + { 55796, true }, + { 55813, true }, + { 55831, true }, { 55852, true }, { 55869, true }, - { 55887, true }, - { 55908, true }, - { 55925, true }, - { 55942, true }, - { 55959, true }, - { 55976, true }, - { 55993, true }, - { 56010, true }, - { 56026, true }, - { 56040, true }, + { 55886, true }, + { 55903, true }, + { 55920, true }, + { 55937, true }, + { 55954, true }, + { 55970, true }, + { 55984, true }, + { 56009, true }, + { 56020, true }, + { 56036, true }, + { 56052, false }, { 56065, true }, - { 56076, true }, - { 56092, true }, - { 56108, false }, - { 56121, true }, - { 56138, false }, - { 56154, true }, - { 56168, true }, - { 56179, true }, - { 56193, true }, - { 56207, true }, - { 56217, false }, - { 56227, false }, - { 56236, true }, - { 56255, true }, - { 56265, true }, - { 56274, false }, - { 56294, true }, - { 56317, true }, - { 56334, true }, - { 56353, true }, - { 56370, true }, - { 56381, false }, - { 56393, true }, - { 56404, true }, - { 56419, true }, - { 56429, true }, - { 56437, true }, - { 56451, true }, - { 56464, false }, - { 56477, true }, - { 56492, true }, - { 56506, true }, - { 56518, true }, - { 56532, true }, - { 56542, true }, - { 56558, true }, - { 56574, true }, - { 56593, false }, - { 56622, true }, - { 56636, true }, - { 56650, true }, - { 56671, true }, - { 56689, true }, - { 56704, true }, - { 56720, true }, - { 56733, true }, - { 56753, true }, - { 56765, true }, - { 56777, true }, - { 56792, true }, - { 56816, true }, - { 56840, true }, - { 56850, true }, - { 56872, true }, - { 56904, true }, - { 56915, true }, - { 56925, true }, - { 56940, true }, - { 56954, false }, - { 56974, true }, - { 56992, true }, - { 57001, true }, - { 57008, true }, - { 57019, true }, - { 57028, true }, - { 57041, true }, - { 57064, true }, - { 57079, false }, - { 57090, false }, - { 57102, false }, - { 57113, true }, - { 57139, false }, - { 57155, true }, - { 57165, true }, - { 57173, true }, - { 57182, true }, - { 57194, true }, - { 57205, true }, - { 57217, false }, - { 57229, true }, - { 57242, true }, - { 57254, true }, - { 57271, true }, - { 57291, true }, - { 57302, true }, - { 57318, true }, + { 56082, false }, + { 56098, true }, + { 56112, true }, + { 56122, true }, + { 56133, true }, + { 56147, true }, + { 56161, true }, + { 56171, false }, + { 56181, false }, + { 56190, true }, + { 56209, true }, + { 56219, true }, + { 56228, false }, + { 56248, true }, + { 56271, true }, + { 56288, true }, + { 56307, true }, + { 56324, true }, + { 56335, false }, + { 56347, true }, + { 56358, true }, + { 56373, true }, + { 56383, true }, + { 56391, true }, + { 56405, true }, + { 56418, false }, + { 56431, true }, + { 56446, true }, + { 56460, true }, + { 56472, true }, + { 56486, true }, + { 56496, true }, + { 56512, true }, + { 56528, true }, + { 56547, false }, + { 56576, true }, + { 56590, true }, + { 56604, true }, + { 56625, true }, + { 56643, true }, + { 56658, true }, + { 56674, true }, + { 56687, true }, + { 56707, true }, + { 56719, true }, + { 56731, true }, + { 56746, true }, + { 56770, true }, + { 56794, true }, + { 56804, true }, + { 56826, true }, + { 56858, true }, + { 56869, true }, + { 56879, true }, + { 56894, true }, + { 56908, false }, + { 56928, true }, + { 56946, true }, + { 56955, true }, + { 56962, true }, + { 56973, true }, + { 56982, true }, + { 56995, true }, + { 57018, true }, + { 57033, false }, + { 57044, false }, + { 57056, false }, + { 57067, true }, + { 57093, false }, + { 57109, true }, + { 57119, true }, + { 57127, true }, + { 57136, true }, + { 57148, true }, + { 57159, true }, + { 57171, false }, + { 57183, true }, + { 57196, true }, + { 57208, true }, + { 57225, true }, + { 57245, true }, + { 57256, true }, + { 57272, true }, + { 57284, true }, + { 57293, true }, + { 57317, true }, { 57330, true }, - { 57339, true }, - { 57363, true }, - { 57376, true }, - { 57389, true }, - { 57403, true }, - { 57420, true }, + { 57343, true }, + { 57367, true }, + { 57381, true }, + { 57398, true }, + { 57413, true }, + { 57423, true }, { 57435, true }, - { 57445, true }, - { 57457, true }, - { 57472, true }, + { 57450, true }, + { 57458, true }, + { 57470, true }, { 57480, true }, - { 57492, true }, - { 57502, true }, - { 57521, true }, - { 57538, true }, - { 57555, true }, - { 57570, true }, - { 57582, true }, - { 57607, false }, - { 57620, false }, - { 57632, true }, - { 57652, true }, - { 57665, true }, - { 57678, true }, - { 57690, true }, - { 57714, true }, - { 57727, true }, - { 57746, true }, - { 57758, true }, - { 57770, true }, - { 57794, true }, - { 57815, true }, - { 57829, true }, - { 57854, true }, - { 57868, true }, - { 57881, false }, - { 57897, true }, - { 57909, true }, - { 57922, true }, - { 57934, true }, + { 57499, true }, + { 57516, true }, + { 57533, true }, + { 57548, true }, + { 57560, true }, + { 57585, false }, + { 57598, false }, + { 57610, true }, + { 57630, true }, + { 57643, true }, + { 57656, true }, + { 57668, true }, + { 57692, true }, + { 57705, true }, + { 57724, true }, + { 57736, true }, + { 57748, true }, + { 57772, true }, + { 57793, true }, + { 57807, true }, + { 57832, true }, + { 57846, true }, + { 57859, false }, + { 57875, true }, + { 57887, true }, + { 57900, true }, + { 57912, true }, + { 57924, true }, + { 57935, true }, { 57946, true }, - { 57957, true }, - { 57968, true }, - { 57980, true }, - { 57989, true }, - { 58003, true }, - { 58015, true }, + { 57958, true }, + { 57967, true }, + { 57981, true }, + { 57993, true }, + { 58009, true }, { 58031, true }, - { 58053, true }, - { 58063, false }, - { 58077, true }, - { 58087, true }, - { 58100, true }, - { 58113, true }, - { 58126, true }, - { 58134, false }, - { 58151, true }, - { 58165, true }, - { 58181, false }, - { 58200, true }, + { 58041, false }, + { 58055, true }, + { 58065, true }, + { 58078, true }, + { 58091, true }, + { 58104, true }, + { 58112, false }, + { 58129, true }, + { 58143, true }, + { 58159, false }, + { 58178, true }, + { 58197, true }, + { 58207, true }, { 58219, true }, - { 58229, true }, + { 58233, true }, { 58241, true }, - { 58255, true }, - { 58263, true }, - { 58282, false }, + { 58260, false }, + { 58278, true }, + { 58287, true }, { 58300, true }, - { 58309, true }, - { 58322, true }, - { 58337, true }, - { 58357, false }, - { 58370, true }, - { 58387, true }, - { 58400, true }, - { 58413, true }, - { 58437, true }, - { 58464, true }, - { 58477, false }, - { 58491, true }, - { 58503, true }, - { 58516, false }, - { 58528, true }, - { 58540, true }, - { 58555, true }, - { 58573, true }, - { 58586, true }, - { 58609, false }, - { 58620, true }, - { 58636, true }, + { 58315, true }, + { 58335, false }, + { 58348, true }, + { 58365, true }, + { 58378, true }, + { 58391, true }, + { 58415, true }, + { 58442, true }, + { 58455, false }, + { 58469, true }, + { 58481, true }, + { 58494, false }, + { 58506, true }, + { 58518, true }, + { 58533, true }, + { 58551, true }, + { 58564, true }, + { 58587, false }, + { 58598, true }, + { 58614, true }, + { 58632, true }, { 58654, true }, - { 58676, true }, - { 58692, true }, - { 58709, true }, - { 58726, true }, - { 58744, true }, - { 58757, true }, - { 58774, true }, - { 58790, true }, - { 58798, true }, - { 58817, true }, - { 58827, true }, - { 58835, true }, - { 58844, true }, - { 58859, true }, - { 58877, false }, - { 58888, true }, - { 58904, true }, - { 58918, true }, + { 58670, true }, + { 58687, true }, + { 58704, true }, + { 58722, true }, + { 58735, true }, + { 58752, true }, + { 58768, true }, + { 58776, true }, + { 58795, true }, + { 58805, true }, + { 58813, true }, + { 58822, true }, + { 58837, true }, + { 58855, false }, + { 58866, true }, + { 58882, true }, + { 58896, true }, + { 58905, true }, + { 58921, true }, { 58927, true }, - { 58943, true }, - { 58949, true }, + { 58939, true }, { 58961, true }, - { 58983, true }, - { 58997, true }, - { 59012, true }, - { 59023, true }, - { 59036, true }, - { 59052, false }, - { 59065, true }, - { 59076, true }, - { 59084, true }, - { 59101, true }, - { 59110, true }, - { 59119, true }, - { 59138, true }, - { 59149, true }, - { 59165, true }, - { 59186, true }, - { 59203, true }, - { 59216, true }, - { 59227, true }, - { 59244, true }, - { 59269, true }, - { 59288, true }, - { 59303, true }, - { 59315, true }, - { 59326, true }, - { 59340, true }, + { 58975, true }, + { 58990, true }, + { 59001, true }, + { 59014, true }, + { 59030, false }, + { 59043, true }, + { 59054, true }, + { 59062, true }, + { 59079, true }, + { 59088, true }, + { 59097, true }, + { 59116, true }, + { 59127, true }, + { 59143, true }, + { 59160, true }, + { 59173, true }, + { 59184, true }, + { 59201, true }, + { 59226, true }, + { 59245, true }, + { 59260, true }, + { 59272, true }, + { 59283, true }, + { 59297, true }, + { 59314, true }, + { 59334, true }, + { 59343, true }, { 59357, true }, - { 59377, true }, - { 59386, true }, - { 59400, true }, - { 59411, true }, - { 59431, false }, - { 59455, true }, - { 59473, false }, - { 59481, true }, - { 59499, true }, - { 59521, true }, - { 59543, true }, - { 59559, true }, - { 59571, true }, - { 59583, true }, - { 59597, true }, - { 59610, false }, - { 59627, true }, - { 59649, true }, - { 59669, true }, - { 59696, true }, - { 59715, true }, - { 59735, true }, - { 59744, false }, - { 59759, true }, - { 59774, true }, - { 59803, true }, - { 59825, true }, - { 59843, true }, - { 59857, true }, - { 59870, true }, - { 59880, true }, - { 59898, true }, - { 59917, true }, - { 59935, true }, - { 59942, false }, - { 59962, true }, - { 59971, true }, - { 59986, true }, - { 60004, true }, - { 60016, true }, - { 60025, false }, - { 60035, true }, - { 60043, true }, - { 60064, true }, - { 60081, true }, - { 60092, true }, - { 60102, true }, - { 60119, true }, - { 60141, true }, - { 60156, true }, - { 60173, true }, - { 60183, true }, - { 60196, true }, - { 60207, true }, - { 60220, true }, - { 60236, true }, - { 60247, true }, - { 60259, true }, - { 60281, true }, + { 59368, true }, + { 59388, false }, + { 59412, true }, + { 59430, false }, + { 59438, true }, + { 59456, true }, + { 59478, true }, + { 59500, true }, + { 59516, true }, + { 59528, true }, + { 59540, true }, + { 59554, true }, + { 59567, false }, + { 59584, true }, + { 59606, true }, + { 59626, true }, + { 59653, true }, + { 59672, true }, + { 59692, true }, + { 59701, false }, + { 59716, true }, + { 59731, true }, + { 59760, true }, + { 59782, true }, + { 59800, true }, + { 59814, true }, + { 59827, true }, + { 59837, true }, + { 59855, true }, + { 59874, true }, + { 59892, true }, + { 59899, false }, + { 59919, true }, + { 59928, true }, + { 59943, true }, + { 59961, true }, + { 59973, true }, + { 59982, false }, + { 59992, true }, + { 60000, true }, + { 60021, true }, + { 60038, true }, + { 60049, true }, + { 60059, true }, + { 60076, true }, + { 60098, true }, + { 60113, true }, + { 60130, true }, + { 60140, true }, + { 60153, true }, + { 60164, true }, + { 60177, true }, + { 60193, true }, + { 60204, true }, + { 60216, true }, + { 60238, true }, + { 60251, true }, + { 60262, true }, + { 60278, true }, { 60294, true }, - { 60305, true }, - { 60321, true }, - { 60337, true }, - { 60347, true }, - { 60359, true }, - { 60367, true }, - { 60386, true }, - { 60405, true }, + { 60304, true }, + { 60316, true }, + { 60324, true }, + { 60343, true }, + { 60362, true }, + { 60375, true }, + { 60389, true }, + { 60406, true }, { 60418, true }, { 60432, true }, - { 60449, true }, - { 60461, true }, - { 60475, true }, - { 60487, false }, - { 60501, true }, - { 60515, true }, - { 60537, true }, + { 60444, false }, + { 60458, true }, + { 60472, true }, + { 60494, true }, + { 60513, true }, + { 60526, true }, + { 60541, true }, { 60556, true }, - { 60569, true }, - { 60584, true }, - { 60599, true }, - { 60618, true }, - { 60631, true }, - { 60656, true }, - { 60679, true }, - { 60692, true }, + { 60575, true }, + { 60588, true }, + { 60613, true }, + { 60636, true }, + { 60649, true }, + { 60661, true }, + { 60672, true }, + { 60686, true }, { 60704, true }, - { 60715, true }, - { 60729, true }, - { 60747, true }, + { 60723, true }, + { 60737, true }, + { 60750, true }, { 60766, true }, - { 60780, true }, - { 60793, true }, - { 60809, true }, - { 60821, true }, - { 60837, true }, + { 60778, true }, + { 60794, true }, + { 60807, true }, + { 60823, true }, + { 60835, true }, { 60850, true }, - { 60866, true }, - { 60878, true }, - { 60893, true }, - { 60908, true }, - { 60922, true }, - { 60935, true }, - { 60947, true }, - { 60957, true }, - { 60973, true }, - { 60981, true }, - { 60989, true }, - { 61002, true }, - { 61013, true }, - { 61023, true }, - { 61040, true }, - { 61058, true }, - { 61071, true }, - { 61084, true }, - { 61093, true }, - { 61111, true }, + { 60865, true }, + { 60879, true }, + { 60892, true }, + { 60904, true }, + { 60914, true }, + { 60930, true }, + { 60938, true }, + { 60946, true }, + { 60959, true }, + { 60970, true }, + { 60980, true }, + { 60997, true }, + { 61015, true }, + { 61028, true }, + { 61041, true }, + { 61050, true }, + { 61068, true }, + { 61082, true }, + { 61100, true }, + { 61116, true }, { 61125, true }, - { 61143, true }, + { 61134, true }, + { 61149, true }, { 61159, true }, - { 61168, true }, - { 61177, true }, - { 61192, true }, - { 61202, true }, + { 61169, true }, + { 61183, true }, + { 61195, true }, { 61212, true }, { 61226, true }, - { 61238, true }, - { 61255, true }, - { 61269, true }, - { 61277, true }, - { 61285, true }, - { 61294, true }, - { 61306, true }, - { 61319, false }, - { 61327, true }, - { 61353, true }, - { 61366, true }, - { 61380, true }, - { 61390, true }, - { 61405, true }, - { 61414, true }, - { 61425, true }, - { 61437, true }, + { 61234, true }, + { 61242, true }, + { 61251, true }, + { 61263, true }, + { 61276, false }, + { 61284, true }, + { 61310, true }, + { 61323, true }, + { 61337, true }, + { 61347, true }, + { 61362, true }, + { 61371, true }, + { 61382, true }, + { 61394, true }, + { 61407, true }, + { 61415, false }, + { 61429, true }, { 61450, true }, - { 61458, false }, - { 61472, true }, - { 61493, true }, + { 61475, true }, + { 61486, true }, + { 61500, true }, { 61518, true }, { 61529, true }, { 61543, true }, - { 61561, true }, - { 61572, true }, + { 61556, true }, + { 61567, true }, { 61586, true }, - { 61599, true }, - { 61610, true }, - { 61629, true }, + { 61600, true }, + { 61609, true }, + { 61623, true }, + { 61634, true }, { 61643, true }, - { 61652, true }, - { 61666, true }, - { 61677, true }, - { 61686, true }, - { 61704, true }, + { 61661, true }, + { 61680, true }, + { 61690, true }, + { 61703, true }, + { 61714, true }, { 61723, true }, { 61743, true }, - { 61753, true }, - { 61766, true }, - { 61777, true }, - { 61786, true }, - { 61806, true }, - { 61820, true }, - { 61828, true }, - { 61835, true }, + { 61757, true }, + { 61765, true }, + { 61772, true }, + { 61785, true }, + { 61796, true }, + { 61810, true }, + { 61824, true }, + { 61838, true }, { 61848, true }, - { 61859, true }, - { 61873, true }, - { 61887, true }, - { 61901, true }, - { 61911, true }, - { 61921, true }, + { 61858, true }, + { 61865, true }, + { 61875, true }, + { 61884, true }, + { 61899, true }, + { 61906, true }, + { 61916, true }, { 61928, true }, - { 61938, true }, - { 61947, true }, - { 61962, true }, - { 61969, true }, - { 61979, true }, - { 61991, true }, - { 62002, true }, - { 62009, true }, - { 62018, true }, - { 62030, true }, - { 62039, true }, - { 62053, true }, - { 62066, true }, - { 62075, true }, - { 62087, false }, - { 62100, true }, - { 62122, true }, - { 62145, true }, - { 62159, true }, - { 62174, true }, - { 62189, true }, - { 62205, true }, - { 62223, true }, - { 62233, true }, - { 62243, true }, - { 62254, true }, - { 62272, true }, - { 62284, true }, - { 62295, true }, + { 61939, true }, + { 61946, true }, + { 61955, true }, + { 61967, true }, + { 61976, true }, + { 61990, true }, + { 62003, true }, + { 62012, true }, + { 62024, false }, + { 62037, true }, + { 62059, true }, + { 62082, true }, + { 62096, true }, + { 62111, true }, + { 62126, true }, + { 62142, true }, + { 62160, true }, + { 62170, true }, + { 62180, true }, + { 62191, true }, + { 62209, true }, + { 62221, true }, + { 62232, true }, + { 62248, true }, + { 62265, true }, + { 62280, true }, + { 62296, true }, { 62311, true }, - { 62328, true }, - { 62343, true }, - { 62359, true }, - { 62374, true }, - { 62390, true }, - { 62399, true }, - { 62416, true }, - { 62433, true }, - { 62451, true }, - { 62463, true }, - { 62480, true }, - { 62494, true }, - { 62508, true }, - { 62523, true }, - { 62534, true }, - { 62548, true }, - { 62562, true }, - { 62576, true }, - { 62591, true }, - { 62606, true }, - { 62621, true }, - { 62643, true }, - { 62661, true }, - { 62682, true }, - { 62704, true }, - { 62716, true }, - { 62729, true }, - { 62744, true }, - { 62760, true }, - { 62774, true }, - { 62787, true }, - { 62805, false }, + { 62327, true }, + { 62336, true }, + { 62353, true }, + { 62370, true }, + { 62388, true }, + { 62400, true }, + { 62417, true }, + { 62431, true }, + { 62445, true }, + { 62460, true }, + { 62471, true }, + { 62485, true }, + { 62499, true }, + { 62513, true }, + { 62528, true }, + { 62543, true }, + { 62558, true }, + { 62580, true }, + { 62598, true }, + { 62619, true }, + { 62641, true }, + { 62653, true }, + { 62666, true }, + { 62681, true }, + { 62697, true }, + { 62711, true }, + { 62724, true }, + { 62742, false }, + { 62763, true }, + { 62781, true }, + { 62797, true }, + { 62813, true }, { 62826, true }, - { 62844, true }, - { 62860, true }, - { 62876, true }, - { 62889, true }, - { 62904, true }, - { 62918, true }, - { 62929, true }, - { 62954, true }, - { 62970, true }, + { 62841, true }, + { 62855, true }, + { 62866, true }, + { 62891, true }, + { 62907, true }, + { 62924, true }, + { 62936, true }, + { 62948, true }, + { 62961, true }, + { 62972, true }, { 62987, true }, { 62999, true }, - { 63011, true }, + { 63010, true }, { 63024, true }, - { 63035, true }, + { 63034, true }, + { 63043, true }, { 63050, true }, - { 63062, true }, - { 63073, true }, - { 63087, true }, + { 63059, true }, + { 63076, true }, + { 63088, true }, { 63097, true }, - { 63106, true }, - { 63113, true }, - { 63122, true }, - { 63139, true }, - { 63151, true }, - { 63160, true }, - { 63171, true }, - { 63183, true }, - { 63190, false }, - { 63197, false }, - { 63206, true }, - { 63218, true }, - { 63230, true }, - { 63240, true }, - { 63249, true }, - { 63258, true }, - { 63265, true }, - { 63277, true }, - { 63289, true }, - { 63297, true }, + { 63108, true }, + { 63120, true }, + { 63127, false }, + { 63134, false }, + { 63143, true }, + { 63155, true }, + { 63167, true }, + { 63177, true }, + { 63186, true }, + { 63195, true }, + { 63202, true }, + { 63214, true }, + { 63226, true }, + { 63234, true }, + { 63246, true }, + { 63259, true }, + { 63273, true }, + { 63286, true }, + { 63298, true }, { 63309, true }, - { 63322, true }, - { 63336, true }, - { 63349, true }, - { 63361, true }, - { 63372, true }, - { 63387, true }, - { 63397, true }, - { 63405, true }, - { 63417, true }, - { 63428, true }, - { 63440, false }, - { 63458, true }, - { 63476, true }, - { 63498, true }, - { 63520, true }, - { 63531, true }, - { 63543, true }, - { 63554, true }, - { 63570, true }, - { 63593, true }, - { 63611, true }, - { 63622, true }, - { 63640, true }, - { 63667, true }, - { 63679, true }, - { 63697, true }, - { 63711, true }, - { 63727, true }, - { 63743, true }, - { 63757, true }, - { 63771, true }, - { 63785, true }, - { 63809, true }, - { 63837, false }, - { 63848, true }, - { 63866, true }, - { 63884, true }, - { 63908, true }, - { 63929, true }, - { 63950, true }, - { 63971, true }, + { 63324, true }, + { 63334, true }, + { 63342, true }, + { 63354, true }, + { 63365, true }, + { 63377, false }, + { 63395, true }, + { 63413, true }, + { 63435, true }, + { 63457, true }, + { 63468, true }, + { 63480, true }, + { 63491, true }, + { 63507, true }, + { 63530, true }, + { 63548, true }, + { 63559, true }, + { 63577, true }, + { 63604, true }, + { 63616, true }, + { 63634, true }, + { 63648, true }, + { 63664, true }, + { 63680, true }, + { 63693, true }, + { 63707, true }, + { 63721, true }, + { 63735, true }, + { 63759, true }, + { 63787, false }, + { 63798, true }, + { 63816, true }, + { 63834, true }, + { 63858, true }, + { 63879, true }, + { 63900, true }, + { 63921, true }, + { 63935, true }, + { 63948, true }, + { 63967, true }, { 63985, true }, - { 63998, true }, - { 64017, true }, - { 64035, true }, - { 64045, true }, - { 64063, true }, - { 64081, true }, - { 64102, true }, - { 64115, true }, - { 64135, true }, - { 64145, true }, - { 64161, true }, - { 64175, true }, - { 64191, true }, - { 64202, true }, - { 64212, true }, - { 64222, true }, + { 63995, true }, + { 64013, true }, + { 64031, true }, + { 64052, true }, + { 64065, true }, + { 64085, true }, + { 64095, true }, + { 64111, true }, + { 64125, true }, + { 64141, true }, + { 64152, true }, + { 64162, true }, + { 64172, true }, + { 64189, true }, + { 64203, false }, + { 64216, true }, + { 64228, true }, { 64239, true }, - { 64253, false }, + { 64256, true }, { 64266, true }, - { 64278, true }, - { 64289, true }, - { 64306, true }, - { 64316, true }, - { 64330, true }, - { 64349, true }, - { 64367, true }, - { 64378, true }, - { 64389, true }, - { 64400, true }, - { 64411, true }, - { 64422, true }, - { 64433, true }, - { 64453, true }, - { 64466, true }, - { 64484, true }, - { 64497, true }, - { 64507, true }, - { 64522, true }, - { 64536, true }, - { 64554, true }, - { 64571, true }, - { 64588, true }, - { 64601, true }, - { 64615, true }, - { 64624, true }, - { 64643, true }, - { 64654, true }, - { 64671, true }, - { 64680, true }, - { 64694, true }, - { 64702, true }, - { 64710, true }, - { 64717, true }, + { 64280, true }, + { 64299, true }, + { 64317, true }, + { 64328, true }, + { 64339, true }, + { 64350, true }, + { 64361, true }, + { 64372, true }, + { 64383, true }, + { 64403, true }, + { 64416, true }, + { 64434, true }, + { 64447, true }, + { 64457, true }, + { 64472, true }, + { 64486, true }, + { 64504, true }, + { 64521, true }, + { 64538, true }, + { 64551, true }, + { 64565, true }, + { 64574, true }, + { 64593, true }, + { 64604, true }, + { 64621, true }, + { 64630, true }, + { 64644, true }, + { 64652, true }, + { 64660, true }, + { 64667, true }, + { 64679, true }, + { 64686, true }, + { 64695, true }, + { 64714, true }, { 64729, true }, - { 64736, true }, - { 64745, true }, - { 64764, true }, - { 64785, true }, - { 64805, true }, - { 64822, true }, - { 64838, true }, - { 64858, true }, - { 64877, true }, - { 64898, true }, - { 64911, true }, - { 64926, true }, - { 64942, false }, - { 64956, false }, - { 64969, false }, - { 64976, true }, - { 64984, true }, - { 64996, true }, - { 65006, true }, - { 65021, true }, - { 65034, true }, - { 65049, true }, - { 65071, true }, - { 65083, true }, - { 65094, true }, - { 65110, true }, + { 64750, true }, + { 64770, true }, + { 64787, true }, + { 64803, true }, + { 64823, true }, + { 64842, true }, + { 64863, true }, + { 64876, true }, + { 64891, true }, + { 64907, false }, + { 64921, false }, + { 64934, false }, + { 64941, true }, + { 64949, true }, + { 64961, true }, + { 64971, true }, + { 64986, true }, + { 64999, true }, + { 65014, true }, + { 65036, true }, + { 65048, true }, + { 65059, true }, + { 65075, true }, + { 65091, true }, + { 65102, true }, + { 65116, true }, { 65126, true }, - { 65137, true }, - { 65151, true }, - { 65161, true }, - { 65168, true }, - { 65179, true }, - { 65191, false }, - { 65211, false }, - { 65227, true }, - { 65238, true }, - { 65253, true }, - { 65266, true }, - { 65279, true }, - { 65291, true }, - { 65308, false }, - { 65318, true }, - { 65329, true }, + { 65133, true }, + { 65144, true }, + { 65156, false }, + { 65176, false }, + { 65192, true }, + { 65203, true }, + { 65218, true }, + { 65231, true }, + { 65244, true }, + { 65256, true }, + { 65273, false }, + { 65283, true }, + { 65294, true }, + { 65309, true }, + { 65325, true }, { 65344, true }, - { 65360, true }, - { 65379, true }, - { 65393, true }, - { 65410, true }, - { 65436, true }, - { 65451, true }, - { 65466, true }, - { 65481, true }, - { 65495, true }, - { 65514, true }, - { 65539, true }, - { 65553, true }, - { 65569, true }, - { 65590, true }, - { 65624, true }, - { 65648, true }, - { 65677, false }, - { 65692, true }, - { 65708, true }, + { 65358, true }, + { 65375, true }, + { 65401, true }, + { 65416, true }, + { 65431, true }, + { 65446, true }, + { 65460, true }, + { 65479, true }, + { 65504, true }, + { 65518, true }, + { 65534, true }, + { 65555, true }, + { 65589, true }, + { 65613, true }, + { 65642, false }, + { 65657, true }, + { 65673, true }, + { 65698, true }, + { 65710, true }, + { 65724, true }, { 65733, true }, - { 65745, true }, - { 65759, true }, - { 65768, true }, - { 65788, false }, - { 65798, true }, - { 65813, true }, - { 65821, true }, - { 65830, true }, - { 65838, true }, - { 65854, true }, + { 65753, false }, + { 65763, true }, + { 65778, true }, + { 65786, true }, + { 65795, true }, + { 65803, true }, + { 65819, true }, + { 65841, true }, + { 65853, true }, + { 65865, true }, { 65876, true }, - { 65888, true }, - { 65900, true }, - { 65911, true }, - { 65921, false }, - { 65933, true }, - { 65942, true }, - { 65958, true }, - { 65974, true }, - { 65988, true }, - { 66003, true }, - { 66017, true }, - { 66032, true }, - { 66047, true }, - { 66058, false }, - { 66070, true }, + { 65886, false }, + { 65898, true }, + { 65907, true }, + { 65923, true }, + { 65939, true }, + { 65953, true }, + { 65968, true }, + { 65982, true }, + { 65997, true }, + { 66012, true }, + { 66023, false }, + { 66035, true }, + { 66044, true }, + { 66058, true }, + { 66069, true }, { 66079, true }, - { 66093, true }, - { 66104, true }, + { 66096, true }, { 66114, true }, - { 66131, true }, - { 66149, true }, - { 66159, true }, - { 66182, true }, - { 66196, true }, - { 66212, true }, - { 66225, true }, - { 66244, true }, + { 66124, true }, + { 66147, true }, + { 66161, true }, + { 66177, true }, + { 66190, true }, + { 66209, true }, + { 66222, true }, + { 66239, true }, { 66257, true }, - { 66274, true }, - { 66292, true }, - { 66305, true }, + { 66270, true }, + { 66284, true }, + { 66294, true }, + { 66303, true }, { 66319, true }, - { 66329, true }, - { 66338, true }, - { 66354, true }, - { 66361, true }, - { 66382, false }, - { 66397, true }, - { 66412, true }, - { 66429, true }, - { 66440, true }, - { 66449, true }, - { 66458, true }, - { 66470, true }, - { 66488, true }, - { 66498, true }, - { 66511, true }, - { 66522, true }, - { 66537, true }, - { 66548, true }, - { 66564, true }, - { 66574, true }, - { 66590, true }, - { 66612, true }, - { 66624, true }, - { 66637, true }, - { 66651, true }, - { 66664, true }, - { 66679, true }, - { 66695, true }, - { 66706, false }, - { 66719, true }, - { 66731, false }, - { 66744, true }, - { 66756, true }, + { 66326, true }, + { 66347, false }, + { 66362, true }, + { 66377, true }, + { 66394, true }, + { 66405, true }, + { 66414, true }, + { 66423, true }, + { 66435, true }, + { 66453, true }, + { 66463, true }, + { 66476, true }, + { 66487, true }, + { 66502, true }, + { 66513, true }, + { 66529, true }, + { 66539, true }, + { 66555, true }, + { 66577, true }, + { 66589, true }, + { 66602, true }, + { 66616, true }, + { 66629, true }, + { 66644, true }, + { 66660, true }, + { 66671, false }, + { 66684, true }, + { 66696, false }, + { 66709, true }, + { 66721, true }, + { 66738, true }, + { 66745, true }, + { 66761, true }, { 66773, true }, - { 66780, true }, - { 66796, true }, - { 66808, true }, - { 66821, true }, - { 66832, true }, - { 66852, false }, - { 66860, true }, - { 66872, true }, - { 66883, true }, - { 66902, false }, - { 66922, true }, - { 66931, true }, - { 66942, true }, - { 66973, true }, - { 66987, true }, - { 67001, true }, + { 66786, true }, + { 66797, true }, + { 66817, false }, + { 66825, true }, + { 66837, true }, + { 66848, true }, + { 66867, false }, + { 66887, true }, + { 66896, true }, + { 66907, true }, + { 66938, true }, + { 66952, true }, + { 66966, true }, + { 66986, true }, + { 67005, true }, { 67021, true }, - { 67040, true }, - { 67056, true }, - { 67071, true }, - { 67085, true }, - { 67107, true }, - { 67119, true }, - { 67131, true }, - { 67147, true }, - { 67158, true }, - { 67183, true }, - { 67199, true }, + { 67036, true }, + { 67050, true }, + { 67072, true }, + { 67084, true }, + { 67096, true }, + { 67112, true }, + { 67123, true }, + { 67148, true }, + { 67164, true }, + { 67180, true }, + { 67196, true }, { 67215, true }, - { 67231, true }, - { 67250, true }, - { 67274, true }, - { 67290, true }, - { 67306, false }, - { 67319, true }, - { 67329, true }, - { 67341, true }, + { 67239, true }, + { 67255, true }, + { 67271, false }, + { 67284, true }, + { 67294, true }, + { 67306, true }, + { 67318, true }, + { 67333, true }, { 67353, true }, - { 67368, true }, - { 67388, true }, - { 67408, true }, - { 67429, false }, - { 67445, true }, - { 67463, true }, + { 67373, true }, + { 67394, false }, + { 67410, true }, + { 67428, true }, + { 67439, true }, + { 67454, true }, + { 67466, false }, { 67474, true }, - { 67489, true }, - { 67501, false }, - { 67509, true }, - { 67523, true }, - { 67537, true }, - { 67549, true }, - { 67563, true }, - { 67575, true }, - { 67589, true }, - { 67605, true }, - { 67625, true }, - { 67656, true }, - { 67687, true }, - { 67709, true }, - { 67727, true }, - { 67741, true }, - { 67763, true }, - { 67778, true }, - { 67797, true }, - { 67806, true }, - { 67821, true }, - { 67836, true }, - { 67851, true }, - { 67868, true }, - { 67881, true }, - { 67894, true }, - { 67904, true }, - { 67914, true }, - { 67937, true }, - { 67948, true }, - { 67965, true }, - { 67980, true }, - { 67987, true }, - { 67999, true }, - { 68012, true }, - { 68029, true }, - { 68039, true }, - { 68048, true }, - { 68067, true }, - { 68085, true }, - { 68106, true }, + { 67488, true }, + { 67502, true }, + { 67514, true }, + { 67528, true }, + { 67540, true }, + { 67554, true }, + { 67570, true }, + { 67590, true }, + { 67621, true }, + { 67652, true }, + { 67674, true }, + { 67692, true }, + { 67706, true }, + { 67728, true }, + { 67743, true }, + { 67762, true }, + { 67771, true }, + { 67786, true }, + { 67801, true }, + { 67816, true }, + { 67833, true }, + { 67846, true }, + { 67859, true }, + { 67869, true }, + { 67879, true }, + { 67902, true }, + { 67913, true }, + { 67930, true }, + { 67945, true }, + { 67952, true }, + { 67964, true }, + { 67977, true }, + { 67994, true }, + { 68004, true }, + { 68013, true }, + { 68032, true }, + { 68050, true }, + { 68071, true }, + { 68091, true }, + { 68104, true }, { 68126, true }, - { 68139, true }, - { 68161, true }, - { 68173, true }, - { 68189, true }, - { 68199, true }, - { 68212, true }, - { 68226, true }, - { 68248, true }, - { 68265, true }, + { 68138, true }, + { 68154, true }, + { 68164, true }, + { 68177, true }, + { 68191, true }, + { 68213, true }, + { 68230, true }, + { 68244, true }, + { 68252, true }, + { 68264, true }, { 68279, true }, - { 68287, true }, - { 68299, true }, - { 68314, true }, - { 68324, true }, - { 68335, true }, - { 68347, true }, - { 68360, true }, - { 68371, true }, - { 68380, true }, - { 68390, true }, - { 68412, true }, - { 68430, true }, - { 68441, true }, - { 68456, true }, - { 68469, true }, - { 68483, true }, - { 68498, true }, - { 68510, true }, - { 68520, true }, - { 68538, true }, - { 68549, true }, - { 68557, true }, - { 68571, true }, - { 68586, true }, - { 68599, true }, - { 68610, true }, - { 68621, false }, - { 68637, true }, - { 68650, true }, - { 68671, true }, - { 68686, true }, - { 68697, true }, - { 68713, true }, - { 68734, true }, - { 68746, true }, - { 68755, true }, - { 68773, true }, - { 68782, true }, - { 68793, true }, - { 68805, false }, - { 68823, true }, - { 68842, true }, - { 68861, true }, - { 68875, true }, - { 68895, true }, - { 68908, true }, - { 68920, true }, - { 68939, true }, - { 68956, true }, - { 68968, true }, - { 68981, true }, - { 68996, true }, - { 69010, true }, - { 69020, true }, - { 69030, true }, - { 69040, true }, - { 69052, true }, - { 69061, true }, - { 69076, true }, - { 69091, true }, - { 69104, true }, + { 68289, true }, + { 68300, true }, + { 68312, true }, + { 68325, true }, + { 68336, true }, + { 68345, true }, + { 68355, true }, + { 68377, true }, + { 68395, true }, + { 68406, true }, + { 68421, true }, + { 68434, true }, + { 68448, true }, + { 68463, true }, + { 68475, true }, + { 68485, true }, + { 68503, true }, + { 68514, true }, + { 68522, true }, + { 68536, true }, + { 68551, true }, + { 68564, true }, + { 68575, true }, + { 68586, false }, + { 68602, true }, + { 68615, true }, + { 68636, true }, + { 68651, true }, + { 68662, true }, + { 68678, true }, + { 68699, true }, + { 68711, true }, + { 68720, true }, + { 68738, true }, + { 68747, true }, + { 68758, true }, + { 68770, false }, + { 68788, true }, + { 68807, true }, + { 68826, true }, + { 68840, true }, + { 68860, true }, + { 68873, true }, + { 68885, true }, + { 68904, true }, + { 68921, true }, + { 68933, true }, + { 68946, true }, + { 68961, true }, + { 68975, true }, + { 68985, true }, + { 68995, true }, + { 69005, true }, + { 69017, true }, + { 69026, true }, + { 69041, true }, + { 69056, true }, + { 69069, true }, + { 69078, true }, + { 69105, true }, { 69113, true }, - { 69140, true }, + { 69134, true }, { 69148, true }, - { 69169, true }, - { 69183, true }, - { 69193, true }, - { 69201, true }, - { 69210, true }, - { 69219, true }, - { 69232, true }, - { 69249, true }, - { 69257, true }, - { 69278, true }, - { 69297, true }, - { 69309, true }, - { 69327, true }, - { 69339, true }, - { 69350, true }, - { 69359, true }, - { 69368, true }, - { 69375, true }, - { 69383, true }, - { 69397, true }, - { 69408, true }, - { 69419, true }, - { 69434, true }, - { 69445, true }, - { 69458, false }, - { 69468, true }, - { 69476, true }, + { 69158, true }, + { 69166, true }, + { 69175, true }, + { 69184, true }, + { 69197, true }, + { 69214, true }, + { 69222, true }, + { 69243, true }, + { 69262, true }, + { 69274, true }, + { 69292, true }, + { 69304, true }, + { 69315, true }, + { 69324, true }, + { 69333, true }, + { 69340, true }, + { 69348, true }, + { 69362, true }, + { 69373, true }, + { 69384, true }, + { 69399, true }, + { 69410, true }, + { 69423, false }, + { 69433, true }, + { 69441, true }, + { 69455, true }, + { 69475, true }, { 69490, true }, - { 69510, true }, - { 69525, true }, - { 69538, true }, - { 69550, true }, - { 69565, true }, - { 69578, true }, - { 69605, true }, - { 69619, true }, + { 69503, true }, + { 69515, true }, + { 69530, true }, + { 69543, true }, + { 69570, true }, + { 69584, true }, + { 69599, true }, + { 69611, true }, + { 69621, true }, { 69634, true }, - { 69646, true }, - { 69656, true }, - { 69669, true }, - { 69686, true }, - { 69699, true }, - { 69709, true }, - { 69736, true }, - { 69752, true }, - { 69762, true }, - { 69778, true }, - { 69789, true }, + { 69651, true }, + { 69664, true }, + { 69674, true }, + { 69701, true }, + { 69717, true }, + { 69727, true }, + { 69743, true }, + { 69754, true }, + { 69765, true }, + { 69779, true }, + { 69790, true }, { 69800, true }, - { 69814, true }, - { 69824, true }, - { 69845, true }, - { 69853, true }, - { 69865, true }, - { 69888, true }, - { 69907, true }, - { 69915, true }, - { 69925, true }, - { 69934, true }, - { 69952, true }, - { 69984, true }, - { 70000, true }, - { 70021, true }, - { 70041, true }, + { 69821, true }, + { 69829, true }, + { 69841, true }, + { 69864, true }, + { 69883, true }, + { 69891, true }, + { 69901, true }, + { 69910, true }, + { 69928, true }, + { 69960, true }, + { 69976, true }, + { 69997, true }, + { 70017, true }, + { 70030, true }, + { 70044, true }, { 70054, true }, - { 70068, true }, - { 70078, true }, - { 70097, true }, - { 70115, true }, - { 70126, true }, - { 70134, true }, - { 70148, true }, - { 70160, true }, - { 70173, true }, - { 70182, true }, - { 70192, true }, - { 70215, true }, - { 70230, true }, - { 70246, true }, - { 70265, true }, - { 70283, true }, - { 70297, true }, - { 70311, true }, - { 70324, true }, - { 70341, true }, - { 70353, true }, - { 70367, true }, - { 70383, true }, + { 70073, true }, + { 70091, true }, + { 70102, true }, + { 70110, true }, + { 70124, true }, + { 70136, true }, + { 70149, true }, + { 70158, true }, + { 70168, true }, + { 70191, true }, + { 70206, true }, + { 70222, true }, + { 70241, true }, + { 70259, true }, + { 70273, true }, + { 70287, true }, + { 70300, true }, + { 70312, true }, + { 70326, true }, + { 70342, true }, + { 70357, true }, + { 70366, true }, + { 70379, true }, { 70398, true }, - { 70407, true }, - { 70420, true }, - { 70439, true }, - { 70454, true }, - { 70467, true }, - { 70483, true }, - { 70500, false }, - { 70517, true }, - { 70539, true }, - { 70561, true }, - { 70573, true }, - { 70587, false }, - { 70600, true }, - { 70609, true }, - { 70625, true }, - { 70642, true }, - { 70656, true }, - { 70670, true }, - { 70682, true }, - { 70695, true }, - { 70708, true }, - { 70718, true }, - { 70732, true }, - { 70745, true }, - { 70767, true }, - { 70789, true }, - { 70800, true }, - { 70815, true }, - { 70826, true }, - { 70846, true }, - { 70869, true }, - { 70886, true }, - { 70905, true }, - { 70932, true }, - { 70951, true }, - { 70972, true }, - { 70991, true }, - { 71006, true }, - { 71026, false }, - { 71034, true }, + { 70413, true }, + { 70426, true }, + { 70442, true }, + { 70459, false }, + { 70476, true }, + { 70498, true }, + { 70520, true }, + { 70532, true }, + { 70546, false }, + { 70559, true }, + { 70568, true }, + { 70584, true }, + { 70601, true }, + { 70615, true }, + { 70629, true }, + { 70641, true }, + { 70654, true }, + { 70667, true }, + { 70677, true }, + { 70691, true }, + { 70704, true }, + { 70726, true }, + { 70748, true }, + { 70759, true }, + { 70774, true }, + { 70785, true }, + { 70805, true }, + { 70828, true }, + { 70845, true }, + { 70864, true }, + { 70891, true }, + { 70910, true }, + { 70931, true }, + { 70950, true }, + { 70965, true }, + { 70985, false }, + { 70993, true }, + { 71004, true }, + { 71014, true }, + { 71027, true }, { 71045, true }, - { 71055, true }, - { 71068, true }, - { 71086, true }, - { 71102, true }, - { 71117, true }, + { 71061, true }, + { 71076, true }, + { 71090, true }, + { 71106, true }, + { 71113, true }, + { 71120, true }, { 71131, true }, - { 71147, true }, - { 71154, true }, - { 71161, true }, - { 71172, true }, - { 71185, true }, - { 71199, true }, + { 71144, true }, + { 71158, true }, + { 71175, true }, + { 71189, true }, + { 71205, true }, { 71216, true }, - { 71230, true }, - { 71246, true }, - { 71257, true }, - { 71264, true }, - { 71273, false }, - { 71288, true }, - { 71316, true }, - { 71331, true }, - { 71352, true }, - { 71366, true }, - { 71387, true }, - { 71403, true }, - { 71413, true }, - { 71423, true }, - { 71436, true }, - { 71449, true }, - { 71466, true }, - { 71485, true }, + { 71223, true }, + { 71232, false }, + { 71247, true }, + { 71275, true }, + { 71290, true }, + { 71311, true }, + { 71325, true }, + { 71346, true }, + { 71362, true }, + { 71372, true }, + { 71382, true }, + { 71395, true }, + { 71408, true }, + { 71425, true }, + { 71444, true }, + { 71463, true }, + { 71481, true }, + { 71492, true }, { 71504, true }, - { 71522, true }, - { 71533, true }, - { 71545, true }, - { 71557, true }, - { 71568, true }, - { 71583, true }, - { 71596, true }, - { 71605, true }, - { 71618, true }, - { 71625, false }, - { 71633, true }, - { 71641, true }, - { 71656, true }, - { 71669, true }, - { 71680, false }, - { 71692, true }, - { 71716, true }, - { 71731, true }, - { 71744, true }, - { 71758, true }, - { 71766, true }, - { 71791, true }, - { 71811, true }, - { 71835, true }, - { 71847, true }, - { 71863, true }, - { 71872, true }, - { 71887, true }, - { 71907, true }, - { 71920, true }, - { 71936, true }, - { 71950, true }, - { 71966, true }, - { 71985, true }, - { 72005, true }, - { 72023, true }, - { 72042, true }, - { 72059, true }, - { 72088, true }, - { 72108, true }, - { 72125, true }, - { 72141, true }, - { 72150, true }, - { 72163, true }, - { 72175, false }, - { 72189, true }, - { 72206, true }, - { 72226, true }, - { 72238, true }, - { 72251, true }, - { 72266, true }, - { 72277, true }, - { 72294, true }, - { 72303, true }, - { 72324, true }, - { 72339, true }, - { 72357, true }, - { 72373, true }, - { 72394, true }, - { 72408, true }, - { 72422, true }, - { 72433, true }, - { 72444, true }, - { 72460, true }, - { 72472, true }, - { 72483, true }, + { 71516, true }, + { 71527, true }, + { 71542, true }, + { 71555, true }, + { 71564, true }, + { 71577, true }, + { 71584, false }, + { 71592, true }, + { 71600, true }, + { 71615, true }, + { 71628, true }, + { 71639, false }, + { 71651, true }, + { 71675, true }, + { 71690, true }, + { 71703, true }, + { 71717, true }, + { 71725, true }, + { 71750, true }, + { 71770, true }, + { 71794, true }, + { 71806, true }, + { 71822, true }, + { 71831, true }, + { 71846, true }, + { 71866, true }, + { 71879, true }, + { 71895, true }, + { 71909, true }, + { 71925, true }, + { 71944, true }, + { 71964, true }, + { 71982, true }, + { 72001, true }, + { 72018, true }, + { 72047, true }, + { 72067, true }, + { 72084, true }, + { 72100, true }, + { 72109, true }, + { 72122, true }, + { 72134, false }, + { 72148, true }, + { 72165, true }, + { 72185, true }, + { 72197, true }, + { 72210, true }, + { 72225, true }, + { 72236, true }, + { 72253, true }, + { 72262, true }, + { 72283, true }, + { 72298, true }, + { 72316, true }, + { 72332, true }, + { 72353, true }, + { 72367, true }, + { 72381, true }, + { 72392, true }, + { 72403, true }, + { 72419, true }, + { 72431, true }, + { 72442, true }, + { 72456, true }, + { 72465, true }, + { 72480, true }, + { 72489, true }, { 72497, true }, - { 72506, true }, - { 72521, true }, - { 72530, true }, - { 72538, true }, - { 72549, true }, - { 72560, true }, - { 72574, true }, - { 72589, true }, - { 72607, true }, + { 72508, true }, + { 72519, true }, + { 72533, true }, + { 72548, true }, + { 72566, true }, + { 72580, true }, + { 72590, true }, + { 72600, true }, + { 72609, true }, { 72621, true }, - { 72631, true }, { 72641, true }, - { 72650, true }, - { 72662, true }, - { 72682, true }, - { 72705, true }, - { 72720, true }, - { 72743, true }, - { 72751, true }, - { 72764, true }, - { 72776, true }, - { 72788, true }, - { 72798, false }, - { 72807, false }, - { 72816, false }, - { 72825, true }, - { 72844, true }, - { 72867, true }, - { 72882, true }, - { 72896, true }, - { 72909, true }, - { 72925, true }, - { 72938, true }, - { 72953, true }, - { 72969, false }, - { 72988, true }, - { 73007, true }, - { 73015, true }, - { 73029, false }, - { 73049, true }, - { 73061, true }, - { 73076, true }, - { 73094, true }, - { 73105, true }, - { 73115, true }, - { 73129, true }, + { 72664, true }, + { 72679, true }, + { 72702, true }, + { 72710, true }, + { 72723, true }, + { 72735, true }, + { 72747, true }, + { 72757, false }, + { 72766, false }, + { 72775, false }, + { 72784, true }, + { 72803, true }, + { 72826, true }, + { 72841, true }, + { 72855, true }, + { 72868, true }, + { 72884, true }, + { 72897, true }, + { 72912, true }, + { 72928, false }, + { 72947, true }, + { 72966, true }, + { 72974, true }, + { 72988, false }, + { 73008, true }, + { 73020, true }, + { 73035, true }, + { 73053, true }, + { 73064, true }, + { 73074, true }, + { 73088, true }, + { 73101, true }, + { 73116, true }, { 73142, true }, { 73157, true }, - { 73183, true }, - { 73198, true }, + { 73169, true }, + { 73194, false }, + { 73203, true }, { 73210, true }, - { 73235, false }, - { 73244, true }, - { 73251, true }, - { 73268, true }, - { 73282, true }, - { 73296, true }, + { 73227, true }, + { 73241, true }, + { 73255, true }, + { 73271, true }, + { 73298, true }, { 73312, true }, - { 73339, true }, - { 73353, true }, - { 73362, true }, - { 73375, true }, - { 73398, true }, - { 73418, true }, - { 73437, true }, - { 73459, false }, - { 73470, true }, - { 73484, true }, - { 73504, true }, - { 73529, true }, - { 73541, true }, - { 73563, true }, - { 73578, true }, - { 73593, true }, - { 73610, true }, - { 73625, true }, - { 73642, true }, - { 73657, true }, - { 73672, true }, + { 73321, true }, + { 73334, true }, + { 73357, true }, + { 73377, true }, + { 73396, true }, + { 73418, false }, + { 73429, true }, + { 73443, true }, + { 73463, true }, + { 73488, true }, + { 73500, true }, + { 73522, true }, + { 73537, true }, + { 73552, true }, + { 73569, true }, + { 73584, true }, + { 73601, true }, + { 73616, true }, + { 73631, true }, + { 73643, true }, + { 73657, false }, + { 73667, true }, { 73684, true }, - { 73698, false }, - { 73708, true }, - { 73725, true }, - { 73736, false }, - { 73751, true }, - { 73768, true }, - { 73782, true }, - { 73795, true }, - { 73807, true }, - { 73817, true }, - { 73829, true }, - { 73844, true }, - { 73855, true }, - { 73875, true }, - { 73887, true }, - { 73899, true }, - { 73910, true }, - { 73935, true }, - { 73944, true }, - { 73952, true }, - { 73963, true }, - { 73979, false }, - { 73991, true }, - { 74006, true }, - { 74014, true }, - { 74024, true }, - { 74039, true }, - { 74053, true }, - { 74063, true }, - { 74081, true }, - { 74093, true }, - { 74121, true }, - { 74133, true }, - { 74147, true }, - { 74175, true }, - { 74189, true }, - { 74205, true }, - { 74222, true }, - { 74236, true }, - { 74253, true }, - { 74275, true }, - { 74285, true }, - { 74303, true }, - { 74322, true }, - { 74341, true }, - { 74366, true }, - { 74385, true }, - { 74399, true }, - { 74412, true }, - { 74441, true }, - { 74471, true }, - { 74483, true }, - { 74492, true }, - { 74505, true }, - { 74516, true }, - { 74526, true }, - { 74543, true }, - { 74566, true }, - { 74589, true }, - { 74603, true }, - { 74617, true }, - { 74641, false }, - { 74651, true }, - { 74667, true }, - { 74675, true }, - { 74694, true }, + { 73695, false }, + { 73710, true }, + { 73727, true }, + { 73741, true }, + { 73754, true }, + { 73766, true }, + { 73776, true }, + { 73788, true }, + { 73803, true }, + { 73814, true }, + { 73834, true }, + { 73846, true }, + { 73858, true }, + { 73869, true }, + { 73894, true }, + { 73903, true }, + { 73911, true }, + { 73922, true }, + { 73938, false }, + { 73950, true }, + { 73965, true }, + { 73973, true }, + { 73983, true }, + { 73998, true }, + { 74012, true }, + { 74022, true }, + { 74040, true }, + { 74052, true }, + { 74080, true }, + { 74092, true }, + { 74106, true }, + { 74134, true }, + { 74148, true }, + { 74164, true }, + { 74181, true }, + { 74195, true }, + { 74212, true }, + { 74234, true }, + { 74244, true }, + { 74262, true }, + { 74281, true }, + { 74300, true }, + { 74325, true }, + { 74344, true }, + { 74358, true }, + { 74371, true }, + { 74400, true }, + { 74430, true }, + { 74442, true }, + { 74451, true }, + { 74464, true }, + { 74475, true }, + { 74485, true }, + { 74502, true }, + { 74525, true }, + { 74548, true }, + { 74562, true }, + { 74576, true }, + { 74600, false }, + { 74610, true }, + { 74626, true }, + { 74634, true }, + { 74653, true }, + { 74665, true }, + { 74676, true }, + { 74692, true }, { 74706, true }, - { 74717, true }, - { 74733, true }, - { 74747, true }, - { 74759, true }, - { 74772, true }, - { 74791, true }, - { 74802, true }, - { 74814, true }, - { 74827, true }, + { 74718, true }, + { 74731, true }, + { 74750, true }, + { 74761, true }, + { 74773, true }, + { 74786, true }, + { 74796, true }, + { 74809, true }, + { 74821, true }, { 74837, true }, - { 74850, true }, - { 74862, true }, - { 74878, true }, - { 74886, false }, - { 74894, true }, - { 74916, true }, - { 74937, true }, - { 74961, true }, - { 74977, true }, - { 74991, true }, - { 75008, true }, - { 75020, true }, - { 75030, true }, - { 75045, true }, - { 75055, true }, + { 74845, false }, + { 74853, true }, + { 74875, true }, + { 74896, true }, + { 74920, true }, + { 74936, true }, + { 74950, true }, + { 74967, true }, + { 74979, true }, + { 74989, true }, + { 75004, true }, + { 75014, true }, + { 75037, true }, + { 75051, true }, + { 75066, true }, { 75078, true }, - { 75092, true }, - { 75104, true }, - { 75113, true }, - { 75126, true }, + { 75087, true }, + { 75100, true }, + { 75115, true }, + { 75129, true }, { 75141, true }, - { 75155, true }, - { 75167, true }, - { 75182, false }, - { 75199, true }, - { 75210, true }, - { 75221, true }, - { 75231, true }, - { 75245, false }, - { 75254, true }, - { 75262, true }, - { 75287, true }, - { 75296, true }, - { 75304, true }, - { 75312, true }, - { 75321, true }, - { 75333, true }, - { 75345, true }, - { 75355, true }, + { 75156, false }, + { 75173, true }, + { 75184, true }, + { 75195, true }, + { 75205, true }, + { 75219, false }, + { 75228, true }, + { 75236, true }, + { 75261, true }, + { 75270, true }, + { 75278, true }, + { 75286, true }, + { 75295, true }, + { 75307, true }, + { 75319, true }, + { 75329, true }, + { 75339, true }, + { 75353, true }, { 75365, true }, { 75379, true }, - { 75391, true }, + { 75394, true }, { 75405, true }, - { 75420, true }, - { 75431, true }, + { 75413, true }, + { 75424, true }, { 75439, true }, - { 75450, true }, - { 75465, true }, - { 75478, true }, - { 75485, true }, - { 75505, true }, - { 75514, true }, - { 75527, true }, - { 75544, true }, - { 75559, true }, - { 75579, true }, - { 75588, true }, - { 75597, true }, - { 75609, false }, - { 75618, true }, - { 75628, true }, - { 75638, false }, - { 75645, true }, - { 75656, true }, - { 75669, true }, - { 75684, true }, - { 75691, true }, - { 75711, true }, - { 75721, true }, - { 75732, true }, - { 75745, true }, - { 75759, true }, - { 75768, true }, - { 75784, true }, - { 75793, false }, - { 75802, true }, - { 75810, true }, - { 75822, true }, - { 75829, true }, - { 75847, true }, - { 75859, true }, - { 75872, true }, - { 75888, true }, - { 75901, true }, - { 75910, true }, - { 75919, true }, - { 75930, true }, - { 75950, true }, - { 75965, true }, - { 75981, false }, - { 75996, true }, - { 76015, true }, - { 76026, true }, - { 76043, false }, - { 76064, false }, - { 76080, false }, - { 76100, true }, - { 76112, true }, - { 76135, true }, - { 76147, true }, - { 76160, true }, - { 76172, true }, - { 76184, true }, - { 76195, true }, - { 76205, true }, - { 76214, true }, - { 76225, true }, - { 76243, true }, - { 76270, true }, - { 76280, true }, - { 76294, true }, - { 76309, true }, - { 76319, true }, - { 76330, true }, - { 76339, true }, - { 76353, true }, - { 76372, true }, - { 76385, true }, - { 76395, true }, - { 76403, true }, - { 76410, true }, - { 76423, true }, - { 76433, true }, - { 76442, false }, - { 76452, true }, - { 76461, true }, - { 76473, true }, - { 76483, false }, - { 76500, true }, - { 76509, true }, - { 76519, true }, - { 76527, true }, - { 76537, true }, - { 76547, true }, - { 76560, true }, - { 76575, true }, - { 76587, true }, - { 76603, true }, - { 76617, true }, - { 76624, true }, - { 76636, true }, - { 76652, true }, - { 76666, true }, - { 76677, true }, - { 76686, true }, - { 76698, true }, - { 76708, true }, - { 76720, true }, - { 76730, true }, - { 76748, true }, - { 76763, true }, - { 76776, true }, - { 76783, true }, - { 76800, true }, - { 76811, true }, - { 76821, true }, - { 76831, true }, - { 76840, true }, - { 76862, true }, - { 76881, true }, - { 76895, true }, - { 76910, true }, - { 76934, true }, - { 76956, true }, - { 76970, true }, - { 76983, true }, - { 76997, true }, - { 77008, true }, - { 77017, true }, - { 77028, true }, - { 77047, true }, - { 77061, true }, - { 77072, true }, - { 77084, true }, - { 77103, true }, - { 77116, true }, - { 77125, true }, - { 77141, true }, - { 77154, true }, - { 77166, true }, - { 77179, true }, - { 77187, true }, - { 77199, true }, - { 77208, true }, - { 77223, true }, - { 77232, true }, - { 77244, true }, - { 77254, true }, - { 77269, true }, - { 77277, true }, + { 75452, true }, + { 75459, true }, + { 75479, true }, + { 75488, true }, + { 75501, true }, + { 75518, true }, + { 75533, true }, + { 75553, true }, + { 75562, true }, + { 75571, true }, + { 75583, false }, + { 75592, true }, + { 75602, true }, + { 75612, false }, + { 75619, true }, + { 75630, true }, + { 75643, true }, + { 75658, true }, + { 75679, true }, + { 75686, true }, + { 75706, true }, + { 75716, true }, + { 75727, true }, + { 75740, true }, + { 75754, true }, + { 75763, true }, + { 75779, true }, + { 75788, false }, + { 75797, true }, + { 75805, true }, + { 75817, true }, + { 75824, true }, + { 75842, true }, + { 75854, true }, + { 75867, true }, + { 75883, true }, + { 75896, false }, + { 75905, true }, + { 75914, true }, + { 75925, true }, + { 75945, true }, + { 75960, true }, + { 75976, false }, + { 75991, true }, + { 76010, true }, + { 76021, true }, + { 76038, false }, + { 76059, false }, + { 76075, false }, + { 76095, true }, + { 76107, true }, + { 76130, true }, + { 76142, true }, + { 76155, true }, + { 76167, true }, + { 76178, true }, + { 76188, true }, + { 76197, true }, + { 76208, true }, + { 76226, true }, + { 76253, true }, + { 76263, true }, + { 76277, true }, + { 76292, true }, + { 76302, true }, + { 76313, true }, + { 76322, true }, + { 76336, true }, + { 76355, true }, + { 76368, true }, + { 76378, true }, + { 76386, true }, + { 76393, true }, + { 76406, true }, + { 76416, true }, + { 76425, false }, + { 76435, true }, + { 76444, true }, + { 76456, true }, + { 76466, false }, + { 76483, true }, + { 76493, true }, + { 76501, true }, + { 76511, true }, + { 76521, true }, + { 76534, true }, + { 76549, true }, + { 76561, true }, + { 76577, true }, + { 76591, true }, + { 76598, true }, + { 76610, true }, + { 76626, true }, + { 76640, true }, + { 76651, true }, + { 76660, true }, + { 76672, true }, + { 76682, true }, + { 76694, true }, + { 76704, true }, + { 76722, true }, + { 76737, true }, + { 76750, true }, + { 76757, true }, + { 76774, true }, + { 76785, true }, + { 76795, true }, + { 76805, true }, + { 76814, true }, + { 76836, true }, + { 76855, true }, + { 76869, true }, + { 76884, true }, + { 76908, true }, + { 76930, true }, + { 76944, true }, + { 76957, true }, + { 76971, true }, + { 76982, true }, + { 76991, true }, + { 77002, true }, + { 77021, true }, + { 77035, true }, + { 77046, true }, + { 77058, true }, + { 77077, true }, + { 77090, true }, + { 77099, true }, + { 77114, true }, + { 77130, true }, + { 77143, true }, + { 77155, true }, + { 77168, true }, + { 77176, true }, + { 77188, true }, + { 77197, true }, + { 77212, true }, + { 77221, true }, + { 77233, true }, + { 77243, true }, + { 77258, true }, + { 77266, true }, + { 77281, true }, { 77292, true }, { 77303, true }, - { 77314, true }, - { 77323, true }, - { 77337, true }, - { 77351, true }, - { 77374, true }, - { 77399, true }, - { 77418, true }, - { 77432, true }, - { 77448, true }, - { 77462, true }, - { 77478, true }, - { 77496, true }, - { 77513, true }, - { 77528, true }, - { 77543, true }, - { 77552, true }, - { 77565, true }, - { 77582, true }, - { 77595, true }, + { 77312, true }, + { 77326, true }, + { 77340, true }, + { 77363, true }, + { 77388, true }, + { 77407, true }, + { 77421, true }, + { 77437, true }, + { 77451, true }, + { 77467, true }, + { 77485, true }, + { 77502, true }, + { 77517, true }, + { 77532, true }, + { 77541, true }, + { 77554, true }, + { 77571, true }, + { 77584, true }, + { 77594, true }, { 77605, true }, { 77616, true }, - { 77627, true }, - { 77637, true }, - { 77649, true }, - { 77670, true }, - { 77684, false }, - { 77704, false }, - { 77716, true }, - { 77729, true }, - { 77739, true }, - { 77752, true }, - { 77765, true }, - { 77781, true }, - { 77798, true }, - { 77810, true }, - { 77830, true }, - { 77844, true }, - { 77858, true }, - { 77874, true }, - { 77886, true }, - { 77907, false }, - { 77921, true }, - { 77939, true }, - { 77951, true }, - { 77971, true }, - { 77987, true }, - { 78009, true }, - { 78031, true }, - { 78050, true }, - { 78067, true }, - { 78079, true }, - { 78092, true }, - { 78117, true }, - { 78130, false }, + { 77626, true }, + { 77638, true }, + { 77659, true }, + { 77673, false }, + { 77693, false }, + { 77705, true }, + { 77718, true }, + { 77728, true }, + { 77741, true }, + { 77754, true }, + { 77770, true }, + { 77787, true }, + { 77799, true }, + { 77819, true }, + { 77833, true }, + { 77847, true }, + { 77863, true }, + { 77875, true }, + { 77896, false }, + { 77910, true }, + { 77928, true }, + { 77940, true }, + { 77960, true }, + { 77976, true }, + { 77998, true }, + { 78020, true }, + { 78039, true }, + { 78056, true }, + { 78068, true }, + { 78081, true }, + { 78106, true }, + { 78119, false }, + { 78132, true }, { 78143, true }, - { 78154, true }, - { 78170, true }, - { 78185, true }, - { 78205, true }, - { 78230, true }, - { 78246, true }, + { 78159, true }, + { 78174, true }, + { 78194, true }, + { 78219, true }, + { 78235, true }, + { 78252, true }, { 78263, true }, - { 78274, true }, - { 78288, true }, - { 78301, true }, - { 78314, true }, - { 78326, true }, - { 78343, true }, - { 78355, false }, - { 78364, false }, + { 78277, true }, + { 78290, true }, + { 78303, true }, + { 78315, true }, + { 78332, true }, + { 78344, false }, + { 78353, false }, + { 78363, true }, { 78374, true }, - { 78385, true }, - { 78398, false }, + { 78387, false }, + { 78400, true }, { 78411, true }, - { 78422, true }, - { 78436, true }, - { 78459, true }, - { 78473, true }, - { 78488, true }, - { 78501, true }, - { 78520, true }, - { 78532, true }, - { 78548, true }, - { 78564, true }, - { 78581, true }, - { 78594, true }, - { 78606, true }, - { 78619, true }, - { 78631, true }, - { 78646, true }, - { 78663, true }, - { 78672, true }, - { 78699, true }, - { 78720, true }, - { 78737, true }, - { 78748, false }, - { 78766, true }, - { 78778, true }, - { 78790, true }, - { 78802, true }, - { 78821, true }, - { 78847, true }, - { 78870, true }, - { 78887, true }, - { 78900, true }, - { 78912, true }, - { 78929, false }, - { 78948, true }, - { 78966, true }, - { 78997, true }, - { 79012, true }, - { 79031, true }, - { 79053, true }, - { 79065, true }, - { 79082, true }, - { 79099, true }, - { 79118, true }, - { 79130, true }, - { 79145, true }, - { 79162, true }, - { 79179, true }, - { 79195, true }, - { 79211, true }, - { 79235, true }, - { 79260, true }, - { 79282, true }, - { 79309, true }, - { 79327, true }, - { 79344, true }, - { 79359, true }, - { 79377, true }, - { 79398, true }, - { 79426, true }, - { 79450, true }, - { 79474, true }, - { 79487, true }, - { 79500, true }, - { 79517, true }, - { 79532, true }, - { 79557, false }, - { 79571, true }, - { 79581, true }, - { 79600, true }, - { 79616, true }, - { 79640, true }, - { 79655, true }, - { 79672, true }, - { 79682, true }, - { 79694, true }, - { 79707, true }, - { 79725, true }, - { 79738, true }, - { 79752, true }, - { 79765, true }, - { 79778, true }, - { 79797, true }, - { 79815, true }, - { 79829, true }, - { 79839, false }, - { 79851, true }, - { 79859, true }, - { 79869, true }, - { 79879, true }, - { 79891, true }, - { 79905, false }, - { 79918, true }, + { 78425, true }, + { 78448, true }, + { 78462, true }, + { 78477, true }, + { 78490, true }, + { 78509, true }, + { 78521, true }, + { 78537, true }, + { 78553, true }, + { 78570, true }, + { 78583, true }, + { 78595, true }, + { 78608, true }, + { 78620, true }, + { 78635, true }, + { 78652, true }, + { 78661, true }, + { 78688, true }, + { 78709, true }, + { 78726, true }, + { 78737, false }, + { 78755, true }, + { 78767, true }, + { 78779, true }, + { 78791, true }, + { 78810, true }, + { 78836, true }, + { 78859, true }, + { 78876, true }, + { 78889, true }, + { 78901, true }, + { 78918, false }, + { 78937, true }, + { 78955, true }, + { 78986, true }, + { 79001, true }, + { 79020, true }, + { 79042, true }, + { 79054, true }, + { 79071, true }, + { 79088, true }, + { 79107, true }, + { 79119, true }, + { 79134, true }, + { 79151, true }, + { 79168, true }, + { 79184, true }, + { 79200, true }, + { 79224, true }, + { 79249, true }, + { 79271, true }, + { 79298, true }, + { 79316, true }, + { 79333, true }, + { 79348, true }, + { 79366, true }, + { 79387, true }, + { 79415, true }, + { 79439, true }, + { 79463, true }, + { 79476, true }, + { 79489, true }, + { 79506, true }, + { 79521, true }, + { 79546, false }, + { 79560, true }, + { 79570, true }, + { 79589, true }, + { 79605, true }, + { 79629, true }, + { 79644, true }, + { 79661, true }, + { 79671, true }, + { 79683, true }, + { 79696, true }, + { 79714, true }, + { 79727, true }, + { 79741, true }, + { 79754, true }, + { 79767, true }, + { 79786, true }, + { 79804, true }, + { 79818, true }, + { 79828, false }, + { 79840, true }, + { 79848, true }, + { 79858, true }, + { 79868, true }, + { 79880, true }, + { 79894, false }, + { 79907, true }, + { 79915, true }, { 79926, true }, - { 79937, true }, - { 79953, true }, - { 79965, true }, - { 79981, true }, - { 79988, true }, - { 79996, true }, - { 80006, true }, - { 80018, true }, - { 80032, true }, - { 80041, true }, - { 80057, true }, - { 80067, false }, - { 80085, true }, - { 80097, true }, - { 80109, false }, - { 80120, true }, - { 80133, true }, - { 80143, true }, - { 80153, true }, - { 80163, true }, - { 80173, true }, - { 80183, true }, - { 80202, true }, + { 79942, true }, + { 79954, true }, + { 79970, true }, + { 79977, true }, + { 79985, true }, + { 79995, true }, + { 80007, true }, + { 80021, true }, + { 80030, true }, + { 80046, true }, + { 80056, false }, + { 80074, true }, + { 80086, true }, + { 80098, false }, + { 80109, true }, + { 80122, true }, + { 80132, true }, + { 80142, true }, + { 80152, true }, + { 80162, true }, + { 80172, true }, + { 80191, true }, + { 80200, true }, { 80211, true }, - { 80222, true }, - { 80231, true }, - { 80247, true }, - { 80263, true }, + { 80220, true }, + { 80236, true }, + { 80252, true }, + { 80269, true }, { 80280, true }, - { 80291, true }, - { 80306, true }, - { 80316, true }, - { 80325, true }, - { 80342, true }, - { 80351, true }, - { 80369, true }, - { 80385, true }, - { 80413, true }, - { 80422, true }, - { 80437, true }, - { 80454, true }, - { 80477, true }, - { 80496, true }, - { 80514, true }, - { 80529, true }, - { 80543, true }, - { 80566, true }, - { 80582, true }, - { 80598, true }, - { 80606, true }, - { 80618, true }, - { 80635, true }, - { 80652, true }, - { 80670, true }, - { 80684, true }, - { 80698, true }, - { 80710, true }, - { 80728, true }, + { 80295, true }, + { 80305, true }, + { 80314, true }, + { 80331, true }, + { 80340, true }, + { 80358, true }, + { 80374, true }, + { 80402, true }, + { 80411, true }, + { 80426, true }, + { 80443, true }, + { 80466, true }, + { 80485, true }, + { 80503, true }, + { 80518, true }, + { 80532, true }, + { 80555, true }, + { 80571, true }, + { 80587, true }, + { 80595, true }, + { 80607, true }, + { 80624, true }, + { 80641, true }, + { 80659, true }, + { 80673, true }, + { 80687, true }, + { 80699, true }, + { 80717, true }, + { 80736, true }, { 80747, true }, { 80758, true }, - { 80769, true }, - { 80787, true }, + { 80776, true }, + { 80789, true }, { 80800, true }, - { 80811, true }, + { 80812, true }, { 80823, true }, { 80834, true }, - { 80845, true }, - { 80855, true }, - { 80864, false }, - { 80879, true }, - { 80898, true }, - { 80911, true }, - { 80924, true }, - { 80943, true }, - { 80960, true }, - { 80985, true }, - { 81017, true }, - { 81031, true }, - { 81043, true }, - { 81067, true }, - { 81090, true }, - { 81115, true }, - { 81128, true }, - { 81147, true }, - { 81161, true }, - { 81174, true }, - { 81189, false }, - { 81209, true }, - { 81222, true }, - { 81239, true }, - { 81254, true }, - { 81271, true }, - { 81280, true }, - { 81296, true }, - { 81316, true }, - { 81335, true }, + { 80844, true }, + { 80853, false }, + { 80868, true }, + { 80887, true }, + { 80900, true }, + { 80913, true }, + { 80932, true }, + { 80949, true }, + { 80974, true }, + { 81006, true }, + { 81020, true }, + { 81032, true }, + { 81056, true }, + { 81079, true }, + { 81104, true }, + { 81117, true }, + { 81136, true }, + { 81150, true }, + { 81163, true }, + { 81178, false }, + { 81198, true }, + { 81211, true }, + { 81228, true }, + { 81243, true }, + { 81260, true }, + { 81269, true }, + { 81285, true }, + { 81305, true }, + { 81324, true }, + { 81333, true }, { 81344, true }, - { 81355, true }, + { 81353, true }, { 81364, true }, - { 81375, true }, - { 81388, true }, - { 81397, true }, - { 81410, true }, - { 81420, true }, + { 81377, true }, + { 81386, true }, + { 81399, true }, + { 81409, true }, + { 81422, true }, { 81433, true }, { 81444, true }, - { 81455, true }, - { 81464, true }, - { 81478, true }, - { 81495, true }, - { 81512, true }, - { 81521, true }, - { 81536, true }, - { 81548, true }, - { 81561, true }, - { 81573, true }, - { 81586, true }, - { 81595, true }, - { 81609, true }, - { 81632, true }, + { 81453, true }, + { 81467, true }, + { 81484, true }, + { 81501, true }, + { 81510, true }, + { 81525, true }, + { 81537, true }, + { 81550, true }, + { 81562, true }, + { 81575, true }, + { 81584, true }, + { 81598, true }, + { 81621, true }, + { 81633, true }, { 81644, true }, - { 81655, true }, - { 81672, true }, - { 81686, true }, - { 81703, true }, + { 81661, true }, + { 81675, true }, + { 81692, true }, + { 81713, true }, { 81724, true }, { 81735, true }, - { 81746, true }, + { 81742, true }, { 81753, true }, - { 81764, true }, - { 81771, true }, - { 81781, true }, - { 81793, true }, - { 81802, true }, - { 81815, true }, - { 81827, true }, - { 81844, true }, - { 81858, true }, - { 81872, true }, - { 81879, true }, - { 81886, true }, - { 81895, true }, - { 81903, true }, - { 81913, true }, - { 81931, true }, - { 81945, true }, + { 81760, true }, + { 81770, true }, + { 81782, true }, + { 81791, true }, + { 81804, true }, + { 81816, true }, + { 81833, true }, + { 81847, true }, + { 81861, true }, + { 81868, true }, + { 81875, true }, + { 81884, true }, + { 81892, true }, + { 81902, true }, + { 81920, true }, + { 81934, true }, + { 81946, true }, { 81957, true }, { 81968, true }, { 81979, true }, - { 81990, true }, + { 81992, true }, { 82003, true }, - { 82014, true }, - { 82023, false }, - { 82035, true }, - { 82045, true }, + { 82012, false }, + { 82024, true }, + { 82034, true }, + { 82051, true }, { 82062, true }, - { 82073, true }, - { 82080, true }, - { 82087, true }, - { 82101, true }, - { 82109, true }, + { 82069, true }, + { 82076, true }, + { 82090, true }, + { 82098, true }, + { 82105, true }, { 82116, true }, - { 82127, true }, - { 82140, true }, - { 82155, true }, - { 82168, true }, - { 82177, true }, - { 82196, false }, - { 82208, true }, - { 82222, true }, - { 82235, true }, - { 82250, true }, - { 82269, true }, - { 82282, true }, - { 82297, true }, - { 82310, true }, - { 82320, true }, - { 82333, true }, - { 82350, true }, - { 82364, false }, - { 82383, true }, - { 82397, true }, - { 82413, true }, - { 82429, true }, - { 82449, true }, - { 82465, true }, - { 82480, true }, - { 82489, true }, - { 82508, true }, - { 82525, false }, + { 82129, true }, + { 82144, true }, + { 82157, true }, + { 82166, true }, + { 82185, false }, + { 82197, true }, + { 82211, true }, + { 82224, true }, + { 82239, true }, + { 82258, true }, + { 82271, true }, + { 82286, true }, + { 82299, true }, + { 82309, true }, + { 82322, true }, + { 82339, true }, + { 82353, false }, + { 82372, true }, + { 82386, true }, + { 82402, true }, + { 82418, true }, + { 82438, true }, + { 82454, true }, + { 82469, true }, + { 82478, true }, + { 82497, true }, + { 82514, false }, + { 82530, true }, { 82541, true }, - { 82552, true }, - { 82572, true }, - { 82585, true }, - { 82599, false }, - { 82612, true }, - { 82628, true }, - { 82645, true }, - { 82660, true }, - { 82683, true }, - { 82696, true }, - { 82713, true }, - { 82728, true }, - { 82745, true }, - { 82759, true }, - { 82774, true }, - { 82783, true }, - { 82798, true }, - { 82816, true }, - { 82830, true }, - { 82840, true }, - { 82855, true }, - { 82869, true }, + { 82561, true }, + { 82574, true }, + { 82588, false }, + { 82601, true }, + { 82617, true }, + { 82634, true }, + { 82649, true }, + { 82672, true }, + { 82685, true }, + { 82702, true }, + { 82717, true }, + { 82734, true }, + { 82748, true }, + { 82763, true }, + { 82772, true }, + { 82787, true }, + { 82805, true }, + { 82819, true }, + { 82829, true }, + { 82844, true }, + { 82858, true }, + { 82871, true }, { 82882, true }, - { 82893, true }, - { 82907, true }, - { 82917, true }, - { 82935, true }, - { 82949, true }, - { 82961, true }, - { 82980, false }, - { 82995, true }, - { 83014, true }, - { 83027, true }, - { 83044, true }, - { 83061, true }, - { 83078, true }, - { 83096, true }, - { 83118, true }, - { 83137, true }, - { 83153, true }, - { 83168, true }, - { 83176, true }, - { 83189, true }, - { 83203, true }, - { 83217, true }, + { 82896, true }, + { 82906, true }, + { 82924, true }, + { 82938, true }, + { 82950, true }, + { 82969, false }, + { 82984, true }, + { 83003, true }, + { 83016, true }, + { 83033, true }, + { 83050, true }, + { 83067, true }, + { 83085, true }, + { 83107, true }, + { 83126, true }, + { 83142, true }, + { 83157, true }, + { 83165, true }, + { 83178, true }, + { 83192, true }, + { 83206, true }, + { 83222, true }, { 83233, true }, - { 83245, true }, - { 83256, true }, - { 83266, true }, - { 83284, true }, - { 83302, true }, - { 83315, true }, - { 83331, true }, + { 83243, true }, + { 83261, true }, + { 83279, true }, + { 83292, true }, + { 83308, true }, + { 83321, true }, + { 83333, true }, { 83344, true }, { 83356, true }, - { 83367, true }, - { 83379, true }, - { 83389, true }, - { 83397, true }, - { 83413, true }, - { 83429, true }, - { 83441, true }, - { 83454, true }, - { 83468, true }, - { 83487, true }, - { 83501, true }, - { 83514, true }, - { 83530, false }, - { 83547, true }, - { 83568, true }, - { 83587, true }, - { 83606, true }, - { 83625, false }, - { 83641, true }, - { 83656, true }, - { 83666, true }, - { 83676, true }, - { 83685, true }, - { 83698, true }, - { 83708, false }, - { 83726, true }, - { 83748, true }, - { 83765, true }, - { 83781, false }, - { 83799, true }, - { 83810, true }, - { 83828, true }, - { 83843, true }, - { 83857, true }, - { 83874, true }, - { 83892, true }, - { 83908, true }, - { 83925, true }, - { 83941, true }, - { 83959, true }, - { 83976, true }, - { 83998, true }, - { 84015, true }, - { 84032, true }, - { 84048, true }, - { 84062, true }, - { 84074, true }, - { 84086, true }, - { 84096, true }, - { 84104, true }, - { 84117, true }, - { 84132, true }, - { 84147, true }, - { 84159, true }, - { 84168, true }, - { 84178, true }, - { 84188, true }, - { 84202, true }, - { 84210, true }, - { 84219, true }, - { 84229, true }, - { 84238, false }, - { 84248, true }, - { 84264, true }, - { 84277, true }, - { 84284, true }, - { 84297, true }, - { 84310, true }, - { 84323, true }, - { 84338, true }, - { 84350, true }, - { 84357, true }, - { 84364, true }, - { 84373, true }, - { 84382, true }, - { 84391, true }, - { 84402, true }, - { 84416, true }, - { 84429, true }, + { 83366, true }, + { 83374, true }, + { 83390, true }, + { 83406, true }, + { 83418, true }, + { 83431, true }, + { 83445, true }, + { 83464, true }, + { 83478, true }, + { 83491, true }, + { 83507, false }, + { 83524, true }, + { 83545, true }, + { 83564, true }, + { 83583, true }, + { 83602, false }, + { 83618, true }, + { 83633, true }, + { 83643, true }, + { 83653, true }, + { 83662, true }, + { 83675, true }, + { 83685, false }, + { 83703, true }, + { 83725, true }, + { 83742, true }, + { 83758, false }, + { 83776, true }, + { 83787, true }, + { 83805, true }, + { 83820, true }, + { 83834, true }, + { 83851, true }, + { 83869, true }, + { 83885, true }, + { 83902, true }, + { 83918, true }, + { 83936, true }, + { 83953, true }, + { 83975, true }, + { 83992, true }, + { 84009, true }, + { 84025, true }, + { 84037, true }, + { 84049, true }, + { 84059, true }, + { 84067, true }, + { 84080, true }, + { 84095, true }, + { 84110, true }, + { 84122, true }, + { 84131, true }, + { 84141, true }, + { 84151, true }, + { 84165, true }, + { 84173, true }, + { 84182, true }, + { 84192, true }, + { 84201, false }, + { 84211, true }, + { 84227, true }, + { 84240, true }, + { 84247, true }, + { 84260, true }, + { 84273, true }, + { 84286, true }, + { 84301, true }, + { 84313, true }, + { 84320, true }, + { 84327, true }, + { 84336, true }, + { 84345, true }, + { 84354, true }, + { 84365, true }, + { 84379, true }, + { 84392, true }, + { 84400, true }, + { 84412, true }, + { 84426, true }, { 84437, true }, - { 84449, true }, - { 84463, true }, - { 84474, true }, - { 84490, true }, - { 84504, true }, - { 84519, true }, - { 84529, false }, - { 84543, true }, - { 84553, true }, - { 84568, true }, - { 84583, false }, - { 84599, true }, - { 84618, true }, - { 84630, true }, - { 84643, true }, - { 84662, true }, - { 84675, true }, - { 84691, true }, - { 84705, true }, - { 84720, true }, - { 84737, true }, - { 84754, true }, - { 84764, true }, - { 84779, true }, - { 84793, true }, - { 84806, true }, - { 84822, true }, - { 84836, true }, - { 84851, true }, - { 84865, true }, - { 84880, true }, - { 84899, true }, - { 84914, true }, - { 84929, true }, - { 84947, true }, - { 84966, true }, - { 84979, true }, - { 84992, true }, - { 85015, true }, - { 85031, true }, - { 85042, true }, - { 85057, true }, - { 85072, true }, - { 85088, true }, - { 85103, true }, - { 85119, true }, - { 85136, true }, - { 85148, true }, - { 85158, true }, - { 85176, true }, - { 85186, true }, - { 85197, true }, - { 85207, true }, - { 85225, true }, - { 85238, true }, - { 85266, true }, - { 85277, true }, - { 85288, true }, - { 85299, true }, - { 85316, true }, - { 85330, false }, - { 85347, true }, - { 85356, true }, - { 85373, true }, - { 85390, true }, - { 85399, true }, - { 85411, true }, - { 85425, true }, - { 85437, true }, - { 85453, true }, - { 85479, true }, - { 85489, true }, - { 85502, true }, - { 85512, true }, - { 85525, true }, - { 85533, true }, - { 85544, true }, + { 84453, true }, + { 84467, true }, + { 84482, true }, + { 84492, false }, + { 84506, true }, + { 84516, true }, + { 84531, true }, + { 84546, false }, + { 84562, true }, + { 84581, true }, + { 84593, true }, + { 84606, true }, + { 84625, true }, + { 84638, true }, + { 84654, true }, + { 84668, true }, + { 84683, true }, + { 84700, true }, + { 84717, true }, + { 84727, true }, + { 84742, true }, + { 84756, true }, + { 84769, true }, + { 84785, true }, + { 84799, true }, + { 84814, true }, + { 84828, true }, + { 84843, true }, + { 84858, true }, + { 84873, true }, + { 84891, true }, + { 84910, true }, + { 84923, true }, + { 84936, true }, + { 84959, true }, + { 84975, true }, + { 84986, true }, + { 85001, true }, + { 85016, true }, + { 85032, true }, + { 85047, true }, + { 85063, true }, + { 85080, true }, + { 85092, true }, + { 85102, true }, + { 85120, true }, + { 85130, true }, + { 85141, true }, + { 85151, true }, + { 85169, true }, + { 85182, true }, + { 85210, true }, + { 85221, true }, + { 85232, true }, + { 85243, true }, + { 85260, true }, + { 85274, false }, + { 85291, true }, + { 85300, true }, + { 85317, true }, + { 85334, true }, + { 85343, true }, + { 85355, true }, + { 85369, true }, + { 85381, true }, + { 85397, true }, + { 85423, true }, + { 85433, true }, + { 85446, true }, + { 85456, true }, + { 85469, true }, + { 85477, true }, + { 85488, true }, + { 85503, true }, + { 85521, true }, + { 85537, true }, + { 85545, true }, { 85559, true }, - { 85577, true }, - { 85593, true }, - { 85601, true }, - { 85615, true }, - { 85632, true }, - { 85652, true }, - { 85662, true }, - { 85678, true }, - { 85691, true }, - { 85701, false }, - { 85715, true }, - { 85726, true }, - { 85742, true }, - { 85750, true }, - { 85760, true }, - { 85775, true }, - { 85791, true }, + { 85576, true }, + { 85596, true }, + { 85606, true }, + { 85622, true }, + { 85635, true }, + { 85645, false }, + { 85659, true }, + { 85670, true }, + { 85686, true }, + { 85694, true }, + { 85709, true }, + { 85725, true }, + { 85744, true }, + { 85757, true }, + { 85777, true }, + { 85792, true }, { 85810, true }, { 85823, true }, - { 85843, true }, - { 85858, true }, + { 85833, true }, + { 85850, true }, + { 85865, true }, { 85876, true }, - { 85889, true }, - { 85899, true }, - { 85916, true }, - { 85931, true }, + { 85887, true }, + { 85900, true }, + { 85908, true }, + { 85917, true }, + { 85928, true }, { 85942, true }, - { 85953, true }, - { 85966, true }, - { 85974, true }, - { 85983, true }, - { 85994, true }, - { 86008, true }, - { 86031, true }, - { 86044, true }, - { 86056, true }, - { 86067, true }, - { 86081, true }, - { 86109, true }, - { 86124, true }, - { 86139, true }, - { 86159, true }, - { 86172, true }, - { 86188, true }, - { 86203, true }, - { 86216, true }, - { 86230, true }, - { 86241, true }, - { 86252, true }, - { 86264, true }, - { 86281, true }, - { 86294, true }, - { 86309, true }, - { 86317, true }, - { 86337, true }, - { 86348, true }, - { 86358, true }, - { 86368, true }, - { 86379, true }, - { 86389, true }, - { 86401, true }, - { 86416, true }, + { 85965, true }, + { 85978, true }, + { 85990, true }, + { 86001, true }, + { 86015, true }, + { 86043, true }, + { 86058, true }, + { 86073, true }, + { 86093, true }, + { 86106, true }, + { 86122, true }, + { 86137, true }, + { 86150, true }, + { 86164, true }, + { 86175, true }, + { 86186, true }, + { 86198, true }, + { 86215, true }, + { 86228, true }, + { 86243, true }, + { 86251, true }, + { 86271, true }, + { 86282, true }, + { 86292, true }, + { 86302, true }, + { 86313, true }, + { 86323, true }, + { 86335, true }, + { 86350, true }, + { 86359, true }, + { 86373, true }, + { 86386, true }, + { 86396, true }, + { 86411, true }, { 86425, true }, - { 86439, true }, - { 86452, true }, - { 86462, true }, - { 86477, true }, + { 86436, true }, + { 86449, false }, + { 86459, true }, + { 86478, true }, { 86491, true }, - { 86502, true }, - { 86515, false }, + { 86500, true }, + { 86511, true }, { 86525, true }, - { 86544, true }, - { 86557, true }, - { 86566, true }, - { 86577, true }, - { 86591, true }, - { 86611, true }, - { 86627, true }, - { 86638, true }, - { 86654, true }, - { 86671, true }, - { 86686, true }, + { 86545, true }, + { 86561, true }, + { 86572, true }, + { 86588, true }, + { 86605, true }, + { 86620, true }, + { 86633, true }, + { 86650, true }, + { 86660, true }, + { 86670, true }, + { 86678, true }, + { 86689, true }, { 86699, true }, - { 86716, true }, + { 86712, true }, { 86726, true }, - { 86736, true }, - { 86744, true }, - { 86755, true }, + { 86738, true }, + { 86748, true }, + { 86756, true }, { 86765, true }, - { 86778, true }, - { 86792, true }, - { 86804, true }, - { 86814, true }, - { 86822, true }, - { 86831, true }, - { 86845, true }, - { 86859, true }, - { 86873, true }, - { 86915, true }, - { 86931, true }, - { 86940, true }, - { 86952, true }, - { 86964, true }, - { 86977, true }, - { 86990, true }, - { 87008, true }, - { 87016, true }, - { 87029, true }, - { 87039, true }, - { 87051, true }, - { 87062, true }, - { 87077, true }, - { 87089, true }, - { 87102, true }, - { 87114, true }, - { 87129, true }, - { 87142, true }, - { 87154, true }, - { 87170, true }, - { 87188, true }, - { 87203, true }, + { 86779, true }, + { 86793, true }, + { 86807, true }, + { 86849, true }, + { 86865, true }, + { 86874, true }, + { 86886, true }, + { 86898, true }, + { 86911, true }, + { 86924, true }, + { 86942, true }, + { 86950, true }, + { 86963, true }, + { 86973, true }, + { 86985, true }, + { 86996, true }, + { 87011, true }, + { 87023, true }, + { 87036, true }, + { 87048, true }, + { 87063, true }, + { 87076, true }, + { 87088, true }, + { 87104, true }, + { 87122, true }, + { 87137, true }, + { 87151, true }, + { 87169, true }, + { 87187, true }, + { 87199, true }, { 87217, true }, - { 87235, true }, - { 87253, true }, - { 87265, true }, - { 87283, true }, - { 87294, true }, - { 87308, true }, - { 87328, true }, - { 87341, true }, - { 87353, true }, + { 87228, true }, + { 87242, true }, + { 87262, true }, + { 87275, true }, + { 87287, true }, + { 87307, true }, + { 87318, true }, + { 87327, true }, + { 87336, true }, + { 87343, true }, + { 87358, true }, { 87373, true }, - { 87384, true }, - { 87393, true }, - { 87402, true }, - { 87409, true }, - { 87424, true }, - { 87439, true }, - { 87453, true }, - { 87472, true }, - { 87483, true }, - { 87497, true }, - { 87509, true }, - { 87522, true }, - { 87535, true }, - { 87546, true }, - { 87559, true }, - { 87571, true }, - { 87594, true }, - { 87603, true }, - { 87620, true }, - { 87635, true }, - { 87649, true }, - { 87657, true }, - { 87671, true }, - { 87685, true }, - { 87693, true }, - { 87706, true }, - { 87717, true }, - { 87729, false }, - { 87742, true }, - { 87756, true }, - { 87764, true }, - { 87774, true }, - { 87784, true }, - { 87801, true }, + { 87387, true }, + { 87406, true }, + { 87417, true }, + { 87431, true }, + { 87443, true }, + { 87456, true }, + { 87469, true }, + { 87480, true }, + { 87493, true }, + { 87505, true }, + { 87528, true }, + { 87537, true }, + { 87554, true }, + { 87569, true }, + { 87583, true }, + { 87591, true }, + { 87605, true }, + { 87619, true }, + { 87627, true }, + { 87640, true }, + { 87651, true }, + { 87663, false }, + { 87676, true }, + { 87690, true }, + { 87698, true }, + { 87708, true }, + { 87718, true }, + { 87735, true }, + { 87753, true }, + { 87771, true }, + { 87785, true }, + { 87795, true }, { 87819, true }, - { 87837, true }, - { 87851, true }, - { 87861, true }, - { 87885, true }, - { 87899, true }, - { 87918, true }, - { 87930, true }, + { 87833, true }, + { 87852, true }, + { 87864, true }, + { 87883, true }, + { 87900, true }, + { 87910, true }, + { 87925, true }, + { 87937, true }, { 87949, true }, - { 87966, true }, - { 87976, true }, - { 87991, true }, - { 88003, true }, - { 88015, true }, + { 87962, true }, + { 87971, true }, + { 87980, true }, + { 87999, true }, + { 88011, true }, + { 88018, true }, { 88028, true }, { 88037, true }, - { 88046, true }, - { 88065, true }, - { 88077, true }, - { 88084, true }, - { 88094, true }, - { 88103, true }, - { 88118, true }, - { 88133, true }, - { 88151, true }, - { 88162, true }, - { 88174, true }, - { 88190, true }, - { 88204, true }, - { 88220, true }, - { 88246, true }, - { 88257, true }, - { 88272, true }, - { 88287, true }, - { 88302, true }, - { 88317, true }, - { 88330, true }, - { 88346, true }, - { 88369, true }, - { 88382, true }, - { 88395, true }, - { 88408, true }, - { 88427, true }, - { 88442, true }, - { 88456, true }, - { 88468, false }, - { 88487, true }, - { 88498, true }, - { 88510, true }, - { 88521, true }, - { 88534, true }, - { 88557, true }, - { 88571, true }, - { 88582, true }, - { 88598, true }, - { 88611, true }, - { 88621, true }, - { 88632, true }, - { 88640, true }, - { 88650, true }, - { 88667, true }, - { 88682, true }, - { 88692, true }, - { 88702, true }, - { 88713, true }, + { 88052, true }, + { 88067, true }, + { 88085, true }, + { 88096, true }, + { 88108, true }, + { 88124, true }, + { 88138, true }, + { 88154, true }, + { 88180, true }, + { 88191, true }, + { 88206, true }, + { 88221, true }, + { 88236, true }, + { 88251, true }, + { 88264, true }, + { 88280, true }, + { 88303, true }, + { 88316, true }, + { 88329, true }, + { 88342, true }, + { 88361, true }, + { 88376, true }, + { 88390, true }, + { 88402, false }, + { 88421, true }, + { 88432, true }, + { 88444, true }, + { 88455, true }, + { 88468, true }, + { 88491, true }, + { 88505, true }, + { 88516, true }, + { 88532, true }, + { 88545, true }, + { 88555, true }, + { 88566, true }, + { 88574, true }, + { 88584, true }, + { 88601, true }, + { 88616, true }, + { 88626, true }, + { 88636, true }, + { 88647, true }, + { 88658, true }, + { 88678, true }, + { 88693, true }, + { 88710, true }, { 88724, true }, - { 88744, true }, - { 88759, true }, - { 88776, true }, + { 88734, true }, + { 88745, true }, + { 88756, true }, + { 88778, true }, { 88790, true }, - { 88800, true }, - { 88811, true }, - { 88822, true }, - { 88844, true }, - { 88856, true }, - { 88870, true }, - { 88881, false }, - { 88894, true }, - { 88904, true }, + { 88804, true }, + { 88815, false }, + { 88828, true }, + { 88838, true }, + { 88855, true }, + { 88869, true }, + { 88881, true }, + { 88897, true }, + { 88911, true }, { 88922, true }, - { 88939, true }, - { 88953, true }, - { 88965, true }, - { 88981, true }, - { 88995, true }, - { 89006, true }, - { 89026, true }, - { 89053, true }, - { 89068, true }, - { 89084, true }, - { 89099, true }, - { 89112, true }, - { 89124, true }, - { 89140, true }, - { 89152, true }, - { 89169, true }, - { 89179, true }, - { 89190, true }, - { 89207, true }, - { 89219, true }, - { 89232, false }, - { 89246, true }, - { 89260, true }, - { 89272, true }, - { 89283, true }, - { 89295, true }, - { 89313, true }, - { 89326, true }, - { 89341, true }, - { 89352, true }, - { 89362, true }, - { 89374, true }, + { 88932, true }, + { 88952, true }, + { 88979, true }, + { 88994, true }, + { 89010, true }, + { 89025, true }, + { 89038, true }, + { 89050, true }, + { 89066, true }, + { 89078, true }, + { 89095, true }, + { 89106, true }, + { 89123, true }, + { 89135, true }, + { 89148, false }, + { 89162, true }, + { 89176, true }, + { 89188, true }, + { 89199, true }, + { 89211, true }, + { 89229, true }, + { 89242, true }, + { 89257, true }, + { 89268, true }, + { 89278, true }, + { 89290, true }, + { 89300, true }, + { 89309, true }, + { 89321, true }, + { 89335, true }, + { 89356, true }, + { 89370, true }, { 89384, true }, - { 89393, true }, - { 89405, true }, - { 89419, true }, - { 89440, true }, - { 89454, true }, - { 89468, true }, - { 89486, true }, - { 89504, true }, - { 89512, true }, - { 89525, true }, + { 89402, true }, + { 89420, true }, + { 89428, true }, + { 89441, true }, + { 89453, true }, + { 89465, true }, + { 89477, true }, + { 89485, true }, + { 89499, true }, + { 89514, true }, + { 89528, true }, { 89537, true }, - { 89549, true }, - { 89561, true }, - { 89569, true }, - { 89583, true }, - { 89598, true }, - { 89612, true }, - { 89621, true }, - { 89631, true }, - { 89643, true }, - { 89658, true }, - { 89681, true }, + { 89547, true }, + { 89559, true }, + { 89574, true }, + { 89597, true }, + { 89610, true }, + { 89618, true }, + { 89629, true }, + { 89638, true }, + { 89646, true }, + { 89659, true }, + { 89682, true }, { 89694, true }, - { 89702, true }, - { 89713, true }, - { 89722, true }, - { 89730, true }, - { 89743, true }, - { 89766, true }, - { 89778, true }, - { 89794, true }, - { 89817, true }, - { 89828, true }, - { 89844, true }, - { 89860, true }, - { 89875, true }, - { 89888, true }, - { 89898, true }, - { 89905, true }, - { 89918, true }, - { 89941, true }, - { 89958, true }, - { 89987, true }, + { 89710, true }, + { 89733, true }, + { 89744, true }, + { 89760, true }, + { 89776, true }, + { 89791, true }, + { 89804, true }, + { 89814, true }, + { 89821, true }, + { 89834, true }, + { 89857, true }, + { 89874, true }, + { 89903, true }, + { 89920, true }, + { 89934, true }, + { 89946, true }, + { 89955, true }, + { 89971, true }, + { 89986, true }, { 90004, true }, - { 90018, true }, - { 90030, true }, - { 90039, true }, - { 90055, true }, - { 90070, true }, - { 90088, true }, - { 90106, true }, - { 90116, true }, - { 90124, true }, - { 90134, true }, - { 90144, true }, - { 90152, true }, + { 90022, true }, + { 90032, true }, + { 90040, true }, + { 90050, true }, + { 90058, true }, + { 90072, true }, + { 90081, true }, + { 90092, true }, + { 90107, true }, + { 90115, true }, + { 90130, true }, + { 90148, true }, { 90166, true }, - { 90175, true }, - { 90186, true }, - { 90201, true }, - { 90209, true }, - { 90224, true }, - { 90242, true }, - { 90260, true }, - { 90272, true }, - { 90282, true }, - { 90293, true }, - { 90305, true }, - { 90316, true }, - { 90324, true }, - { 90341, false }, - { 90357, false }, - { 90378, true }, - { 90395, true }, - { 90413, true }, - { 90430, true }, - { 90447, true }, - { 90461, true }, - { 90469, true }, - { 90482, true }, - { 90500, true }, - { 90527, true }, - { 90551, true }, - { 90568, true }, - { 90583, true }, - { 90597, true }, - { 90609, true }, - { 90620, true }, - { 90631, true }, - { 90641, true }, - { 90652, false }, + { 90178, true }, + { 90188, true }, + { 90199, true }, + { 90211, true }, + { 90222, true }, + { 90230, true }, + { 90247, false }, + { 90263, false }, + { 90284, true }, + { 90301, true }, + { 90319, true }, + { 90336, true }, + { 90353, true }, + { 90367, true }, + { 90375, true }, + { 90388, true }, + { 90406, true }, + { 90433, true }, + { 90457, true }, + { 90474, true }, + { 90489, true }, + { 90503, true }, + { 90515, true }, + { 90526, true }, + { 90537, true }, + { 90547, true }, + { 90558, false }, + { 90579, true }, + { 90590, true }, + { 90604, true }, + { 90616, true }, + { 90630, true }, + { 90648, true }, + { 90662, true }, { 90673, true }, - { 90684, true }, - { 90698, true }, - { 90710, true }, - { 90724, true }, - { 90742, true }, - { 90756, true }, - { 90767, true }, - { 90784, true }, + { 90690, true }, + { 90701, true }, + { 90711, true }, + { 90725, true }, + { 90739, true }, + { 90752, true }, + { 90763, true }, + { 90782, true }, { 90795, true }, - { 90805, true }, - { 90819, true }, - { 90833, true }, - { 90846, true }, - { 90857, true }, - { 90876, true }, - { 90889, true }, - { 90906, true }, - { 90920, true }, - { 90928, true }, - { 90942, true }, - { 90955, true }, - { 90967, true }, - { 90980, true }, - { 90992, true }, - { 91004, true }, + { 90812, true }, + { 90826, true }, + { 90834, true }, + { 90848, true }, + { 90861, true }, + { 90873, true }, + { 90886, true }, + { 90898, true }, + { 90910, true }, + { 90925, true }, + { 90935, true }, + { 90950, true }, + { 90964, true }, + { 90977, true }, + { 90987, false }, + { 90998, true }, + { 91008, true }, { 91019, true }, - { 91029, true }, - { 91044, true }, - { 91058, true }, - { 91071, true }, - { 91081, false }, - { 91092, true }, - { 91102, true }, - { 91113, true }, - { 91124, true }, - { 91135, true }, - { 91148, true }, - { 91160, true }, - { 91172, true }, - { 91182, true }, - { 91204, true }, - { 91216, true }, - { 91225, true }, - { 91234, true }, - { 91246, true }, - { 91256, true }, + { 91030, true }, + { 91041, true }, + { 91054, true }, + { 91066, true }, + { 91078, true }, + { 91088, true }, + { 91110, true }, + { 91122, true }, + { 91131, true }, + { 91140, true }, + { 91152, true }, + { 91162, true }, + { 91173, true }, + { 91183, true }, + { 91196, false }, + { 91207, true }, + { 91220, true }, + { 91245, true }, + { 91257, true }, { 91267, true }, - { 91277, true }, - { 91290, false }, - { 91301, true }, - { 91314, true }, - { 91339, true }, - { 91351, true }, - { 91361, true }, - { 91370, true }, + { 91276, true }, + { 91293, true }, + { 91311, true }, + { 91323, true }, + { 91331, true }, + { 91350, true }, + { 91363, true }, + { 91377, true }, { 91387, true }, - { 91405, true }, - { 91417, true }, - { 91425, true }, - { 91444, true }, - { 91457, true }, - { 91471, true }, - { 91481, true }, - { 91493, true }, - { 91517, true }, - { 91531, true }, - { 91549, true }, - { 91563, true }, - { 91581, true }, - { 91600, true }, - { 91610, true }, - { 91623, true }, - { 91633, true }, - { 91646, true }, - { 91655, true }, - { 91666, true }, - { 91678, true }, - { 91689, true }, - { 91702, true }, - { 91710, true }, - { 91722, true }, - { 91735, true }, - { 91747, true }, - { 91762, true }, - { 91770, true }, + { 91399, true }, + { 91423, true }, + { 91437, true }, + { 91455, true }, + { 91469, true }, + { 91487, true }, + { 91506, true }, + { 91516, true }, + { 91529, true }, + { 91539, true }, + { 91552, true }, + { 91561, true }, + { 91572, true }, + { 91584, true }, + { 91595, true }, + { 91608, true }, + { 91616, true }, + { 91628, true }, + { 91641, true }, + { 91653, true }, + { 91668, true }, + { 91676, true }, + { 91688, true }, + { 91703, true }, + { 91712, true }, + { 91725, true }, + { 91731, false }, + { 91746, true }, + { 91755, true }, + { 91768, true }, { 91782, true }, - { 91797, true }, - { 91806, true }, - { 91819, true }, - { 91825, false }, - { 91840, true }, - { 91849, true }, - { 91862, true }, - { 91876, true }, - { 91888, true }, - { 91902, true }, - { 91915, true }, - { 91926, true }, + { 91794, true }, + { 91808, true }, + { 91821, true }, + { 91832, true }, + { 91841, true }, + { 91851, true }, + { 91859, true }, + { 91872, true }, + { 91884, true }, + { 91897, true }, + { 91917, true }, { 91936, true }, - { 91944, true }, - { 91957, true }, - { 91969, true }, - { 91982, true }, - { 92002, true }, - { 92021, true }, - { 92038, true }, - { 92056, true }, - { 92071, true }, - { 92084, true }, - { 92096, true }, - { 92115, true }, - { 92132, true }, - { 92151, true }, - { 92166, true }, - { 92176, true }, - { 92190, true }, - { 92209, true }, - { 92218, false }, - { 92229, true }, - { 92237, true }, - { 92245, true }, - { 92253, true }, - { 92265, true }, - { 92277, true }, - { 92291, true }, - { 92305, true }, - { 92316, true }, + { 91953, true }, + { 91971, true }, + { 91986, true }, + { 91999, true }, + { 92011, true }, + { 92030, true }, + { 92047, true }, + { 92066, true }, + { 92081, true }, + { 92091, true }, + { 92105, true }, + { 92124, true }, + { 92133, false }, + { 92144, true }, + { 92152, true }, + { 92160, true }, + { 92168, true }, + { 92180, true }, + { 92192, true }, + { 92206, true }, + { 92220, true }, + { 92231, true }, + { 92247, true }, + { 92269, true }, + { 92280, true }, + { 92292, true }, + { 92299, true }, + { 92310, true }, + { 92322, true }, { 92332, true }, + { 92342, true }, { 92354, true }, - { 92365, true }, - { 92377, true }, - { 92384, true }, + { 92372, true }, { 92395, true }, - { 92407, true }, - { 92417, true }, - { 92427, true }, - { 92439, true }, - { 92457, true }, - { 92480, true }, - { 92535, true }, - { 92550, true }, - { 92560, true }, - { 92578, true }, - { 92593, true }, - { 92606, false }, - { 92620, true }, - { 92634, false }, - { 92650, true }, - { 92668, true }, - { 92693, true }, - { 92712, true }, - { 92722, true }, - { 92733, true }, + { 92450, true }, + { 92465, true }, + { 92475, true }, + { 92493, true }, + { 92508, true }, + { 92521, false }, + { 92535, false }, + { 92551, true }, + { 92569, true }, + { 92594, true }, + { 92613, true }, + { 92623, true }, + { 92634, true }, + { 92656, true }, + { 92679, true }, + { 92689, true }, + { 92699, true }, + { 92717, true }, + { 92728, true }, + { 92739, true }, { 92755, true }, - { 92778, true }, - { 92788, true }, - { 92798, true }, - { 92816, true }, - { 92827, true }, - { 92838, true }, - { 92854, true }, - { 92867, true }, - { 92881, true }, - { 92894, true }, - { 92923, true }, - { 92936, true }, - { 92946, true }, - { 92958, true }, - { 92970, true }, - { 92989, true }, - { 92999, true }, - { 93013, true }, + { 92768, true }, + { 92782, true }, + { 92795, true }, + { 92824, true }, + { 92837, true }, + { 92847, true }, + { 92859, true }, + { 92871, true }, + { 92890, true }, + { 92900, true }, + { 92914, true }, + { 92924, true }, + { 92941, true }, + { 92952, true }, + { 92968, true }, + { 92987, true }, + { 93002, true }, + { 93014, true }, { 93023, true }, - { 93040, true }, - { 93051, true }, - { 93067, true }, - { 93086, true }, - { 93101, true }, - { 93113, true }, - { 93122, true }, - { 93138, true }, - { 93152, true }, - { 93165, true }, - { 93180, true }, - { 93192, true }, - { 93202, true }, - { 93216, true }, + { 93039, true }, + { 93053, true }, + { 93066, true }, + { 93081, true }, + { 93093, true }, + { 93103, true }, + { 93117, true }, + { 93132, true }, + { 93150, true }, + { 93160, true }, + { 93172, true }, + { 93186, true }, + { 93198, true }, + { 93210, true }, { 93231, true }, - { 93249, true }, - { 93259, true }, - { 93271, true }, - { 93285, true }, - { 93297, true }, - { 93309, true }, - { 93330, true }, - { 93346, true }, - { 93359, true }, - { 93376, true }, - { 93391, true }, - { 93404, true }, - { 93418, true }, - { 93431, true }, - { 93450, true }, - { 93473, false }, - { 93486, false }, - { 93504, true }, - { 93524, true }, + { 93247, true }, + { 93260, true }, + { 93277, true }, + { 93292, true }, + { 93305, true }, + { 93319, true }, + { 93332, true }, + { 93351, true }, + { 93374, false }, + { 93387, false }, + { 93405, true }, + { 93425, true }, + { 93438, true }, + { 93453, true }, + { 93468, true }, + { 93483, true }, + { 93497, true }, + { 93512, true }, { 93537, true }, - { 93552, true }, - { 93567, true }, - { 93582, true }, - { 93596, true }, - { 93611, true }, - { 93636, true }, - { 93647, true }, - { 93663, true }, - { 93677, true }, - { 93702, true }, - { 93716, true }, - { 93730, true }, - { 93744, true }, - { 93768, true }, - { 93779, true }, + { 93548, true }, + { 93564, true }, + { 93578, true }, + { 93603, true }, + { 93617, true }, + { 93631, true }, + { 93645, true }, + { 93669, true }, + { 93680, true }, + { 93691, true }, + { 93703, true }, + { 93731, true }, + { 93741, false }, + { 93753, true }, + { 93763, true }, + { 93773, true }, { 93790, true }, - { 93802, true }, + { 93807, true }, + { 93820, true }, { 93830, true }, - { 93840, false }, - { 93852, true }, - { 93862, true }, + { 93853, true }, + { 93863, true }, { 93872, true }, - { 93889, true }, - { 93906, true }, + { 93884, true }, + { 93896, true }, + { 93908, true }, { 93919, true }, - { 93929, true }, - { 93952, true }, - { 93962, true }, - { 93971, true }, - { 93983, true }, - { 93995, true }, - { 94007, true }, - { 94018, true }, - { 94033, true }, - { 94043, true }, - { 94052, true }, - { 94070, false }, - { 94081, true }, + { 93934, true }, + { 93944, true }, + { 93953, true }, + { 93971, false }, + { 93982, true }, + { 93992, true }, + { 94000, true }, + { 94014, true }, + { 94026, true }, + { 94038, true }, + { 94056, true }, + { 94076, true }, { 94091, true }, - { 94099, true }, - { 94113, true }, - { 94125, true }, - { 94137, true }, - { 94155, true }, - { 94175, true }, - { 94190, true }, - { 94207, true }, - { 94220, true }, - { 94231, true }, - { 94246, true }, - { 94261, true }, - { 94277, true }, - { 94290, true }, - { 94315, true }, - { 94331, true }, - { 94351, true }, + { 94108, true }, + { 94121, true }, + { 94132, true }, + { 94147, true }, + { 94162, true }, + { 94178, true }, + { 94191, true }, + { 94216, true }, + { 94232, true }, + { 94252, true }, + { 94267, true }, + { 94278, true }, + { 94294, true }, + { 94306, true }, + { 94323, true }, + { 94334, true }, + { 94342, true }, + { 94354, true }, { 94366, true }, - { 94377, true }, - { 94393, true }, - { 94405, true }, - { 94422, true }, - { 94433, true }, + { 94380, true }, + { 94397, true }, + { 94413, true }, + { 94429, true }, { 94441, true }, - { 94453, true }, - { 94465, true }, - { 94479, true }, - { 94496, true }, - { 94512, true }, - { 94528, true }, - { 94540, true }, - { 94557, false }, - { 94577, true }, - { 94597, true }, - { 94618, true }, - { 94639, false }, + { 94458, false }, + { 94478, true }, + { 94498, true }, + { 94519, true }, + { 94540, false }, + { 94557, true }, + { 94576, true }, + { 94591, true }, + { 94608, true }, + { 94635, true }, + { 94646, true }, { 94656, true }, - { 94675, true }, - { 94690, true }, - { 94707, true }, - { 94734, true }, - { 94745, true }, - { 94755, true }, - { 94770, true }, - { 94782, true }, + { 94671, true }, + { 94683, true }, + { 94704, true }, + { 94713, true }, + { 94722, true }, + { 94730, false }, + { 94747, true }, + { 94758, true }, + { 94776, true }, + { 94787, true }, { 94803, true }, - { 94812, true }, - { 94821, true }, - { 94829, false }, - { 94846, true }, - { 94857, true }, - { 94875, true }, - { 94886, true }, - { 94902, true }, - { 94924, true }, - { 94934, true }, + { 94825, true }, + { 94835, true }, + { 94848, true }, + { 94860, true }, + { 94877, true }, + { 94887, true }, + { 94905, true }, + { 94922, true }, + { 94939, true }, { 94947, true }, - { 94959, true }, - { 94976, true }, - { 94986, true }, - { 95004, true }, - { 95021, true }, - { 95038, true }, - { 95046, true }, - { 95070, true }, - { 95084, true }, - { 95097, true }, - { 95115, true }, - { 95129, true }, - { 95148, true }, - { 95158, true }, - { 95170, true }, - { 95194, true }, - { 95206, true }, + { 94971, true }, + { 94985, true }, + { 94998, true }, + { 95016, true }, + { 95030, true }, + { 95049, true }, + { 95059, true }, + { 95071, true }, + { 95095, true }, + { 95107, true }, + { 95120, true }, + { 95127, true }, + { 95147, true }, + { 95163, true }, + { 95173, true }, + { 95184, true }, + { 95191, true }, + { 95200, true }, { 95219, true }, - { 95226, true }, - { 95246, true }, - { 95262, true }, - { 95272, true }, - { 95283, true }, - { 95290, true }, - { 95299, true }, - { 95318, true }, - { 95331, true }, - { 95341, true }, - { 95351, true }, - { 95364, true }, - { 95376, true }, + { 95232, true }, + { 95242, true }, + { 95252, true }, + { 95265, true }, + { 95277, true }, + { 95289, true }, + { 95304, true }, + { 95319, true }, + { 95337, true }, + { 95348, false }, + { 95374, true }, { 95388, true }, - { 95403, true }, - { 95418, true }, - { 95436, true }, - { 95447, false }, - { 95473, true }, - { 95487, true }, - { 95501, true }, - { 95514, true }, - { 95527, true }, - { 95538, true }, - { 95552, true }, - { 95565, true }, - { 95577, true }, - { 95590, false }, - { 95604, true }, - { 95614, true }, - { 95625, true }, - { 95636, true }, - { 95647, true }, - { 95660, true }, - { 95672, true }, + { 95402, true }, + { 95415, true }, + { 95428, true }, + { 95439, true }, + { 95453, true }, + { 95466, true }, + { 95478, true }, + { 95491, false }, + { 95505, true }, + { 95515, true }, + { 95526, true }, + { 95537, true }, + { 95548, true }, + { 95561, true }, + { 95573, true }, + { 95594, true }, + { 95607, true }, + { 95615, true }, + { 95629, true }, + { 95644, true }, + { 95667, true }, + { 95678, false }, { 95693, true }, { 95706, true }, - { 95714, true }, - { 95728, true }, - { 95743, true }, - { 95766, true }, - { 95777, false }, - { 95792, true }, - { 95805, true }, - { 95821, true }, - { 95833, true }, - { 95847, true }, - { 95861, true }, - { 95874, true }, - { 95888, true }, - { 95901, true }, - { 95919, true }, - { 95947, true }, - { 95975, true }, - { 95985, true }, - { 96001, true }, - { 96014, false }, + { 95722, true }, + { 95734, true }, + { 95748, true }, + { 95762, true }, + { 95775, true }, + { 95789, true }, + { 95802, true }, + { 95820, true }, + { 95848, true }, + { 95876, true }, + { 95886, true }, + { 95902, true }, + { 95915, false }, + { 95930, true }, + { 95948, true }, + { 95956, true }, + { 95971, true }, + { 95984, true }, + { 95999, true }, + { 96015, true }, { 96029, true }, - { 96047, true }, - { 96055, true }, + { 96039, true }, + { 96048, false }, + { 96059, true }, { 96070, true }, - { 96083, true }, - { 96098, true }, - { 96114, true }, - { 96128, true }, - { 96138, true }, - { 96147, false }, - { 96158, true }, - { 96169, true }, - { 96179, true }, - { 96191, true }, - { 96202, true }, + { 96080, true }, + { 96092, true }, + { 96103, true }, + { 96130, true }, + { 96141, true }, + { 96150, true }, + { 96159, true }, + { 96176, true }, + { 96190, true }, + { 96213, true }, { 96229, true }, - { 96240, true }, - { 96249, true }, - { 96258, true }, - { 96275, true }, - { 96289, true }, - { 96312, true }, - { 96328, true }, - { 96349, true }, - { 96365, true }, + { 96250, true }, + { 96266, true }, + { 96286, true }, + { 96308, true }, + { 96318, true }, + { 96326, true }, + { 96335, true }, + { 96346, true }, + { 96360, true }, + { 96370, true }, { 96385, true }, - { 96407, true }, - { 96417, true }, + { 96395, true }, + { 96415, true }, { 96425, true }, - { 96434, true }, - { 96445, true }, - { 96459, true }, - { 96469, true }, - { 96484, true }, - { 96494, true }, - { 96514, true }, - { 96524, true }, - { 96538, true }, - { 96551, true }, - { 96563, true }, - { 96582, true }, + { 96439, true }, + { 96452, true }, + { 96464, true }, + { 96483, true }, + { 96496, true }, + { 96520, false }, + { 96539, true }, + { 96567, true }, + { 96581, true }, { 96595, true }, - { 96619, false }, - { 96638, true }, - { 96666, true }, - { 96680, true }, - { 96694, true }, - { 96706, false }, + { 96607, false }, + { 96621, true }, + { 96631, true }, + { 96653, true }, + { 96671, true }, + { 96679, true }, + { 96690, true }, + { 96706, true }, { 96720, true }, - { 96730, true }, - { 96752, true }, - { 96770, true }, + { 96736, true }, + { 96751, true }, + { 96766, true }, { 96778, true }, - { 96789, true }, - { 96805, true }, - { 96819, true }, - { 96835, true }, + { 96790, true }, + { 96809, true }, + { 96825, false }, { 96850, true }, - { 96865, true }, + { 96867, true }, { 96877, true }, - { 96889, true }, - { 96908, true }, - { 96924, false }, - { 96949, true }, - { 96966, true }, - { 96976, true }, - { 96987, true }, - { 97002, true }, - { 97009, true }, - { 97020, true }, - { 97034, true }, - { 97047, true }, - { 97060, true }, - { 97073, true }, + { 96888, true }, + { 96903, true }, + { 96910, true }, + { 96921, true }, + { 96935, true }, + { 96948, true }, + { 96961, true }, + { 96974, true }, + { 96985, true }, + { 96998, true }, + { 97008, true }, + { 97018, true }, + { 97030, true }, + { 97042, true }, + { 97051, true }, + { 97058, true }, + { 97068, false }, { 97084, true }, - { 97097, true }, - { 97107, true }, - { 97117, true }, - { 97129, true }, + { 97095, true }, + { 97105, true }, + { 97123, true }, { 97141, true }, - { 97150, true }, - { 97157, true }, - { 97167, false }, - { 97183, true }, - { 97194, true }, - { 97204, true }, - { 97222, true }, - { 97240, true }, - { 97254, true }, - { 97268, true }, - { 97291, true }, - { 97301, true }, - { 97316, true }, - { 97334, true }, - { 97351, true }, - { 97365, true }, - { 97379, true }, - { 97391, true }, - { 97403, true }, - { 97416, false }, - { 97427, true }, - { 97441, true }, + { 97155, true }, + { 97169, true }, + { 97192, true }, + { 97202, true }, + { 97217, true }, + { 97235, true }, + { 97252, true }, + { 97266, true }, + { 97280, true }, + { 97292, true }, + { 97304, true }, + { 97317, false }, + { 97328, true }, + { 97342, true }, + { 97355, true }, + { 97370, true }, + { 97389, true }, + { 97404, true }, + { 97428, false }, + { 97443, true }, { 97454, true }, - { 97469, true }, + { 97477, true }, { 97488, true }, - { 97503, true }, - { 97527, false }, - { 97542, true }, - { 97553, true }, - { 97576, true }, - { 97587, true }, - { 97598, true }, - { 97610, true }, - { 97624, true }, - { 97637, true }, - { 97650, true }, - { 97663, true }, - { 97685, true }, - { 97695, true }, - { 97715, true }, - { 97733, true }, - { 97747, true }, - { 97764, false }, - { 97779, false }, - { 97795, true }, - { 97812, true }, - { 97823, true }, - { 97845, true }, - { 97859, true }, - { 97879, true }, - { 97889, true }, - { 97900, true }, - { 97909, true }, - { 97920, true }, - { 97932, true }, - { 97942, true }, - { 97955, true }, - { 97972, true }, - { 97993, true }, - { 98007, true }, - { 98034, true }, - { 98049, true }, - { 98069, true }, - { 98084, true }, + { 97499, true }, + { 97511, true }, + { 97525, true }, + { 97538, true }, + { 97551, true }, + { 97564, true }, + { 97586, true }, + { 97596, true }, + { 97616, true }, + { 97634, true }, + { 97648, true }, + { 97665, false }, + { 97680, false }, + { 97696, true }, + { 97713, true }, + { 97724, true }, + { 97746, true }, + { 97760, true }, + { 97780, true }, + { 97790, true }, + { 97801, true }, + { 97810, true }, + { 97821, true }, + { 97833, true }, + { 97843, true }, + { 97856, true }, + { 97873, true }, + { 97894, true }, + { 97908, true }, + { 97935, true }, + { 97950, true }, + { 97970, true }, + { 97985, true }, + { 97996, true }, + { 98008, true }, + { 98021, true }, + { 98032, true }, + { 98045, true }, + { 98059, true }, + { 98072, true }, { 98095, true }, - { 98107, true }, - { 98120, true }, - { 98131, true }, - { 98144, true }, - { 98158, true }, + { 98105, true }, + { 98115, true }, + { 98128, true }, + { 98138, true }, + { 98155, true }, { 98171, true }, - { 98194, true }, - { 98204, true }, - { 98214, true }, - { 98227, true }, - { 98237, true }, - { 98254, true }, - { 98270, true }, - { 98285, true }, - { 98305, true }, - { 98315, true }, - { 98329, true }, - { 98341, true }, + { 98186, true }, + { 98206, true }, + { 98216, true }, + { 98230, true }, + { 98242, true }, + { 98267, true }, + { 98281, true }, + { 98295, true }, + { 98309, true }, + { 98323, true }, + { 98337, true }, + { 98352, true }, { 98366, true }, { 98380, true }, { 98394, true }, - { 98408, true }, - { 98422, true }, - { 98436, true }, - { 98451, true }, - { 98465, true }, - { 98479, true }, - { 98493, true }, - { 98513, true }, - { 98525, true }, - { 98542, true }, - { 98557, true }, - { 98570, true }, + { 98414, true }, + { 98426, true }, + { 98443, true }, + { 98458, true }, + { 98471, true }, + { 98489, true }, + { 98504, true }, + { 98520, true }, + { 98532, true }, + { 98549, true }, + { 98564, true }, + { 98573, false }, { 98588, true }, - { 98603, true }, - { 98619, true }, - { 98631, true }, - { 98658, true }, - { 98675, true }, - { 98690, true }, - { 98699, false }, - { 98714, true }, - { 98725, true }, - { 98737, true }, - { 98746, true }, - { 98763, false }, - { 98773, true }, - { 98789, true }, - { 98799, true }, - { 98815, true }, - { 98835, true }, - { 98849, true }, - { 98863, true }, + { 98599, true }, + { 98611, true }, + { 98620, false }, + { 98630, true }, + { 98646, true }, + { 98656, true }, + { 98672, true }, + { 98692, true }, + { 98706, true }, + { 98720, true }, + { 98739, true }, + { 98759, true }, + { 98769, true }, + { 98784, true }, + { 98794, true }, + { 98808, true }, + { 98829, true }, + { 98839, true }, + { 98854, true }, + { 98868, true }, { 98882, true }, - { 98902, true }, - { 98912, true }, - { 98927, true }, - { 98937, true }, - { 98951, true }, - { 98972, true }, - { 98982, true }, - { 98997, true }, - { 99011, true }, - { 99025, true }, - { 99040, true }, - { 99056, true }, - { 99072, true }, - { 99084, true }, - { 99096, true }, - { 99108, true }, - { 99121, true }, + { 98897, true }, + { 98913, true }, + { 98929, true }, + { 98941, true }, + { 98953, true }, + { 98965, true }, + { 98978, true }, + { 98991, true }, + { 99005, true }, + { 99020, true }, + { 99034, false }, + { 99060, true }, + { 99071, true }, + { 99079, true }, + { 99087, true }, + { 99095, true }, + { 99103, true }, + { 99113, true }, + { 99122, true }, { 99134, true }, - { 99148, true }, - { 99163, true }, - { 99177, false }, - { 99203, true }, - { 99214, true }, - { 99222, true }, - { 99230, true }, - { 99238, true }, - { 99246, true }, - { 99256, true }, - { 99265, true }, - { 99277, true }, - { 99289, true }, - { 99300, true }, - { 99310, true }, - { 99327, true }, - { 99340, true }, - { 99350, true }, - { 99361, true }, - { 99375, true }, - { 99385, true }, + { 99146, true }, + { 99157, true }, + { 99167, true }, + { 99184, true }, + { 99197, true }, + { 99207, true }, + { 99218, true }, + { 99232, true }, + { 99242, true }, + { 99249, true }, + { 99264, true }, + { 99286, true }, + { 99294, true }, + { 99304, true }, + { 99316, true }, + { 99326, true }, + { 99336, true }, + { 99346, true }, + { 99357, true }, + { 99370, true }, + { 99378, true }, { 99392, true }, - { 99407, true }, - { 99429, true }, - { 99437, true }, - { 99447, true }, - { 99459, true }, - { 99469, true }, - { 99479, true }, - { 99489, true }, - { 99500, true }, - { 99513, true }, - { 99521, true }, - { 99535, true }, - { 99545, true }, - { 99556, true }, - { 99563, true }, - { 99571, true }, + { 99402, true }, + { 99413, true }, + { 99420, true }, + { 99428, true }, + { 99446, true }, + { 99457, false }, + { 99472, true }, + { 99482, true }, + { 99487, true }, + { 99496, true }, + { 99507, true }, + { 99515, true }, + { 99524, true }, + { 99544, true }, + { 99560, true }, + { 99569, false }, + { 99580, true }, { 99589, true }, - { 99600, false }, - { 99615, true }, - { 99625, true }, - { 99630, true }, - { 99639, true }, - { 99650, true }, - { 99658, true }, - { 99667, true }, - { 99687, true }, + { 99603, true }, + { 99619, true }, + { 99632, false }, + { 99643, true }, + { 99655, true }, + { 99670, true }, + { 99680, true }, + { 99692, true }, { 99703, true }, - { 99712, false }, - { 99723, true }, - { 99732, true }, - { 99746, true }, - { 99762, true }, - { 99775, false }, - { 99786, true }, - { 99798, true }, - { 99813, true }, - { 99823, true }, - { 99835, true }, - { 99846, true }, - { 99857, true }, - { 99869, true }, - { 99892, true }, - { 99902, true }, + { 99714, true }, + { 99726, true }, + { 99749, true }, + { 99759, true }, + { 99775, true }, + { 99790, true }, + { 99803, true }, + { 99812, true }, + { 99827, true }, + { 99840, true }, + { 99853, true }, + { 99868, true }, + { 99878, true }, + { 99894, false }, + { 99904, true }, { 99918, true }, - { 99933, true }, - { 99946, true }, - { 99955, true }, - { 99970, true }, - { 99983, true }, - { 99996, true }, - { 100011, true }, - { 100021, true }, - { 100037, false }, - { 100047, true }, - { 100061, true }, - { 100072, true }, - { 100082, true }, - { 100096, true }, - { 100107, true }, - { 100120, true }, - { 100133, true }, - { 100145, true }, - { 100163, true }, - { 100174, true }, - { 100187, true }, - { 100198, true }, - { 100222, true }, - { 100237, true }, - { 100262, true }, - { 100270, true }, - { 100286, false }, - { 100301, true }, - { 100313, true }, - { 100325, true }, - { 100339, true }, - { 100353, true }, - { 100367, true }, - { 100381, true }, - { 100393, true }, - { 100410, true }, - { 100427, true }, - { 100439, true }, - { 100453, true }, - { 100475, true }, - { 100489, true }, - { 100507, true }, - { 100528, true }, - { 100545, true }, - { 100556, true }, - { 100569, true }, - { 100585, true }, - { 100597, true }, - { 100611, true }, - { 100627, true }, - { 100644, true }, - { 100658, true }, - { 100670, false }, - { 100695, true }, - { 100705, false }, - { 100731, true }, - { 100748, true }, - { 100759, true }, - { 100789, false }, - { 100803, true }, - { 100820, true }, - { 100834, true }, - { 100849, true }, - { 100857, true }, - { 100865, true }, + { 99929, true }, + { 99939, true }, + { 99953, true }, + { 99964, true }, + { 99977, true }, + { 99990, true }, + { 100002, true }, + { 100020, true }, + { 100031, true }, + { 100044, true }, + { 100055, true }, + { 100079, true }, + { 100094, true }, + { 100119, true }, + { 100127, true }, + { 100143, false }, + { 100158, true }, + { 100170, true }, + { 100182, true }, + { 100196, true }, + { 100210, true }, + { 100224, true }, + { 100238, true }, + { 100250, true }, + { 100267, true }, + { 100284, true }, + { 100296, true }, + { 100310, true }, + { 100332, true }, + { 100346, true }, + { 100364, true }, + { 100385, true }, + { 100402, true }, + { 100413, true }, + { 100426, true }, + { 100442, true }, + { 100454, true }, + { 100468, true }, + { 100484, true }, + { 100501, true }, + { 100515, true }, + { 100527, false }, + { 100552, true }, + { 100562, false }, + { 100588, true }, + { 100605, true }, + { 100616, true }, + { 100646, false }, + { 100660, true }, + { 100677, true }, + { 100691, true }, + { 100706, true }, + { 100714, true }, + { 100722, true }, + { 100730, true }, + { 100738, true }, + { 100746, true }, + { 100757, true }, + { 100767, true }, + { 100782, true }, + { 100796, true }, + { 100812, true }, + { 100823, true }, + { 100848, true }, + { 100857, false }, { 100873, true }, - { 100881, true }, - { 100889, true }, - { 100900, true }, - { 100910, true }, - { 100925, true }, - { 100939, true }, - { 100955, true }, - { 100966, true }, - { 100991, true }, - { 101000, false }, - { 101016, true }, - { 101026, false }, - { 101048, true }, + { 100883, false }, + { 100905, true }, + { 100920, true }, + { 100934, true }, + { 100947, true }, + { 100964, true }, + { 100980, true }, + { 101003, true }, + { 101025, true }, + { 101044, false }, { 101063, true }, - { 101077, true }, - { 101090, true }, - { 101107, true }, - { 101123, true }, - { 101146, true }, - { 101168, true }, - { 101187, false }, - { 101206, true }, - { 101219, true }, - { 101232, true }, - { 101256, true }, - { 101267, true }, - { 101286, true }, - { 101314, true }, - { 101335, true }, - { 101348, true }, - { 101364, true }, - { 101384, true }, - { 101404, true }, - { 101424, true }, - { 101438, true }, - { 101459, false }, - { 101470, true }, - { 101489, true }, + { 101076, true }, + { 101089, true }, + { 101113, true }, + { 101124, true }, + { 101143, true }, + { 101171, true }, + { 101192, true }, + { 101205, true }, + { 101221, true }, + { 101241, true }, + { 101261, true }, + { 101275, true }, + { 101296, false }, + { 101307, true }, + { 101326, true }, + { 101337, true }, + { 101349, true }, + { 101360, true }, + { 101375, true }, + { 101405, true }, + { 101419, true }, + { 101431, true }, + { 101442, true }, + { 101466, true }, + { 101487, true }, { 101500, true }, - { 101512, true }, - { 101523, true }, - { 101538, true }, - { 101568, true }, - { 101582, true }, - { 101594, true }, - { 101605, true }, - { 101629, true }, - { 101650, true }, - { 101663, true }, - { 101680, true }, - { 101696, true }, - { 101714, true }, - { 101728, true }, - { 101742, true }, - { 101758, true }, + { 101517, true }, + { 101533, true }, + { 101551, true }, + { 101565, true }, + { 101579, true }, + { 101595, true }, + { 101610, true }, + { 101630, true }, + { 101645, true }, + { 101664, true }, + { 101675, true }, + { 101692, true }, + { 101708, true }, + { 101725, true }, + { 101740, true }, + { 101756, true }, { 101773, true }, - { 101793, true }, - { 101808, true }, - { 101827, true }, - { 101838, true }, - { 101855, true }, - { 101871, true }, - { 101888, true }, - { 101903, true }, - { 101919, true }, - { 101936, true }, - { 101951, true }, - { 101970, true }, - { 101986, true }, - { 101996, true }, - { 102009, true }, - { 102028, true }, - { 102048, true }, - { 102060, true }, - { 102077, false }, - { 102092, true }, - { 102104, true }, - { 102117, true }, - { 102127, true }, - { 102144, true }, - { 102156, true }, - { 102166, true }, - { 102189, true }, - { 102203, true }, + { 101788, true }, + { 101807, true }, + { 101823, true }, + { 101833, true }, + { 101846, true }, + { 101865, true }, + { 101885, true }, + { 101897, true }, + { 101914, false }, + { 101929, true }, + { 101941, true }, + { 101954, true }, + { 101964, true }, + { 101981, true }, + { 101993, true }, + { 102003, true }, + { 102026, true }, + { 102040, true }, + { 102057, true }, + { 102072, true }, + { 102091, true }, + { 102124, true }, + { 102134, true }, + { 102150, false }, + { 102173, true }, + { 102185, true }, + { 102200, true }, { 102220, true }, - { 102235, true }, - { 102254, true }, - { 102287, true }, - { 102297, true }, - { 102313, false }, - { 102336, true }, - { 102348, true }, - { 102363, true }, - { 102383, true }, - { 102395, true }, - { 102413, true }, - { 102427, true }, - { 102440, true }, - { 102453, true }, - { 102466, true }, - { 102477, true }, - { 102492, true }, - { 102506, true }, - { 102520, true }, - { 102539, true }, + { 102232, true }, + { 102250, true }, + { 102264, true }, + { 102277, true }, + { 102290, true }, + { 102303, true }, + { 102314, true }, + { 102329, true }, + { 102343, true }, + { 102357, true }, + { 102365, true }, + { 102384, true }, + { 102406, true }, + { 102419, true }, + { 102429, false }, + { 102441, true }, + { 102455, true }, + { 102470, true }, + { 102489, true }, + { 102503, true }, + { 102528, true }, + { 102542, true }, { 102561, true }, - { 102574, true }, - { 102584, false }, - { 102596, true }, - { 102610, true }, - { 102625, true }, - { 102644, true }, - { 102658, true }, - { 102683, true }, - { 102697, true }, - { 102716, true }, - { 102733, true }, - { 102746, true }, - { 102763, true }, - { 102779, true }, - { 102798, true }, - { 102815, true }, - { 102823, true }, - { 102839, false }, - { 102856, true }, - { 102876, true }, - { 102890, true }, - { 102907, true }, - { 102924, true }, + { 102578, true }, + { 102591, true }, + { 102608, true }, + { 102624, true }, + { 102643, true }, + { 102660, true }, + { 102668, true }, + { 102684, false }, + { 102701, true }, + { 102721, true }, + { 102735, true }, + { 102752, true }, + { 102769, true }, + { 102788, true }, + { 102806, true }, + { 102819, true }, + { 102837, true }, + { 102846, true }, + { 102860, true }, + { 102877, true }, + { 102900, true }, + { 102909, true }, + { 102925, true }, { 102943, true }, - { 102961, true }, - { 102974, true }, - { 102992, true }, - { 103001, true }, - { 103015, true }, - { 103032, true }, + { 102955, true }, + { 102964, true }, + { 102977, true }, + { 102990, true }, + { 103006, true }, + { 103014, false }, + { 103026, true }, + { 103036, true }, { 103055, true }, - { 103064, true }, - { 103080, true }, - { 103098, true }, - { 103110, true }, - { 103119, true }, - { 103132, true }, - { 103145, true }, - { 103161, true }, - { 103169, false }, - { 103181, true }, - { 103191, true }, - { 103210, true }, - { 103225, true }, - { 103240, true }, - { 103262, true }, - { 103281, true }, - { 103295, true }, - { 103307, true }, - { 103321, true }, - { 103334, false }, - { 103356, true }, - { 103369, true }, + { 103070, true }, + { 103085, true }, + { 103107, true }, + { 103126, true }, + { 103140, true }, + { 103152, true }, + { 103166, true }, + { 103179, false }, + { 103201, true }, + { 103214, true }, + { 103228, true }, + { 103239, true }, + { 103253, false }, + { 103273, true }, + { 103284, false }, + { 103293, true }, + { 103308, false }, + { 103326, true }, + { 103336, true }, + { 103347, false }, + { 103362, true }, + { 103371, true }, { 103383, true }, - { 103394, true }, - { 103408, false }, - { 103428, true }, - { 103439, false }, - { 103448, false }, - { 103464, true }, - { 103479, false }, + { 103392, true }, + { 103405, true }, + { 103418, true }, + { 103429, true }, + { 103443, true }, + { 103456, true }, + { 103473, true }, + { 103490, true }, { 103497, true }, - { 103507, true }, - { 103518, false }, - { 103533, true }, - { 103542, true }, - { 103554, true }, + { 103505, true }, + { 103514, true }, + { 103526, true }, + { 103549, true }, { 103563, true }, - { 103576, true }, - { 103589, true }, - { 103600, true }, - { 103614, true }, - { 103627, true }, - { 103644, true }, - { 103661, true }, - { 103668, true }, - { 103676, true }, - { 103685, true }, - { 103697, true }, - { 103720, true }, - { 103734, true }, + { 103577, true }, + { 103594, true }, + { 103610, true }, + { 103624, true }, + { 103631, true }, + { 103642, true }, + { 103657, true }, + { 103669, true }, + { 103677, false }, + { 103687, true }, + { 103699, true }, + { 103711, true }, + { 103726, true }, + { 103740, true }, { 103748, true }, - { 103765, true }, - { 103781, true }, - { 103795, true }, - { 103802, true }, - { 103813, true }, - { 103828, true }, - { 103840, true }, - { 103848, false }, - { 103858, true }, - { 103870, true }, - { 103882, true }, - { 103897, true }, - { 103911, true }, - { 103919, true }, + { 103756, true }, + { 103769, true }, + { 103777, true }, + { 103788, true }, + { 103799, true }, + { 103806, true }, + { 103815, true }, + { 103825, true }, + { 103845, true }, + { 103857, true }, + { 103868, true }, + { 103877, false }, + { 103886, false }, + { 103907, true }, + { 103918, true }, { 103927, true }, - { 103940, true }, - { 103948, true }, - { 103959, true }, - { 103970, true }, - { 103977, true }, - { 103986, true }, - { 103996, true }, - { 104016, true }, - { 104028, true }, - { 104039, true }, - { 104048, false }, - { 104057, false }, - { 104078, true }, - { 104089, true }, - { 104098, true }, - { 104112, true }, - { 104129, true }, + { 103941, true }, + { 103958, true }, + { 103974, true }, + { 103991, true }, + { 104003, true }, + { 104017, true }, + { 104035, true }, + { 104049, true }, + { 104065, false }, + { 104083, true }, + { 104100, true }, + { 104122, true }, + { 104133, true }, { 104145, true }, - { 104162, true }, - { 104174, true }, - { 104188, true }, + { 104159, true }, + { 104170, true }, + { 104184, true }, + { 104195, true }, { 104206, true }, { 104220, true }, - { 104236, false }, - { 104254, true }, - { 104271, true }, - { 104293, true }, - { 104304, true }, - { 104316, true }, - { 104330, true }, - { 104341, true }, - { 104355, true }, - { 104366, true }, - { 104377, true }, - { 104391, true }, - { 104402, true }, - { 104431, true }, - { 104450, true }, - { 104469, true }, - { 104485, true }, - { 104511, true }, - { 104525, true }, - { 104542, true }, - { 104561, true }, - { 104578, true }, - { 104589, true }, + { 104231, true }, + { 104260, true }, + { 104279, true }, + { 104298, true }, + { 104314, true }, + { 104340, true }, + { 104354, true }, + { 104371, true }, + { 104390, true }, + { 104407, true }, + { 104418, true }, + { 104426, true }, + { 104438, true }, + { 104451, true }, + { 104466, true }, + { 104479, true }, + { 104492, true }, + { 104506, true }, + { 104518, true }, + { 104530, true }, + { 104543, true }, + { 104558, true }, + { 104571, true }, + { 104583, true }, { 104597, true }, - { 104609, true }, - { 104622, true }, - { 104637, true }, - { 104650, true }, - { 104663, true }, - { 104677, true }, - { 104689, true }, + { 104608, true }, + { 104631, true }, + { 104649, true }, + { 104668, true }, + { 104679, true }, { 104701, true }, - { 104714, true }, - { 104729, true }, - { 104742, true }, - { 104754, true }, - { 104768, true }, - { 104779, true }, - { 104802, true }, - { 104820, true }, - { 104839, true }, - { 104850, true }, - { 104872, true }, - { 104880, true }, - { 104898, true }, - { 104914, true }, - { 104926, true }, - { 104944, true }, - { 104954, true }, - { 104968, true }, - { 104984, true }, - { 105010, false }, - { 105039, true }, - { 105050, true }, - { 105065, true }, - { 105081, true }, - { 105096, true }, - { 105110, true }, - { 105137, true }, - { 105155, false }, - { 105166, true }, - { 105176, true }, - { 105191, true }, - { 105202, true }, + { 104709, true }, + { 104727, true }, + { 104743, true }, + { 104755, true }, + { 104773, true }, + { 104783, true }, + { 104797, true }, + { 104813, true }, + { 104839, false }, + { 104868, true }, + { 104879, true }, + { 104894, true }, + { 104910, true }, + { 104925, true }, + { 104939, true }, + { 104966, true }, + { 104984, false }, + { 104995, true }, + { 105005, true }, + { 105020, true }, + { 105031, true }, + { 105049, true }, + { 105072, true }, + { 105090, true }, + { 105103, false }, + { 105117, true }, + { 105139, true }, + { 105158, true }, + { 105172, true }, + { 105184, false }, + { 105204, true }, { 105220, true }, - { 105243, true }, - { 105261, true }, - { 105274, false }, - { 105288, true }, - { 105310, true }, - { 105329, true }, - { 105343, true }, - { 105355, false }, + { 105230, true }, + { 105244, true }, + { 105265, true }, + { 105283, true }, + { 105295, true }, + { 105305, true }, + { 105313, true }, + { 105327, true }, + { 105339, true }, + { 105351, true }, + { 105363, true }, { 105375, true }, - { 105391, true }, - { 105401, true }, - { 105415, true }, - { 105436, true }, - { 105454, true }, - { 105466, true }, - { 105476, true }, - { 105484, true }, - { 105498, true }, - { 105510, true }, - { 105522, true }, - { 105534, true }, - { 105546, true }, - { 105558, true }, - { 105570, true }, - { 105582, true }, - { 105594, true }, - { 105606, true }, - { 105622, true }, - { 105631, true }, - { 105645, true }, - { 105661, true }, + { 105387, true }, + { 105399, true }, + { 105411, true }, + { 105423, true }, + { 105435, true }, + { 105451, true }, + { 105460, true }, + { 105474, true }, + { 105490, true }, + { 105503, true }, + { 105526, true }, + { 105539, true }, + { 105547, false }, + { 105563, true }, + { 105581, true }, + { 105595, true }, + { 105605, true }, + { 105614, true }, + { 105627, true }, + { 105643, true }, + { 105660, false }, { 105674, true }, - { 105697, true }, - { 105710, true }, - { 105718, true }, - { 105736, true }, - { 105750, true }, - { 105760, true }, - { 105769, true }, - { 105782, true }, - { 105798, true }, - { 105815, false }, - { 105829, true }, - { 105849, true }, - { 105865, false }, - { 105877, true }, - { 105884, true }, - { 105899, true }, - { 105914, true }, - { 105926, true }, - { 105944, true }, - { 105963, true }, - { 105985, true }, - { 106005, true }, + { 105694, true }, + { 105710, false }, + { 105722, true }, + { 105729, true }, + { 105744, true }, + { 105759, true }, + { 105771, true }, + { 105789, true }, + { 105808, true }, + { 105830, true }, + { 105850, true }, + { 105867, true }, + { 105885, true }, + { 105903, true }, + { 105920, true }, + { 105934, true }, + { 105950, true }, + { 105967, true }, + { 105988, true }, + { 106003, true }, { 106022, true }, - { 106040, true }, - { 106058, true }, - { 106075, true }, - { 106089, true }, - { 106105, true }, - { 106122, true }, - { 106143, true }, - { 106158, true }, - { 106177, true }, - { 106201, true }, - { 106218, true }, - { 106231, true }, - { 106242, true }, - { 106255, true }, - { 106268, true }, - { 106282, true }, - { 106292, true }, - { 106303, true }, - { 106314, true }, - { 106326, true }, - { 106335, true }, - { 106344, true }, + { 106046, true }, + { 106063, true }, + { 106076, true }, + { 106087, true }, + { 106100, true }, + { 106113, true }, + { 106127, true }, + { 106137, true }, + { 106148, true }, + { 106159, true }, + { 106171, true }, + { 106180, true }, + { 106189, true }, + { 106200, true }, + { 106225, true }, + { 106236, true }, + { 106259, true }, + { 106280, true }, + { 106298, true }, + { 106317, false }, + { 106331, true }, + { 106342, true }, { 106355, true }, - { 106380, true }, - { 106391, true }, - { 106414, true }, + { 106370, true }, + { 106381, true }, + { 106395, true }, + { 106408, true }, + { 106422, true }, { 106435, true }, - { 106453, true }, - { 106472, false }, - { 106486, true }, + { 106446, true }, + { 106459, true }, + { 106473, true }, + { 106482, false }, { 106497, true }, { 106510, true }, - { 106525, true }, - { 106536, true }, - { 106550, true }, - { 106563, true }, - { 106577, true }, - { 106590, true }, - { 106601, true }, + { 106523, true }, + { 106542, true }, + { 106560, true }, + { 106576, true }, + { 106589, true }, + { 106604, true }, { 106614, true }, { 106628, true }, - { 106637, false }, - { 106652, true }, - { 106665, true }, - { 106678, true }, - { 106697, true }, - { 106715, true }, - { 106731, true }, - { 106744, true }, - { 106759, true }, - { 106769, true }, - { 106783, true }, - { 106810, true }, - { 106824, true }, - { 106832, true }, - { 106854, true }, - { 106868, true }, - { 106882, true }, - { 106901, true }, - { 106920, true }, - { 106939, true }, - { 106958, true }, - { 106978, true }, - { 106998, true }, - { 107018, true }, - { 107036, true }, - { 107055, true }, - { 107074, true }, - { 107093, true }, - { 107112, true }, - { 107126, true }, - { 107138, true }, - { 107150, true }, - { 107163, false }, - { 107185, true }, - { 107197, true }, - { 107222, true }, - { 107238, true }, - { 107247, true }, - { 107261, true }, + { 106655, true }, + { 106669, true }, + { 106677, true }, + { 106699, true }, + { 106713, true }, + { 106727, true }, + { 106746, true }, + { 106765, true }, + { 106784, true }, + { 106803, true }, + { 106823, true }, + { 106843, true }, + { 106863, true }, + { 106881, true }, + { 106900, true }, + { 106919, true }, + { 106938, true }, + { 106957, true }, + { 106971, true }, + { 106983, true }, + { 106995, true }, + { 107008, false }, + { 107030, true }, + { 107042, true }, + { 107067, true }, + { 107083, true }, + { 107092, true }, + { 107106, true }, + { 107123, true }, + { 107136, true }, + { 107151, true }, + { 107164, true }, + { 107176, true }, + { 107187, true }, + { 107201, true }, + { 107216, true }, + { 107229, true }, + { 107240, true }, + { 107254, true }, + { 107269, true }, { 107278, true }, { 107291, true }, - { 107306, true }, - { 107319, true }, - { 107331, true }, - { 107342, true }, - { 107356, true }, - { 107371, true }, - { 107384, true }, - { 107395, true }, - { 107409, true }, - { 107424, true }, - { 107433, true }, - { 107446, true }, + { 107310, true }, + { 107324, true }, + { 107339, true }, + { 107350, true }, + { 107360, true }, + { 107375, true }, + { 107390, true }, + { 107411, true }, + { 107425, true }, + { 107443, true }, + { 107455, true }, { 107465, true }, - { 107479, true }, - { 107494, true }, + { 107478, true }, + { 107493, true }, { 107505, true }, - { 107515, true }, - { 107530, true }, - { 107545, true }, - { 107566, true }, - { 107580, true }, - { 107598, true }, - { 107610, true }, - { 107620, true }, - { 107633, true }, - { 107648, true }, - { 107660, true }, - { 107675, true }, - { 107687, true }, + { 107520, true }, + { 107532, true }, + { 107540, true }, + { 107558, false }, + { 107568, true }, + { 107583, true }, + { 107600, true }, + { 107615, true }, + { 107628, true }, + { 107644, true }, + { 107664, true }, + { 107679, true }, { 107695, true }, - { 107713, false }, - { 107723, true }, - { 107738, true }, - { 107755, true }, - { 107770, true }, - { 107783, true }, - { 107799, true }, - { 107819, true }, - { 107834, true }, - { 107850, true }, - { 107864, true }, - { 107876, true }, - { 107889, true }, - { 107899, true }, - { 107913, true }, - { 107923, true }, + { 107709, true }, + { 107721, true }, + { 107734, true }, + { 107744, true }, + { 107758, true }, + { 107768, true }, + { 107788, true }, + { 107797, true }, + { 107807, true }, + { 107818, false }, + { 107827, true }, + { 107840, true }, + { 107859, true }, + { 107869, true }, + { 107880, true }, + { 107893, true }, + { 107900, true }, + { 107916, true }, + { 107927, true }, + { 107934, true }, { 107943, true }, - { 107952, true }, - { 107962, true }, - { 107973, false }, + { 107951, true }, + { 107961, true }, { 107982, true }, - { 107995, true }, + { 107994, true }, + { 108003, true }, { 108014, true }, { 108024, true }, { 108035, true }, - { 108048, true }, - { 108055, true }, - { 108071, true }, + { 108042, true }, + { 108051, true }, + { 108059, true }, + { 108070, true }, { 108082, true }, - { 108089, true }, + { 108090, true }, { 108098, true }, - { 108106, true }, - { 108116, true }, - { 108137, true }, - { 108149, true }, - { 108158, true }, - { 108169, true }, - { 108179, true }, - { 108190, true }, - { 108197, true }, - { 108206, true }, - { 108214, true }, - { 108225, true }, - { 108237, true }, - { 108245, true }, - { 108253, true }, - { 108267, true }, - { 108277, true }, - { 108289, true }, - { 108303, true }, - { 108333, true }, - { 108353, true }, - { 108367, false }, - { 108385, false }, - { 108401, true }, - { 108416, true }, - { 108437, true }, - { 108456, true }, - { 108469, true }, - { 108480, true }, - { 108490, true }, - { 108501, true }, - { 108515, true }, - { 108529, true }, - { 108542, true }, - { 108552, false }, - { 108568, true }, - { 108587, true }, - { 108613, true }, - { 108636, true }, - { 108653, true }, - { 108669, true }, - { 108682, true }, - { 108689, true }, - { 108701, true }, - { 108713, true }, - { 108723, false }, - { 108741, true }, - { 108754, true }, - { 108765, true }, - { 108775, false }, - { 108791, true }, + { 108112, true }, + { 108122, true }, + { 108134, true }, + { 108148, true }, + { 108178, true }, + { 108198, true }, + { 108212, false }, + { 108230, false }, + { 108246, true }, + { 108261, true }, + { 108282, true }, + { 108301, true }, + { 108314, true }, + { 108325, true }, + { 108335, true }, + { 108346, true }, + { 108360, true }, + { 108374, true }, + { 108387, true }, + { 108397, false }, + { 108413, true }, + { 108432, true }, + { 108458, true }, + { 108481, true }, + { 108498, true }, + { 108514, true }, + { 108527, true }, + { 108534, true }, + { 108546, true }, + { 108558, false }, + { 108576, true }, + { 108589, true }, + { 108600, true }, + { 108610, false }, + { 108626, true }, + { 108637, true }, + { 108646, true }, + { 108654, true }, + { 108665, true }, + { 108681, true }, + { 108693, false }, + { 108708, true }, + { 108723, true }, + { 108738, true }, + { 108757, true }, + { 108777, true }, + { 108788, true }, { 108802, true }, - { 108811, true }, - { 108819, true }, - { 108830, true }, - { 108846, true }, - { 108858, false }, - { 108873, true }, - { 108888, true }, - { 108903, true }, - { 108922, true }, - { 108942, true }, - { 108953, true }, - { 108967, true }, - { 108982, true }, - { 108998, true }, - { 109020, true }, - { 109033, true }, - { 109052, true }, - { 109065, true }, - { 109074, true }, - { 109089, true }, - { 109102, true }, - { 109114, true }, - { 109131, true }, - { 109155, true }, - { 109172, true }, - { 109184, true }, - { 109197, true }, - { 109212, true }, - { 109219, true }, - { 109232, true }, - { 109245, true }, - { 109259, true }, - { 109276, true }, - { 109291, true }, - { 109303, true }, + { 108817, true }, + { 108833, true }, + { 108855, true }, + { 108868, true }, + { 108887, true }, + { 108900, true }, + { 108909, true }, + { 108924, true }, + { 108937, true }, + { 108949, true }, + { 108966, true }, + { 108990, true }, + { 109007, true }, + { 109019, true }, + { 109032, true }, + { 109047, true }, + { 109054, true }, + { 109067, true }, + { 109080, true }, + { 109094, true }, + { 109111, true }, + { 109126, true }, + { 109138, true }, + { 109146, true }, + { 109161, true }, + { 109176, true }, + { 109191, true }, + { 109210, true }, + { 109229, true }, + { 109248, true }, + { 109263, true }, + { 109273, true }, + { 109286, true }, + { 109300, true }, { 109311, true }, { 109326, true }, - { 109341, true }, - { 109356, true }, - { 109375, true }, - { 109394, true }, + { 109342, true }, + { 109355, true }, + { 109368, true }, + { 109388, true }, + { 109397, true }, { 109413, true }, - { 109428, true }, - { 109438, true }, - { 109451, true }, - { 109465, true }, - { 109476, true }, - { 109491, true }, - { 109507, true }, + { 109426, true }, + { 109441, true }, + { 109450, true }, + { 109463, true }, + { 109481, true }, + { 109489, true }, + { 109502, true }, { 109520, true }, - { 109533, true }, - { 109553, true }, - { 109562, true }, - { 109578, true }, - { 109591, true }, - { 109606, true }, - { 109615, true }, - { 109628, true }, - { 109646, true }, - { 109654, true }, - { 109667, true }, - { 109685, true }, - { 109703, true }, - { 109734, true }, - { 109764, true }, - { 109786, true }, - { 109802, true }, - { 109813, false }, + { 109538, true }, + { 109569, true }, + { 109599, true }, + { 109621, true }, + { 109637, true }, + { 109648, false }, + { 109661, true }, + { 109673, true }, + { 109688, true }, + { 109705, false }, + { 109724, true }, + { 109735, true }, + { 109751, false }, + { 109759, true }, + { 109769, true }, + { 109785, true }, + { 109796, true }, + { 109813, true }, { 109826, true }, - { 109838, true }, - { 109853, true }, - { 109870, false }, - { 109889, true }, - { 109900, true }, - { 109916, false }, + { 109846, true }, + { 109856, true }, + { 109867, true }, + { 109877, true }, + { 109892, true }, + { 109907, true }, { 109924, true }, - { 109934, true }, + { 109939, true }, { 109950, true }, - { 109961, true }, - { 109978, true }, - { 109991, true }, - { 110011, true }, - { 110021, true }, - { 110032, true }, - { 110042, true }, - { 110057, true }, - { 110072, true }, - { 110089, true }, - { 110104, true }, - { 110115, true }, - { 110128, true }, - { 110141, true }, - { 110154, true }, + { 109963, true }, + { 109976, true }, + { 109989, true }, + { 110006, true }, + { 110018, true }, + { 110031, true }, + { 110040, true }, + { 110051, true }, + { 110061, true }, + { 110075, true }, + { 110086, true }, + { 110094, true }, + { 110103, true }, + { 110117, true }, + { 110127, true }, + { 110139, true }, + { 110149, true }, + { 110158, true }, { 110171, true }, - { 110183, true }, - { 110196, true }, - { 110205, true }, - { 110216, true }, - { 110226, true }, - { 110240, true }, - { 110251, true }, - { 110259, true }, - { 110268, true }, - { 110282, true }, - { 110292, true }, - { 110304, true }, - { 110314, true }, - { 110323, true }, + { 110182, true }, + { 110190, true }, + { 110197, true }, + { 110208, false }, + { 110228, false }, + { 110244, true }, + { 110264, true }, + { 110278, false }, + { 110289, true }, + { 110305, true }, + { 110318, true }, { 110336, true }, - { 110347, true }, - { 110355, true }, - { 110362, true }, - { 110373, false }, - { 110393, false }, + { 110350, true }, + { 110367, true }, + { 110386, true }, { 110409, true }, - { 110429, true }, - { 110443, false }, - { 110454, true }, - { 110470, true }, - { 110483, true }, - { 110501, true }, - { 110515, true }, - { 110532, true }, - { 110551, true }, - { 110574, true }, - { 110586, true }, - { 110596, true }, - { 110610, true }, - { 110620, true }, - { 110631, true }, + { 110421, true }, + { 110431, true }, + { 110445, true }, + { 110455, true }, + { 110466, true }, + { 110475, true }, + { 110484, true }, + { 110497, true }, + { 110514, true }, + { 110530, true }, + { 110544, true }, + { 110552, true }, + { 110566, true }, + { 110585, true }, + { 110601, true }, + { 110614, true }, + { 110629, true }, { 110640, true }, - { 110649, true }, - { 110662, true }, - { 110679, true }, - { 110695, true }, - { 110709, true }, + { 110651, true }, + { 110665, true }, + { 110680, true }, + { 110701, true }, { 110717, true }, - { 110731, true }, - { 110750, true }, + { 110735, true }, + { 110753, true }, { 110766, true }, - { 110779, true }, + { 110778, true }, { 110794, true }, - { 110805, true }, - { 110816, true }, - { 110830, true }, - { 110845, true }, - { 110866, true }, - { 110882, true }, - { 110900, true }, - { 110918, true }, - { 110931, true }, - { 110943, true }, - { 110959, true }, - { 110983, true }, - { 111000, true }, - { 111011, true }, - { 111030, true }, - { 111038, true }, - { 111052, true }, - { 111061, true }, - { 111068, false }, - { 111078, false }, - { 111098, true }, - { 111108, false }, - { 111127, false }, - { 111140, false }, - { 111151, false }, - { 111163, true }, - { 111184, true }, - { 111197, true }, - { 111210, true }, - { 111228, true }, - { 111237, true }, - { 111253, true }, - { 111266, true }, - { 111290, false }, - { 111306, true }, - { 111324, true }, - { 111336, true }, - { 111353, true }, - { 111367, true }, - { 111382, true }, - { 111396, true }, - { 111414, true }, - { 111424, true }, - { 111448, true }, + { 110818, true }, + { 110835, true }, + { 110846, true }, + { 110865, true }, + { 110873, true }, + { 110887, true }, + { 110896, true }, + { 110903, false }, + { 110913, false }, + { 110933, true }, + { 110943, false }, + { 110962, false }, + { 110975, false }, + { 110986, false }, + { 110998, true }, + { 111019, true }, + { 111032, true }, + { 111045, true }, + { 111063, true }, + { 111072, true }, + { 111088, true }, + { 111101, true }, + { 111125, false }, + { 111141, true }, + { 111159, true }, + { 111171, true }, + { 111188, true }, + { 111202, true }, + { 111217, true }, + { 111231, true }, + { 111249, true }, + { 111259, true }, + { 111283, true }, + { 111293, true }, + { 111304, true }, + { 111317, true }, + { 111332, true }, + { 111346, true }, + { 111361, true }, + { 111379, true }, + { 111389, false }, + { 111404, true }, + { 111417, false }, + { 111431, true }, + { 111442, true }, + { 111450, true }, { 111458, true }, - { 111469, true }, + { 111470, true }, { 111482, true }, - { 111497, true }, - { 111511, true }, - { 111526, true }, + { 111502, true }, + { 111525, true }, { 111544, true }, - { 111554, false }, - { 111569, true }, - { 111582, false }, - { 111596, true }, - { 111607, true }, - { 111615, true }, - { 111623, true }, - { 111635, true }, - { 111647, true }, - { 111667, true }, - { 111690, true }, - { 111709, true }, - { 111728, true }, - { 111747, true }, - { 111766, true }, - { 111785, true }, - { 111804, true }, - { 111823, true }, - { 111840, true }, - { 111858, true }, - { 111875, true }, - { 111888, true }, - { 111902, true }, - { 111917, true }, - { 111930, false }, - { 111944, true }, - { 111968, true }, - { 111985, true }, - { 112003, true }, - { 112019, true }, - { 112037, true }, - { 112054, true }, - { 112070, true }, - { 112083, true }, - { 112100, true }, - { 112132, true }, - { 112149, true }, - { 112157, true }, - { 112170, true }, - { 112197, true }, - { 112213, true }, - { 112229, true }, - { 112243, true }, - { 112256, true }, - { 112269, true }, - { 112279, true }, - { 112292, true }, - { 112302, true }, - { 112317, true }, - { 112332, false }, - { 112342, false }, - { 112352, true }, - { 112364, true }, - { 112375, false }, - { 112382, true }, - { 112395, true }, - { 112407, true }, + { 111563, true }, + { 111582, true }, + { 111601, true }, + { 111620, true }, + { 111639, true }, + { 111658, true }, + { 111675, true }, + { 111693, true }, + { 111710, true }, + { 111723, true }, + { 111737, true }, + { 111752, true }, + { 111765, false }, + { 111779, true }, + { 111803, true }, + { 111820, true }, + { 111838, true }, + { 111854, true }, + { 111872, true }, + { 111889, true }, + { 111905, true }, + { 111918, true }, + { 111935, true }, + { 111967, true }, + { 111984, true }, + { 111992, true }, + { 112005, true }, + { 112032, true }, + { 112048, true }, + { 112064, true }, + { 112078, true }, + { 112091, true }, + { 112104, true }, + { 112114, true }, + { 112127, true }, + { 112137, true }, + { 112152, true }, + { 112167, false }, + { 112177, false }, + { 112187, true }, + { 112199, true }, + { 112210, false }, + { 112217, true }, + { 112230, true }, + { 112242, true }, + { 112262, true }, + { 112273, true }, + { 112294, true }, + { 112310, true }, + { 112329, true }, + { 112339, true }, + { 112350, true }, + { 112359, true }, + { 112368, true }, + { 112381, true }, + { 112398, true }, { 112427, true }, - { 112438, true }, - { 112459, true }, - { 112475, true }, + { 112446, true }, + { 112463, true }, + { 112486, true }, { 112494, true }, - { 112504, true }, - { 112515, true }, - { 112524, true }, - { 112533, true }, - { 112550, true }, - { 112579, true }, - { 112598, true }, - { 112615, true }, - { 112638, true }, - { 112646, true }, - { 112664, false }, - { 112678, true }, - { 112693, false }, - { 112704, true }, - { 112717, true }, - { 112728, true }, - { 112741, true }, - { 112758, true }, - { 112771, true }, - { 112782, false }, - { 112794, true }, - { 112803, true }, + { 112512, false }, + { 112526, true }, + { 112541, false }, + { 112552, true }, + { 112565, true }, + { 112576, true }, + { 112589, true }, + { 112606, true }, + { 112619, true }, + { 112630, false }, + { 112642, true }, + { 112651, true }, + { 112661, true }, + { 112670, true }, + { 112680, true }, + { 112693, true }, + { 112703, true }, + { 112716, true }, + { 112726, true }, + { 112735, true }, + { 112748, true }, + { 112759, true }, + { 112773, true }, + { 112788, true }, + { 112802, true }, { 112813, true }, - { 112822, true }, - { 112832, true }, - { 112845, true }, - { 112855, true }, - { 112868, true }, - { 112878, true }, - { 112887, true }, - { 112900, true }, - { 112911, true }, - { 112925, true }, - { 112940, true }, - { 112954, true }, - { 112965, true }, - { 112977, true }, + { 112825, true }, + { 112833, true }, + { 112847, true }, + { 112862, false }, + { 112876, true }, + { 112888, true }, + { 112903, true }, + { 112917, true }, + { 112926, true }, + { 112945, true }, + { 112960, true }, + { 112972, true }, { 112985, true }, - { 112999, true }, - { 113014, false }, - { 113028, true }, - { 113040, true }, + { 112995, true }, + { 113016, true }, + { 113034, true }, { 113055, true }, - { 113069, true }, - { 113078, true }, - { 113097, true }, - { 113112, true }, - { 113124, true }, - { 113137, true }, - { 113147, true }, - { 113168, true }, - { 113186, true }, - { 113207, true }, - { 113233, true }, - { 113256, true }, - { 113275, true }, - { 113300, true }, - { 113324, true }, - { 113335, true }, - { 113346, true }, - { 113357, true }, - { 113371, true }, - { 113382, true }, - { 113392, true }, - { 113400, true }, - { 113407, true }, - { 113418, true }, + { 113081, true }, + { 113104, true }, + { 113123, true }, + { 113148, true }, + { 113172, true }, + { 113183, true }, + { 113194, true }, + { 113205, true }, + { 113219, true }, + { 113230, true }, + { 113240, true }, + { 113248, true }, + { 113255, true }, + { 113266, true }, + { 113277, true }, + { 113292, true }, + { 113307, true }, + { 113318, true }, + { 113327, true }, + { 113336, true }, + { 113347, true }, + { 113358, true }, + { 113372, true }, + { 113381, true }, + { 113389, true }, + { 113401, true }, + { 113413, true }, { 113429, true }, - { 113444, true }, - { 113459, true }, - { 113470, true }, + { 113439, true }, + { 113458, true }, + { 113466, true }, { 113479, true }, { 113488, true }, - { 113499, true }, - { 113510, true }, - { 113524, true }, - { 113533, true }, - { 113541, true }, - { 113553, true }, - { 113565, true }, - { 113581, true }, - { 113591, true }, + { 113509, true }, + { 113528, true }, + { 113544, true }, + { 113559, true }, + { 113572, true }, + { 113588, true }, + { 113596, true }, { 113610, true }, - { 113618, true }, - { 113631, true }, - { 113640, true }, - { 113661, true }, - { 113680, true }, - { 113696, true }, - { 113711, true }, - { 113724, true }, - { 113740, true }, + { 113629, false }, + { 113638, true }, + { 113648, true }, + { 113670, true }, + { 113692, true }, + { 113707, true }, + { 113720, false }, + { 113734, true }, { 113748, true }, - { 113762, true }, - { 113781, false }, - { 113790, true }, - { 113800, true }, - { 113822, true }, - { 113844, true }, - { 113859, true }, - { 113872, false }, - { 113886, true }, - { 113900, true }, - { 113908, true }, - { 113920, true }, - { 113931, true }, - { 113943, true }, - { 113961, true }, - { 113974, true }, - { 113987, true }, - { 113999, true }, - { 114009, true }, + { 113756, true }, + { 113768, true }, + { 113779, true }, + { 113791, true }, + { 113801, true }, + { 113810, true }, + { 113820, true }, + { 113830, true }, + { 113845, true }, + { 113857, true }, + { 113870, true }, + { 113880, true }, + { 113893, true }, + { 113904, true }, + { 113927, false }, + { 113941, true }, + { 113953, true }, + { 113966, true }, + { 113979, true }, + { 113990, true }, + { 114004, true }, { 114018, true }, { 114028, true }, - { 114038, true }, - { 114048, true }, - { 114063, true }, - { 114075, true }, - { 114088, true }, - { 114098, true }, - { 114111, true }, - { 114122, true }, - { 114145, false }, - { 114159, true }, + { 114037, true }, + { 114047, true }, + { 114062, true }, + { 114074, true }, + { 114086, true }, + { 114100, true }, + { 114117, true }, + { 114127, false }, + { 114136, false }, + { 114155, true }, { 114171, true }, - { 114184, true }, - { 114197, true }, - { 114208, true }, - { 114222, true }, - { 114236, true }, - { 114246, true }, - { 114255, true }, - { 114265, true }, - { 114280, true }, - { 114292, true }, - { 114304, true }, - { 114318, true }, - { 114335, true }, - { 114345, false }, - { 114354, false }, - { 114373, true }, - { 114389, true }, - { 114404, true }, - { 114419, true }, - { 114431, true }, - { 114444, true }, - { 114456, true }, - { 114469, true }, - { 114487, true }, - { 114502, true }, - { 114517, false }, - { 114533, true }, - { 114545, true }, - { 114557, true }, - { 114568, true }, - { 114581, false }, - { 114596, true }, - { 114611, true }, - { 114621, true }, - { 114641, true }, - { 114651, true }, - { 114665, true }, - { 114679, true }, - { 114690, true }, - { 114706, true }, - { 114717, true }, - { 114735, true }, - { 114753, true }, - { 114766, true }, - { 114787, false }, - { 114806, true }, - { 114826, true }, - { 114848, true }, - { 114860, true }, - { 114878, true }, - { 114893, true }, - { 114905, true }, - { 114921, true }, - { 114936, true }, - { 114952, true }, - { 114968, true }, - { 114985, true }, - { 115007, true }, - { 115018, true }, - { 115034, true }, - { 115047, true }, + { 114186, true }, + { 114201, true }, + { 114213, true }, + { 114226, true }, + { 114238, true }, + { 114251, true }, + { 114269, true }, + { 114284, true }, + { 114299, false }, + { 114315, true }, + { 114327, true }, + { 114339, true }, + { 114350, true }, + { 114363, false }, + { 114378, true }, + { 114393, true }, + { 114403, true }, + { 114423, true }, + { 114433, true }, + { 114447, true }, + { 114461, true }, + { 114472, true }, + { 114488, true }, + { 114499, true }, + { 114517, true }, + { 114535, true }, + { 114548, true }, + { 114569, false }, + { 114588, true }, + { 114608, true }, + { 114630, true }, + { 114642, true }, + { 114660, true }, + { 114675, true }, + { 114687, true }, + { 114703, true }, + { 114718, true }, + { 114734, true }, + { 114750, true }, + { 114767, true }, + { 114789, true }, + { 114800, true }, + { 114816, true }, + { 114829, true }, + { 114849, true }, + { 114864, true }, + { 114887, true }, + { 114902, true }, + { 114927, true }, + { 114945, true }, + { 114960, true }, + { 114976, true }, + { 114991, true }, + { 115020, true }, + { 115045, true }, { 115067, true }, - { 115082, true }, - { 115105, true }, - { 115120, true }, - { 115145, true }, - { 115163, true }, - { 115178, true }, - { 115194, true }, - { 115209, true }, - { 115238, true }, - { 115263, true }, - { 115285, true }, - { 115303, true }, - { 115317, true }, + { 115085, true }, + { 115099, true }, + { 115112, true }, + { 115119, true }, + { 115135, true }, + { 115146, true }, + { 115157, true }, + { 115167, true }, + { 115181, true }, + { 115195, true }, + { 115207, true }, + { 115219, true }, + { 115230, true }, + { 115245, true }, + { 115260, true }, + { 115267, true }, + { 115277, true }, + { 115287, true }, + { 115296, true }, + { 115312, true }, + { 115321, true }, { 115330, true }, { 115345, true }, - { 115352, true }, - { 115368, true }, - { 115379, true }, - { 115390, true }, - { 115400, true }, - { 115414, true }, - { 115428, true }, - { 115440, true }, - { 115452, true }, - { 115463, true }, + { 115354, true }, + { 115366, true }, + { 115382, true }, + { 115401, true }, + { 115413, false }, + { 115430, true }, + { 115450, true }, + { 115465, true }, { 115478, true }, - { 115493, true }, - { 115500, true }, - { 115510, true }, + { 115496, true }, + { 115511, true }, { 115520, true }, - { 115529, true }, - { 115545, true }, - { 115554, true }, - { 115563, true }, - { 115578, true }, - { 115587, true }, - { 115599, true }, + { 115536, true }, + { 115551, true }, + { 115565, true }, + { 115581, true }, + { 115596, true }, { 115615, true }, - { 115634, true }, - { 115646, false }, - { 115663, true }, - { 115683, true }, - { 115698, true }, - { 115711, true }, - { 115729, true }, - { 115744, true }, - { 115753, true }, - { 115769, true }, - { 115784, true }, - { 115798, true }, - { 115814, true }, - { 115829, true }, - { 115848, true }, - { 115864, true }, - { 115875, true }, - { 115884, true }, - { 115894, true }, - { 115913, true }, - { 115928, true }, + { 115631, true }, + { 115642, true }, + { 115651, true }, + { 115661, true }, + { 115680, true }, + { 115695, true }, + { 115709, true }, + { 115722, true }, + { 115730, true }, + { 115739, true }, + { 115751, true }, + { 115760, true }, + { 115772, true }, + { 115780, true }, + { 115792, true }, + { 115818, true }, + { 115841, false }, + { 115857, true }, + { 115878, true }, + { 115897, true }, + { 115911, true }, + { 115925, true }, { 115942, true }, - { 115955, true }, - { 115963, true }, - { 115972, true }, - { 115984, true }, + { 115956, true }, + { 115970, false }, + { 115985, true }, { 115993, true }, - { 116005, true }, - { 116013, true }, - { 116025, true }, - { 116051, true }, - { 116074, false }, - { 116090, true }, - { 116111, true }, + { 116008, true }, + { 116019, true }, + { 116033, true }, + { 116044, true }, + { 116062, true }, + { 116079, true }, + { 116099, true }, + { 116123, true }, { 116130, true }, - { 116144, true }, - { 116158, true }, - { 116175, true }, - { 116189, true }, - { 116203, false }, - { 116218, true }, - { 116226, true }, - { 116241, true }, - { 116252, true }, - { 116266, true }, - { 116277, true }, - { 116295, true }, - { 116312, true }, - { 116332, true }, - { 116356, true }, - { 116363, true }, - { 116374, true }, - { 116385, true }, - { 116398, true }, - { 116410, false }, - { 116425, true }, - { 116438, true }, - { 116448, true }, - { 116463, false }, - { 116472, true }, - { 116486, true }, - { 116501, true }, + { 116141, true }, + { 116152, true }, + { 116165, true }, + { 116177, false }, + { 116192, true }, + { 116205, true }, + { 116215, true }, + { 116230, false }, + { 116239, true }, + { 116253, true }, + { 116268, true }, + { 116278, true }, + { 116290, true }, + { 116300, true }, + { 116313, true }, + { 116325, true }, + { 116333, true }, + { 116343, true }, + { 116354, true }, + { 116375, true }, + { 116385, false }, + { 116405, true }, + { 116416, true }, + { 116423, true }, + { 116433, true }, + { 116443, true }, + { 116451, false }, + { 116471, true }, + { 116480, true }, + { 116489, true }, + { 116497, true }, { 116511, true }, - { 116523, true }, - { 116533, true }, - { 116546, true }, - { 116558, true }, - { 116566, true }, - { 116576, true }, - { 116587, true }, - { 116608, true }, - { 116618, false }, - { 116638, true }, - { 116649, true }, - { 116656, true }, - { 116666, true }, - { 116676, true }, - { 116684, false }, - { 116704, true }, - { 116713, true }, - { 116722, true }, - { 116730, true }, - { 116744, true }, - { 116759, true }, - { 116771, true }, - { 116784, true }, - { 116792, true }, - { 116810, true }, - { 116821, true }, - { 116829, true }, - { 116839, true }, - { 116848, true }, - { 116861, true }, - { 116876, true }, - { 116888, true }, - { 116900, true }, - { 116914, true }, - { 116930, true }, - { 116948, true }, - { 116961, true }, - { 116974, false }, - { 116987, true }, + { 116526, true }, + { 116538, true }, + { 116551, true }, + { 116559, true }, + { 116577, true }, + { 116588, true }, + { 116596, true }, + { 116606, true }, + { 116615, true }, + { 116628, true }, + { 116643, true }, + { 116655, true }, + { 116667, true }, + { 116681, true }, + { 116697, true }, + { 116715, true }, + { 116728, true }, + { 116741, false }, + { 116754, true }, + { 116768, true }, + { 116787, true }, + { 116795, true }, + { 116807, true }, + { 116827, true }, + { 116840, true }, + { 116852, true }, + { 116878, true }, + { 116896, true }, + { 116913, true }, + { 116924, true }, + { 116937, true }, + { 116953, true }, + { 116967, true }, + { 116985, true }, { 117001, true }, - { 117020, true }, - { 117028, true }, - { 117040, true }, - { 117060, true }, + { 117024, true }, + { 117043, true }, + { 117057, true }, { 117073, true }, - { 117085, true }, - { 117111, true }, - { 117129, true }, - { 117146, true }, - { 117157, true }, - { 117170, true }, + { 117090, true }, + { 117120, false }, + { 117136, true }, + { 117148, true }, + { 117159, true }, + { 117172, true }, { 117186, true }, - { 117200, true }, + { 117203, true }, { 117218, true }, - { 117234, true }, - { 117257, true }, - { 117276, true }, + { 117233, true }, + { 117244, true }, + { 117262, true }, + { 117278, true }, { 117290, true }, - { 117306, true }, - { 117323, true }, - { 117353, false }, - { 117369, true }, - { 117381, true }, - { 117392, true }, - { 117405, true }, - { 117419, true }, - { 117436, true }, - { 117451, true }, - { 117466, true }, - { 117477, true }, - { 117495, true }, - { 117511, true }, - { 117523, true }, - { 117533, true }, - { 117550, true }, - { 117566, true }, - { 117578, false }, - { 117592, true }, - { 117606, true }, - { 117616, true }, + { 117300, true }, + { 117317, true }, + { 117333, true }, + { 117345, false }, + { 117359, true }, + { 117373, true }, + { 117383, true }, + { 117397, true }, + { 117409, true }, + { 117423, true }, + { 117439, true }, + { 117454, true }, + { 117465, true }, + { 117476, true }, + { 117488, true }, + { 117497, true }, + { 117506, true }, + { 117513, true }, + { 117524, true }, + { 117532, true }, + { 117539, true }, + { 117549, true }, + { 117557, true }, + { 117565, true }, + { 117573, true }, + { 117586, true }, + { 117601, true }, + { 117611, true }, + { 117618, true }, { 117630, true }, - { 117642, true }, - { 117656, true }, - { 117672, true }, - { 117687, true }, - { 117698, true }, - { 117709, true }, - { 117721, true }, - { 117730, true }, + { 117646, true }, + { 117658, true }, + { 117670, true }, + { 117682, true }, + { 117693, true }, + { 117701, true }, + { 117712, true }, + { 117723, true }, { 117739, true }, - { 117746, true }, - { 117757, true }, - { 117765, true }, - { 117772, true }, + { 117751, false }, + { 117761, true }, { 117782, true }, - { 117790, true }, - { 117798, true }, - { 117806, true }, - { 117819, true }, - { 117834, true }, - { 117841, true }, - { 117853, true }, - { 117869, true }, - { 117881, true }, - { 117893, true }, - { 117905, true }, - { 117916, true }, - { 117924, true }, - { 117935, true }, - { 117946, true }, - { 117962, true }, - { 117974, false }, - { 117984, true }, - { 118005, true }, - { 118026, true }, - { 118048, true }, - { 118063, true }, - { 118080, true }, - { 118093, true }, - { 118107, true }, - { 118118, true }, - { 118127, true }, - { 118137, true }, - { 118144, true }, - { 118152, true }, - { 118164, true }, - { 118173, true }, - { 118182, true }, - { 118190, true }, - { 118205, true }, - { 118213, true }, - { 118225, false }, - { 118235, true }, - { 118245, true }, - { 118256, true }, - { 118265, true }, - { 118283, true }, - { 118293, false }, - { 118304, true }, - { 118312, true }, - { 118320, false }, - { 118328, true }, - { 118344, true }, - { 118357, true }, - { 118368, true }, - { 118380, true }, - { 118399, true }, - { 118425, true }, - { 118439, true }, - { 118453, false }, - { 118471, true }, - { 118487, true }, - { 118502, true }, - { 118513, true }, + { 117803, true }, + { 117825, true }, + { 117840, true }, + { 117857, true }, + { 117870, true }, + { 117884, true }, + { 117895, true }, + { 117904, true }, + { 117914, true }, + { 117921, true }, + { 117929, true }, + { 117941, true }, + { 117950, true }, + { 117959, true }, + { 117967, true }, + { 117982, true }, + { 117990, true }, + { 118002, false }, + { 118012, true }, + { 118022, true }, + { 118033, true }, + { 118042, true }, + { 118060, true }, + { 118070, false }, + { 118081, true }, + { 118089, true }, + { 118097, false }, + { 118105, true }, + { 118121, true }, + { 118134, true }, + { 118145, true }, + { 118157, true }, + { 118176, true }, + { 118202, true }, + { 118216, true }, + { 118230, false }, + { 118248, true }, + { 118264, true }, + { 118279, true }, + { 118290, true }, + { 118309, true }, + { 118325, true }, + { 118337, true }, + { 118349, true }, + { 118362, true }, + { 118374, true }, + { 118387, true }, + { 118404, true }, + { 118426, true }, + { 118436, true }, + { 118446, true }, + { 118458, false }, + { 118469, true }, + { 118483, true }, + { 118492, true }, + { 118503, true }, + { 118519, true }, { 118532, true }, { 118548, true }, - { 118560, true }, - { 118572, true }, - { 118585, true }, - { 118597, true }, - { 118610, true }, - { 118627, true }, - { 118649, true }, - { 118659, true }, - { 118669, true }, - { 118681, false }, - { 118692, true }, - { 118706, true }, - { 118715, true }, - { 118726, true }, - { 118742, true }, - { 118755, true }, - { 118771, true }, - { 118798, true }, - { 118810, true }, - { 118824, true }, - { 118834, false }, - { 118857, true }, - { 118874, true }, - { 118883, true }, - { 118895, true }, - { 118909, true }, - { 118918, true }, - { 118926, true }, - { 118939, true }, - { 118964, true }, - { 118975, true }, - { 118988, true }, - { 119002, true }, - { 119015, false }, - { 119026, true }, - { 119034, true }, - { 119046, true }, - { 119057, true }, - { 119072, true }, - { 119092, true }, - { 119100, true }, - { 119114, true }, - { 119132, false }, - { 119145, true }, - { 119166, true }, - { 119176, true }, - { 119189, true }, + { 118575, true }, + { 118587, true }, + { 118601, true }, + { 118611, false }, + { 118634, true }, + { 118651, true }, + { 118660, true }, + { 118672, true }, + { 118686, true }, + { 118695, true }, + { 118703, true }, + { 118716, true }, + { 118741, true }, + { 118752, true }, + { 118765, true }, + { 118779, true }, + { 118792, false }, + { 118803, true }, + { 118811, true }, + { 118823, true }, + { 118834, true }, + { 118849, true }, + { 118869, true }, + { 118877, true }, + { 118891, true }, + { 118909, false }, + { 118922, true }, + { 118943, true }, + { 118953, true }, + { 118966, true }, + { 118997, true }, + { 119014, true }, + { 119027, true }, + { 119042, true }, + { 119054, true }, + { 119064, true }, + { 119071, true }, + { 119088, true }, + { 119104, true }, + { 119116, true }, + { 119130, true }, + { 119142, true }, + { 119157, true }, + { 119175, true }, + { 119188, true }, + { 119198, true }, + { 119209, true }, { 119220, true }, - { 119237, true }, - { 119250, true }, - { 119265, true }, - { 119277, true }, + { 119231, true }, + { 119246, true }, + { 119258, false }, + { 119270, true }, { 119287, true }, - { 119294, true }, - { 119311, true }, - { 119327, true }, - { 119339, true }, - { 119353, true }, - { 119365, true }, - { 119380, true }, - { 119398, true }, - { 119411, true }, - { 119421, true }, - { 119432, true }, - { 119443, true }, - { 119454, true }, - { 119469, true }, - { 119481, false }, - { 119493, true }, - { 119510, true }, - { 119524, true }, - { 119541, true }, - { 119551, true }, - { 119564, false }, - { 119582, true }, - { 119593, true }, - { 119609, true }, - { 119624, true }, - { 119641, true }, - { 119658, true }, - { 119675, true }, + { 119301, true }, + { 119318, true }, + { 119328, true }, + { 119341, false }, + { 119359, true }, + { 119370, true }, + { 119386, true }, + { 119401, true }, + { 119418, true }, + { 119435, true }, + { 119452, true }, + { 119462, true }, + { 119477, true }, + { 119487, true }, + { 119502, true }, + { 119519, true }, + { 119537, true }, + { 119552, true }, + { 119577, true }, + { 119594, true }, + { 119613, true }, + { 119630, true }, + { 119650, true }, + { 119671, true }, { 119685, true }, - { 119700, true }, { 119710, true }, - { 119725, true }, - { 119742, true }, - { 119760, true }, - { 119775, true }, - { 119800, true }, - { 119817, true }, - { 119836, true }, - { 119853, true }, + { 119731, true }, + { 119753, true }, + { 119783, true }, + { 119807, true }, + { 119822, true }, + { 119832, true }, + { 119855, true }, + { 119866, true }, { 119873, true }, - { 119894, true }, - { 119908, true }, + { 119887, true }, + { 119906, true }, + { 119913, true }, { 119933, true }, - { 119954, true }, - { 119976, true }, - { 120006, true }, - { 120030, true }, - { 120045, true }, - { 120055, true }, - { 120078, true }, - { 120089, true }, - { 120096, true }, - { 120110, true }, - { 120129, true }, - { 120136, true }, - { 120156, true }, - { 120175, true }, - { 120191, true }, - { 120201, true }, - { 120212, true }, + { 119952, true }, + { 119968, true }, + { 119978, true }, + { 119989, true }, + { 119999, true }, + { 120010, true }, + { 120024, true }, + { 120036, true }, + { 120052, true }, + { 120060, true }, + { 120070, true }, + { 120080, true }, + { 120092, true }, + { 120103, true }, + { 120119, true }, + { 120134, true }, + { 120158, true }, + { 120172, true }, + { 120180, true }, + { 120198, true }, + { 120209, true }, { 120222, true }, { 120233, true }, - { 120247, true }, - { 120259, true }, - { 120275, true }, - { 120283, true }, - { 120293, true }, - { 120303, true }, - { 120315, true }, - { 120326, true }, - { 120342, true }, - { 120357, true }, - { 120381, true }, - { 120395, true }, - { 120403, true }, - { 120421, true }, - { 120432, true }, - { 120445, true }, - { 120456, true }, - { 120475, true }, - { 120486, true }, - { 120501, true }, - { 120516, false }, - { 120528, true }, - { 120540, true }, - { 120558, true }, - { 120578, true }, + { 120252, true }, + { 120263, true }, + { 120278, true }, + { 120293, false }, + { 120305, true }, + { 120317, true }, + { 120335, true }, + { 120355, true }, + { 120367, true }, + { 120384, true }, + { 120399, true }, + { 120413, true }, + { 120427, true }, + { 120438, true }, + { 120447, true }, + { 120465, true }, + { 120476, true }, + { 120490, true }, + { 120497, true }, + { 120514, false }, + { 120540, false }, + { 120552, true }, + { 120565, true }, + { 120579, true }, { 120590, true }, { 120607, true }, - { 120622, true }, - { 120636, true }, - { 120650, true }, - { 120661, true }, - { 120670, true }, - { 120688, true }, - { 120699, true }, - { 120713, true }, - { 120720, true }, - { 120737, false }, - { 120763, false }, - { 120775, true }, - { 120788, true }, - { 120802, true }, - { 120813, true }, - { 120830, true }, - { 120840, true }, - { 120855, true }, + { 120617, true }, + { 120632, true }, + { 120653, true }, + { 120677, true }, + { 120691, true }, + { 120702, true }, + { 120716, true }, + { 120728, true }, + { 120743, true }, + { 120766, true }, + { 120786, true }, + { 120808, true }, + { 120822, true }, + { 120837, false }, + { 120850, true }, + { 120865, true }, { 120876, true }, - { 120900, true }, - { 120914, true }, - { 120925, true }, - { 120939, true }, - { 120951, true }, - { 120966, true }, - { 120989, true }, - { 121009, true }, - { 121031, true }, + { 120896, true }, + { 120907, true }, + { 120926, true }, + { 120934, true }, + { 120950, true }, + { 120959, true }, + { 120970, true }, + { 120980, true }, + { 120990, true }, + { 121001, true }, + { 121008, true }, + { 121026, true }, + { 121038, true }, { 121045, true }, - { 121060, false }, - { 121073, true }, - { 121088, true }, - { 121099, true }, - { 121119, true }, - { 121130, true }, - { 121149, true }, - { 121157, true }, - { 121173, true }, - { 121182, true }, - { 121193, true }, + { 121056, true }, + { 121078, true }, + { 121092, true }, + { 121111, true }, + { 121131, true }, + { 121150, true }, + { 121159, true }, + { 121171, true }, + { 121189, true }, { 121203, true }, - { 121213, true }, - { 121224, true }, - { 121231, true }, - { 121249, true }, - { 121261, true }, - { 121268, true }, - { 121279, true }, - { 121301, true }, - { 121315, true }, - { 121334, true }, - { 121354, true }, - { 121373, true }, - { 121382, true }, - { 121394, true }, - { 121412, true }, - { 121426, true }, - { 121435, true }, - { 121451, true }, - { 121459, true }, - { 121471, true }, - { 121486, true }, - { 121506, true }, - { 121514, true }, - { 121527, true }, - { 121539, true }, - { 121558, true }, - { 121572, true }, - { 121592, true }, - { 121605, true }, - { 121629, true }, - { 121645, true }, - { 121659, true }, - { 121673, true }, - { 121690, true }, - { 121702, true }, - { 121718, true }, - { 121735, true }, - { 121743, true }, + { 121212, true }, + { 121228, true }, + { 121236, true }, + { 121248, true }, + { 121263, true }, + { 121283, true }, + { 121291, true }, + { 121303, true }, + { 121322, true }, + { 121336, true }, + { 121356, true }, + { 121369, true }, + { 121393, true }, + { 121409, true }, + { 121423, true }, + { 121437, true }, + { 121454, true }, + { 121466, true }, + { 121482, true }, + { 121499, true }, + { 121507, true }, + { 121516, true }, + { 121534, true }, + { 121543, false }, + { 121552, true }, + { 121566, true }, + { 121576, true }, + { 121587, true }, + { 121596, true }, + { 121619, true }, + { 121631, true }, + { 121641, false }, + { 121650, true }, + { 121657, true }, + { 121666, true }, + { 121674, true }, + { 121683, true }, + { 121695, false }, + { 121709, true }, + { 121719, true }, + { 121729, true }, + { 121739, false }, { 121752, true }, { 121770, true }, - { 121779, false }, - { 121788, true }, - { 121802, true }, - { 121812, true }, - { 121823, true }, - { 121832, true }, - { 121855, true }, - { 121867, true }, - { 121877, false }, - { 121886, true }, - { 121893, true }, - { 121902, true }, + { 121780, true }, + { 121791, true }, + { 121800, true }, + { 121813, true }, + { 121828, true }, + { 121841, true }, + { 121851, true }, + { 121862, true }, + { 121871, true }, + { 121888, true }, + { 121897, true }, { 121910, true }, - { 121919, true }, - { 121931, false }, - { 121945, true }, - { 121955, true }, - { 121965, true }, - { 121975, false }, - { 121988, true }, - { 122006, true }, - { 122016, true }, - { 122027, true }, - { 122036, true }, - { 122049, true }, - { 122064, true }, - { 122077, true }, - { 122087, true }, - { 122098, true }, - { 122107, true }, - { 122124, true }, - { 122133, true }, - { 122146, true }, - { 122157, true }, - { 122175, true }, - { 122185, true }, - { 122197, true }, - { 122209, false }, - { 122226, true }, - { 122249, true }, - { 122260, true }, - { 122273, true }, + { 121921, true }, + { 121939, true }, + { 121949, true }, + { 121961, true }, + { 121973, false }, + { 121990, true }, + { 122013, true }, + { 122024, true }, + { 122037, true }, + { 122046, true }, + { 122059, false }, + { 122068, false }, + { 122079, true }, + { 122091, false }, + { 122106, false }, + { 122117, true }, + { 122131, false }, + { 122138, true }, + { 122154, true }, + { 122172, true }, + { 122191, true }, + { 122208, true }, + { 122222, true }, + { 122238, true }, + { 122251, true }, + { 122265, true }, { 122282, true }, - { 122295, false }, - { 122304, false }, - { 122315, true }, - { 122327, false }, - { 122342, false }, - { 122353, true }, - { 122367, false }, - { 122374, true }, + { 122301, true }, + { 122316, false }, + { 122330, true }, + { 122344, true }, + { 122357, true }, + { 122378, true }, { 122390, true }, - { 122408, true }, - { 122427, true }, - { 122444, true }, + { 122403, true }, + { 122413, true }, + { 122433, true }, + { 122446, true }, { 122458, true }, - { 122474, true }, - { 122487, true }, - { 122501, true }, - { 122518, true }, - { 122537, true }, - { 122552, false }, - { 122566, true }, - { 122580, true }, - { 122593, true }, - { 122614, true }, - { 122626, true }, - { 122639, true }, - { 122649, true }, - { 122669, true }, - { 122682, true }, - { 122694, true }, - { 122712, true }, - { 122731, true }, - { 122749, true }, - { 122763, true }, - { 122777, true }, - { 122800, true }, - { 122814, true }, - { 122824, true }, - { 122839, true }, - { 122855, true }, - { 122879, true }, - { 122895, true }, - { 122905, true }, - { 122919, true }, - { 122931, true }, - { 122943, true }, - { 122961, true }, - { 122979, true }, - { 122994, true }, - { 123017, true }, - { 123034, true }, - { 123053, true }, + { 122476, true }, + { 122495, true }, + { 122513, true }, + { 122527, true }, + { 122539, true }, + { 122553, true }, + { 122576, true }, + { 122590, true }, + { 122600, true }, + { 122615, true }, + { 122631, true }, + { 122655, true }, + { 122671, true }, + { 122681, true }, + { 122695, true }, + { 122707, true }, + { 122719, true }, + { 122737, true }, + { 122755, true }, + { 122770, true }, + { 122793, true }, + { 122810, true }, + { 122829, true }, + { 122849, true }, + { 122872, true }, + { 122891, true }, + { 122910, true }, + { 122929, true }, + { 122940, true }, + { 122950, true }, + { 122965, true }, + { 122986, true }, + { 123006, true }, + { 123025, true }, + { 123039, true }, + { 123051, true }, + { 123061, true }, { 123073, true }, - { 123096, true }, - { 123115, true }, - { 123134, true }, - { 123153, true }, - { 123172, true }, - { 123183, true }, - { 123193, true }, - { 123208, true }, - { 123229, true }, - { 123249, true }, - { 123268, true }, - { 123282, true }, - { 123294, true }, - { 123304, true }, - { 123316, true }, - { 123334, true }, + { 123091, true }, + { 123107, true }, + { 123128, true }, + { 123138, false }, + { 123150, true }, + { 123167, true }, + { 123185, true }, + { 123205, true }, + { 123220, true }, + { 123231, true }, + { 123243, true }, + { 123255, false }, + { 123272, true }, + { 123285, true }, + { 123303, true }, + { 123318, true }, + { 123330, true }, { 123350, true }, - { 123371, true }, - { 123381, false }, - { 123393, true }, - { 123410, true }, - { 123428, true }, - { 123448, true }, - { 123463, true }, - { 123474, true }, - { 123486, true }, - { 123498, false }, - { 123515, true }, - { 123528, true }, - { 123546, true }, - { 123561, true }, - { 123573, true }, - { 123593, true }, - { 123605, true }, - { 123619, true }, - { 123637, true }, - { 123650, true }, - { 123666, true }, - { 123681, true }, - { 123693, true }, - { 123709, true }, - { 123719, true }, - { 123734, true }, - { 123754, true }, - { 123767, true }, - { 123778, true }, - { 123791, true }, - { 123800, true }, - { 123820, true }, - { 123840, true }, - { 123863, true }, - { 123883, true }, - { 123895, true }, - { 123906, true }, - { 123917, false }, - { 123928, true }, - { 123939, false }, - { 123949, false }, - { 123966, true }, - { 123978, true }, - { 123994, true }, - { 124007, true }, - { 124016, true }, - { 124030, true }, - { 124041, true }, + { 123362, true }, + { 123376, true }, + { 123394, true }, + { 123407, true }, + { 123423, true }, + { 123438, true }, + { 123450, true }, + { 123466, true }, + { 123476, true }, + { 123491, true }, + { 123511, true }, + { 123524, true }, + { 123535, true }, + { 123548, true }, + { 123557, true }, + { 123577, true }, + { 123597, true }, + { 123620, true }, + { 123640, true }, + { 123652, true }, + { 123663, true }, + { 123674, false }, + { 123685, true }, + { 123696, false }, + { 123706, false }, + { 123723, true }, + { 123735, true }, + { 123751, true }, + { 123764, true }, + { 123773, true }, + { 123787, true }, + { 123798, true }, + { 123816, true }, + { 123830, true }, + { 123843, true }, + { 123852, true }, + { 123867, true }, + { 123878, true }, + { 123888, true }, + { 123908, true }, + { 123918, true }, + { 123929, true }, + { 123962, true }, + { 123974, true }, + { 123993, true }, + { 124004, true }, + { 124011, true }, + { 124025, true }, + { 124039, false }, { 124059, true }, - { 124073, true }, - { 124086, true }, - { 124095, true }, - { 124110, true }, - { 124121, true }, - { 124131, true }, + { 124076, true }, + { 124087, true }, + { 124100, true }, + { 124118, true }, + { 124134, true }, { 124151, true }, - { 124161, true }, - { 124172, true }, - { 124205, true }, + { 124165, true }, + { 124181, true }, + { 124194, true }, + { 124206, true }, { 124217, true }, - { 124236, true }, - { 124247, true }, - { 124254, true }, - { 124268, true }, - { 124282, false }, - { 124302, true }, - { 124319, true }, - { 124330, true }, - { 124343, true }, - { 124361, true }, - { 124377, true }, - { 124394, true }, - { 124408, true }, - { 124424, true }, - { 124437, true }, - { 124449, true }, - { 124460, true }, - { 124477, true }, - { 124486, true }, - { 124495, true }, - { 124508, true }, - { 124539, true }, - { 124552, true }, - { 124565, true }, - { 124576, true }, - { 124585, true }, - { 124609, true }, - { 124624, true }, - { 124636, true }, - { 124652, true }, - { 124669, true }, - { 124683, true }, - { 124695, true }, + { 124234, true }, + { 124243, true }, + { 124252, true }, + { 124265, true }, + { 124296, true }, + { 124309, true }, + { 124322, true }, + { 124333, true }, + { 124342, true }, + { 124366, true }, + { 124381, true }, + { 124393, true }, + { 124409, true }, + { 124426, true }, + { 124440, true }, + { 124452, true }, + { 124463, true }, + { 124480, true }, + { 124491, true }, + { 124509, false }, + { 124521, true }, + { 124557, true }, + { 124570, true }, + { 124584, true }, + { 124593, true }, + { 124603, true }, + { 124615, true }, + { 124633, true }, + { 124647, true }, + { 124665, true }, + { 124686, true }, { 124706, true }, - { 124723, true }, - { 124734, true }, - { 124752, false }, - { 124764, true }, - { 124800, true }, - { 124813, true }, - { 124827, true }, - { 124836, true }, - { 124846, true }, - { 124858, true }, - { 124876, true }, - { 124890, true }, - { 124908, true }, - { 124929, true }, - { 124949, true }, - { 124972, true }, - { 124988, true }, - { 125002, true }, - { 125018, true }, - { 125032, true }, - { 125045, true }, - { 125066, true }, - { 125086, true }, - { 125095, true }, - { 125112, true }, - { 125123, true }, - { 125134, true }, - { 125153, true }, - { 125165, true }, - { 125178, true }, - { 125194, true }, - { 125213, true }, - { 125228, false }, - { 125243, true }, - { 125263, true }, - { 125274, true }, - { 125285, true }, - { 125305, true }, - { 125314, true }, - { 125325, true }, - { 125337, true }, - { 125351, true }, - { 125369, true }, - { 125381, true }, - { 125404, true }, - { 125419, true }, - { 125432, true }, - { 125449, true }, - { 125459, true }, - { 125480, true }, - { 125508, false }, - { 125519, true }, - { 125526, true }, - { 125537, true }, - { 125547, true }, - { 125561, true }, + { 124729, true }, + { 124745, true }, + { 124759, true }, + { 124775, true }, + { 124789, true }, + { 124802, true }, + { 124823, true }, + { 124843, true }, + { 124852, true }, + { 124869, true }, + { 124880, true }, + { 124891, true }, + { 124910, true }, + { 124922, true }, + { 124935, true }, + { 124951, true }, + { 124970, true }, + { 124985, false }, + { 125000, true }, + { 125020, true }, + { 125031, true }, + { 125042, true }, + { 125062, true }, + { 125071, true }, + { 125082, true }, + { 125094, true }, + { 125108, true }, + { 125126, true }, + { 125138, true }, + { 125161, true }, + { 125176, true }, + { 125189, true }, + { 125206, true }, + { 125216, true }, + { 125237, true }, + { 125265, false }, + { 125276, true }, + { 125283, true }, + { 125294, true }, + { 125304, true }, + { 125318, true }, + { 125332, true }, + { 125343, false }, + { 125354, true }, + { 125362, false }, + { 125382, true }, + { 125397, true }, + { 125410, true }, + { 125426, true }, + { 125441, true }, + { 125454, true }, + { 125467, true }, + { 125483, true }, + { 125503, true }, + { 125516, true }, + { 125535, true }, + { 125553, true }, + { 125567, true }, { 125575, true }, - { 125586, false }, - { 125597, true }, - { 125605, false }, - { 125625, true }, - { 125640, true }, - { 125653, true }, - { 125669, true }, - { 125684, true }, - { 125697, true }, - { 125710, true }, - { 125726, true }, - { 125746, true }, - { 125759, true }, - { 125778, true }, - { 125796, true }, + { 125595, true }, + { 125627, true }, + { 125642, true }, + { 125661, true }, + { 125676, true }, + { 125691, true }, + { 125712, true }, + { 125733, true }, + { 125747, true }, + { 125769, true }, + { 125785, true }, + { 125797, true }, { 125810, true }, - { 125818, true }, + { 125821, true }, { 125838, true }, - { 125870, true }, - { 125885, true }, - { 125904, true }, - { 125919, true }, - { 125934, true }, - { 125955, true }, - { 125976, true }, - { 125990, true }, - { 126012, true }, - { 126028, true }, - { 126040, true }, - { 126053, true }, + { 125862, true }, + { 125884, true }, + { 125898, true }, + { 125910, true }, + { 125923, true }, + { 125941, true }, + { 125961, true }, + { 125986, true }, + { 125999, true }, + { 126013, true }, + { 126027, true }, + { 126044, true }, { 126064, true }, - { 126081, true }, - { 126105, true }, - { 126127, true }, + { 126080, true }, + { 126098, true }, + { 126113, true }, + { 126128, true }, { 126141, true }, - { 126153, true }, - { 126166, true }, - { 126184, true }, - { 126204, true }, - { 126229, true }, - { 126242, true }, - { 126256, true }, - { 126270, true }, + { 126156, true }, + { 126164, false }, + { 126177, true }, + { 126189, true }, + { 126203, true }, + { 126225, true }, + { 126239, true }, + { 126253, true }, + { 126261, true }, + { 126277, true }, { 126287, true }, - { 126307, true }, - { 126323, true }, - { 126341, true }, + { 126300, true }, + { 126313, true }, + { 126327, true }, + { 126343, true }, { 126356, true }, - { 126371, true }, - { 126384, true }, - { 126399, true }, - { 126407, false }, - { 126420, true }, - { 126432, true }, - { 126446, true }, - { 126468, true }, - { 126482, true }, - { 126496, true }, - { 126504, true }, - { 126520, true }, - { 126530, true }, - { 126543, true }, - { 126556, true }, - { 126570, true }, - { 126586, true }, - { 126599, true }, - { 126613, true }, - { 126624, true }, + { 126370, true }, + { 126381, true }, + { 126391, true }, + { 126411, true }, + { 126425, true }, + { 126440, true }, + { 126452, true }, + { 126466, true }, + { 126474, true }, + { 126486, true }, + { 126497, true }, + { 126518, true }, + { 126537, true }, + { 126555, true }, + { 126575, true }, + { 126587, true }, + { 126605, true }, + { 126621, true }, { 126634, true }, { 126654, true }, { 126668, true }, - { 126683, true }, - { 126695, true }, - { 126709, true }, - { 126717, true }, - { 126729, true }, - { 126740, true }, - { 126761, true }, - { 126780, true }, - { 126798, true }, - { 126818, true }, - { 126830, true }, - { 126848, true }, - { 126864, true }, - { 126877, true }, - { 126897, true }, - { 126911, true }, - { 126930, true }, - { 126943, true }, - { 126955, true }, - { 126967, true }, - { 126978, true }, - { 126992, true }, - { 127006, false }, - { 127021, true }, - { 127038, true }, - { 127049, true }, - { 127060, true }, - { 127074, true }, - { 127095, true }, - { 127114, true }, - { 127130, true }, - { 127148, true }, - { 127171, true }, - { 127183, true }, - { 127196, true }, - { 127214, true }, - { 127229, true }, - { 127247, true }, - { 127262, true }, - { 127278, true }, - { 127293, true }, - { 127308, true }, - { 127323, true }, - { 127339, true }, - { 127354, true }, - { 127369, true }, - { 127384, true }, - { 127394, true }, - { 127407, true }, + { 126687, true }, + { 126700, true }, + { 126712, true }, + { 126724, true }, + { 126735, true }, + { 126749, true }, + { 126763, false }, + { 126778, true }, + { 126795, true }, + { 126806, true }, + { 126817, true }, + { 126831, true }, + { 126852, true }, + { 126871, true }, + { 126887, true }, + { 126905, true }, + { 126928, true }, + { 126940, true }, + { 126953, true }, + { 126971, true }, + { 126986, true }, + { 127004, true }, + { 127019, true }, + { 127035, true }, + { 127050, true }, + { 127065, true }, + { 127080, true }, + { 127096, true }, + { 127111, true }, + { 127126, true }, + { 127141, true }, + { 127151, true }, + { 127164, true }, + { 127174, true }, + { 127186, false }, + { 127197, true }, + { 127211, true }, + { 127220, false }, + { 127239, true }, + { 127256, true }, + { 127269, true }, + { 127285, true }, + { 127295, false }, + { 127308, false }, + { 127318, true }, + { 127331, true }, + { 127341, false }, + { 127350, false }, + { 127358, false }, + { 127378, true }, + { 127392, true }, + { 127405, true }, { 127417, true }, - { 127429, false }, - { 127440, true }, - { 127454, true }, - { 127463, false }, - { 127482, true }, - { 127499, true }, - { 127512, true }, - { 127528, true }, - { 127538, false }, - { 127551, false }, + { 127435, false }, + { 127447, true }, + { 127464, true }, + { 127478, true }, + { 127495, true }, + { 127511, true }, + { 127530, false }, + { 127547, true }, { 127561, true }, - { 127574, true }, - { 127584, false }, - { 127593, false }, - { 127601, false }, - { 127621, true }, - { 127635, true }, + { 127575, true }, + { 127589, true }, + { 127605, false }, + { 127619, true }, + { 127634, true }, { 127648, true }, - { 127660, true }, - { 127678, false }, - { 127690, true }, - { 127707, true }, - { 127721, true }, - { 127738, true }, - { 127754, true }, - { 127773, false }, - { 127790, true }, - { 127804, true }, - { 127818, true }, - { 127832, true }, - { 127848, false }, + { 127667, true }, + { 127689, true }, + { 127704, true }, + { 127717, true }, + { 127727, true }, + { 127735, true }, + { 127747, true }, + { 127760, true }, + { 127773, true }, + { 127783, true }, + { 127796, false }, + { 127805, true }, + { 127816, false }, + { 127827, true }, + { 127842, true }, + { 127853, true }, { 127862, true }, - { 127877, true }, - { 127891, true }, - { 127910, true }, - { 127932, true }, - { 127947, true }, - { 127960, true }, - { 127970, true }, - { 127978, true }, + { 127871, false }, + { 127885, true }, + { 127903, true }, + { 127921, true }, + { 127938, true }, + { 127950, false }, + { 127966, false }, { 127990, true }, - { 128003, true }, - { 128016, true }, - { 128026, true }, - { 128039, false }, + { 128017, true }, + { 128036, true }, { 128048, true }, - { 128059, false }, - { 128070, true }, + { 128060, true }, { 128085, true }, - { 128096, true }, - { 128105, true }, - { 128114, false }, - { 128128, true }, + { 128102, true }, + { 128119, true }, + { 128134, true }, { 128146, true }, - { 128164, true }, - { 128181, true }, - { 128193, false }, - { 128209, false }, - { 128233, true }, - { 128260, true }, - { 128279, true }, - { 128287, true }, - { 128296, true }, - { 128308, true }, - { 128320, true }, - { 128345, true }, - { 128362, true }, - { 128379, true }, - { 128394, true }, - { 128406, true }, - { 128419, true }, - { 128437, true }, - { 128446, false }, + { 128159, true }, + { 128177, true }, + { 128186, false }, + { 128194, true }, + { 128215, true }, + { 128229, true }, + { 128251, true }, + { 128264, true }, + { 128277, true }, + { 128289, true }, + { 128302, true }, + { 128318, true }, + { 128332, true }, + { 128353, true }, + { 128365, true }, + { 128386, true }, + { 128405, true }, + { 128418, true }, + { 128430, true }, + { 128442, true }, { 128454, true }, - { 128475, true }, - { 128489, true }, - { 128511, true }, - { 128524, true }, - { 128537, true }, - { 128549, true }, - { 128562, true }, - { 128578, true }, - { 128592, true }, - { 128613, true }, - { 128625, true }, - { 128646, true }, - { 128665, true }, - { 128678, true }, - { 128690, true }, - { 128702, true }, - { 128714, true }, - { 128732, true }, - { 128744, false }, - { 128753, true }, - { 128768, true }, - { 128790, true }, - { 128804, true }, - { 128818, true }, - { 128831, true }, - { 128853, true }, - { 128868, true }, - { 128883, true }, - { 128894, true }, - { 128919, true }, - { 128936, true }, - { 128948, true }, - { 128964, false }, - { 128979, false }, - { 129003, true }, - { 129011, true }, - { 129021, true }, - { 129033, true }, - { 129046, true }, - { 129059, true }, - { 129071, true }, - { 129087, true }, - { 129102, true }, - { 129121, true }, + { 128472, true }, + { 128484, false }, + { 128493, true }, + { 128508, true }, + { 128530, true }, + { 128544, true }, + { 128558, true }, + { 128571, true }, + { 128593, true }, + { 128608, true }, + { 128623, true }, + { 128634, true }, + { 128659, true }, + { 128676, true }, + { 128688, true }, + { 128704, false }, + { 128719, false }, + { 128743, true }, + { 128751, true }, + { 128761, true }, + { 128773, true }, + { 128786, true }, + { 128799, true }, + { 128811, true }, + { 128827, true }, + { 128842, true }, + { 128861, true }, + { 128875, true }, + { 128889, true }, + { 128909, true }, + { 128925, true }, + { 128944, true }, + { 128964, true }, + { 128976, true }, + { 128988, true }, + { 129018, true }, + { 129030, true }, + { 129041, true }, + { 129051, true }, + { 129065, true }, + { 129078, true }, + { 129096, false }, + { 129106, true }, + { 129120, true }, { 129135, true }, - { 129149, true }, - { 129169, true }, - { 129185, true }, - { 129204, true }, - { 129224, true }, - { 129236, true }, - { 129248, true }, - { 129278, true }, - { 129290, true }, - { 129301, true }, - { 129311, true }, - { 129325, true }, - { 129338, true }, - { 129356, false }, - { 129366, true }, - { 129380, true }, - { 129395, true }, - { 129404, true }, - { 129417, true }, - { 129433, true }, - { 129444, true }, - { 129455, true }, - { 129465, true }, - { 129474, true }, - { 129488, true }, - { 129509, true }, - { 129520, true }, + { 129144, true }, + { 129157, false }, + { 129174, true }, + { 129190, true }, + { 129201, true }, + { 129212, true }, + { 129222, true }, + { 129231, true }, + { 129245, true }, + { 129266, true }, + { 129277, true }, + { 129292, true }, + { 129314, true }, + { 129331, true }, + { 129341, true }, + { 129363, true }, + { 129385, true }, + { 129402, true }, + { 129416, true }, + { 129429, true }, + { 129446, true }, + { 129471, true }, + { 129487, true }, + { 129497, true }, + { 129508, true }, + { 129517, false }, + { 129526, true }, { 129535, true }, - { 129557, true }, - { 129574, true }, - { 129584, true }, - { 129606, true }, - { 129628, true }, + { 129545, true }, + { 129559, true }, + { 129577, true }, + { 129586, true }, + { 129607, true }, + { 129627, true }, { 129645, true }, - { 129659, true }, - { 129672, true }, - { 129689, true }, - { 129714, true }, - { 129730, true }, - { 129740, true }, - { 129751, true }, - { 129760, false }, - { 129769, true }, + { 129662, true }, + { 129683, true }, + { 129701, true }, + { 129713, true }, + { 129735, false }, + { 129754, true }, + { 129765, true }, { 129778, true }, - { 129788, true }, - { 129802, true }, - { 129820, true }, - { 129829, true }, - { 129850, true }, - { 129870, true }, - { 129888, true }, - { 129905, true }, - { 129926, true }, - { 129944, true }, - { 129956, true }, - { 129978, false }, - { 129997, true }, - { 130008, true }, - { 130021, true }, - { 130042, true }, - { 130053, true }, - { 130068, true }, - { 130085, true }, - { 130111, true }, - { 130128, false }, - { 130146, true }, - { 130165, false }, - { 130184, true }, - { 130204, true }, - { 130226, true }, - { 130248, true }, - { 130261, true }, - { 130284, true }, + { 129799, true }, + { 129810, true }, + { 129825, true }, + { 129842, true }, + { 129868, true }, + { 129885, false }, + { 129903, true }, + { 129922, false }, + { 129941, true }, + { 129961, true }, + { 129983, true }, + { 130005, true }, + { 130018, true }, + { 130041, true }, + { 130055, true }, + { 130078, true }, + { 130088, true }, + { 130098, true }, + { 130117, true }, + { 130130, true }, + { 130145, false }, + { 130157, true }, + { 130177, true }, + { 130187, true }, + { 130206, true }, + { 130218, true }, + { 130239, true }, + { 130265, true }, + { 130286, true }, { 130298, true }, - { 130321, true }, - { 130331, true }, - { 130341, true }, - { 130360, true }, - { 130373, true }, - { 130388, false }, - { 130400, true }, - { 130420, true }, - { 130430, true }, - { 130449, true }, - { 130461, true }, - { 130482, true }, - { 130508, true }, - { 130529, true }, - { 130541, true }, - { 130555, true }, - { 130567, true }, - { 130579, true }, - { 130602, true }, - { 130618, true }, - { 130630, true }, - { 130655, true }, - { 130670, true }, - { 130691, true }, + { 130312, true }, + { 130324, true }, + { 130336, true }, + { 130359, true }, + { 130375, true }, + { 130387, true }, + { 130412, true }, + { 130427, true }, + { 130448, true }, + { 130465, true }, + { 130486, false }, + { 130503, true }, + { 130521, true }, + { 130531, true }, + { 130545, true }, + { 130559, true }, + { 130569, true }, + { 130581, true }, + { 130593, true }, + { 130607, true }, + { 130619, true }, + { 130648, true }, + { 130663, true }, + { 130677, true }, + { 130693, true }, { 130708, true }, - { 130729, false }, - { 130746, true }, - { 130764, true }, - { 130774, true }, - { 130788, true }, - { 130802, true }, - { 130812, true }, - { 130824, true }, + { 130720, true }, + { 130740, true }, + { 130754, true }, + { 130767, true }, + { 130779, true }, + { 130792, true }, + { 130805, true }, + { 130817, true }, { 130836, true }, - { 130850, true }, { 130862, true }, - { 130891, true }, - { 130906, true }, - { 130920, true }, - { 130936, true }, - { 130951, true }, - { 130963, true }, - { 130983, true }, - { 130997, true }, - { 131010, true }, + { 130886, true }, + { 130909, true }, + { 130921, true }, + { 130937, true }, + { 130957, true }, + { 130975, true }, + { 130995, true }, + { 131009, true }, { 131022, true }, - { 131035, true }, - { 131048, true }, - { 131060, true }, - { 131079, true }, - { 131105, true }, - { 131129, true }, - { 131152, true }, - { 131164, true }, - { 131180, true }, - { 131200, true }, + { 131042, true }, + { 131050, true }, + { 131069, true }, + { 131088, true }, + { 131102, true }, + { 131120, true }, + { 131136, false }, + { 131155, true }, + { 131176, true }, + { 131195, true }, + { 131209, true }, { 131218, true }, - { 131238, true }, - { 131252, true }, - { 131265, true }, - { 131285, true }, - { 131293, true }, - { 131312, true }, - { 131331, true }, - { 131345, true }, - { 131363, true }, - { 131379, false }, - { 131398, true }, + { 131236, true }, + { 131253, true }, + { 131269, true }, + { 131291, true }, + { 131308, true }, + { 131326, true }, + { 131343, true }, + { 131356, true }, + { 131366, true }, + { 131374, true }, + { 131402, true }, { 131419, true }, - { 131438, true }, - { 131452, true }, + { 131433, true }, + { 131448, true }, { 131461, true }, - { 131479, true }, + { 131473, true }, + { 131483, true }, { 131496, true }, - { 131512, true }, - { 131534, true }, - { 131551, true }, - { 131569, true }, - { 131586, true }, - { 131599, true }, - { 131609, true }, - { 131617, true }, - { 131645, true }, - { 131662, true }, - { 131676, true }, - { 131691, true }, - { 131704, true }, - { 131716, true }, - { 131726, true }, - { 131739, true }, - { 131754, true }, - { 131766, true }, - { 131778, true }, - { 131790, true }, - { 131802, true }, - { 131815, true }, - { 131828, true }, - { 131840, true }, + { 131511, true }, + { 131523, true }, + { 131535, true }, + { 131547, true }, + { 131559, true }, + { 131572, true }, + { 131585, true }, + { 131597, true }, + { 131613, true }, + { 131625, true }, + { 131638, true }, + { 131648, true }, + { 131658, true }, + { 131673, true }, + { 131684, true }, + { 131695, true }, + { 131713, true }, + { 131721, true }, + { 131729, true }, + { 131741, true }, + { 131755, true }, + { 131772, true }, + { 131787, true }, + { 131803, true }, + { 131818, true }, + { 131833, true }, + { 131848, true }, { 131856, true }, - { 131868, true }, - { 131881, true }, - { 131891, true }, - { 131901, true }, - { 131916, true }, - { 131927, true }, - { 131938, true }, + { 131871, true }, + { 131884, true }, + { 131892, true }, + { 131902, true }, + { 131923, true }, + { 131936, true }, + { 131948, true }, { 131956, true }, - { 131964, true }, - { 131972, true }, - { 131984, true }, - { 131998, true }, - { 132015, true }, - { 132030, true }, - { 132046, true }, - { 132061, true }, - { 132076, true }, - { 132091, true }, - { 132099, true }, + { 131973, true }, + { 131989, true }, + { 131997, false }, + { 132021, true }, + { 132053, true }, + { 132073, true }, + { 132097, true }, { 132114, true }, - { 132127, true }, - { 132135, true }, - { 132145, true }, - { 132166, true }, - { 132179, true }, - { 132191, true }, - { 132199, true }, - { 132216, true }, - { 132232, true }, - { 132240, false }, - { 132264, true }, - { 132296, true }, - { 132316, true }, - { 132340, true }, - { 132357, true }, - { 132372, true }, - { 132383, true }, - { 132394, true }, + { 132129, true }, + { 132140, true }, + { 132151, true }, + { 132161, true }, + { 132173, true }, + { 132181, true }, + { 132193, false }, + { 132205, false }, + { 132213, false }, + { 132238, true }, + { 132251, true }, + { 132266, true }, + { 132280, true }, + { 132293, true }, + { 132305, true }, + { 132318, true }, + { 132335, true }, + { 132349, true }, + { 132363, true }, + { 132378, true }, + { 132393, true }, { 132404, true }, - { 132416, true }, - { 132424, true }, - { 132436, false }, - { 132448, false }, - { 132456, false }, - { 132481, true }, - { 132494, true }, - { 132509, true }, - { 132523, true }, - { 132536, true }, - { 132548, true }, - { 132561, true }, - { 132578, true }, - { 132592, true }, - { 132606, true }, + { 132411, true }, + { 132425, true }, + { 132433, true }, + { 132441, false }, + { 132456, true }, + { 132468, true }, + { 132482, true }, + { 132490, true }, + { 132501, true }, + { 132511, true }, + { 132521, true }, + { 132528, true }, + { 132541, true }, + { 132550, true }, + { 132558, true }, + { 132566, true }, + { 132575, true }, + { 132591, true }, + { 132602, false }, + { 132613, true }, { 132621, true }, - { 132636, true }, - { 132647, true }, - { 132654, true }, - { 132668, true }, - { 132676, true }, - { 132684, false }, - { 132699, true }, - { 132711, true }, - { 132725, true }, - { 132733, true }, - { 132744, true }, - { 132754, true }, - { 132764, true }, - { 132771, true }, - { 132784, true }, - { 132793, true }, - { 132801, true }, - { 132809, true }, - { 132818, true }, - { 132834, true }, - { 132845, false }, - { 132856, true }, - { 132864, true }, - { 132885, true }, - { 132910, true }, - { 132926, true }, - { 132938, true }, - { 132950, true }, - { 132963, true }, - { 132971, false }, - { 132991, true }, - { 133010, true }, - { 133024, true }, - { 133043, true }, - { 133063, true }, - { 133083, true }, - { 133103, true }, - { 133122, true }, - { 133141, true }, - { 133152, true }, - { 133162, true }, - { 133171, true }, - { 133184, true }, - { 133194, true }, - { 133207, true }, - { 133219, false }, - { 133230, true }, - { 133238, true }, - { 133251, true }, - { 133261, true }, - { 133270, true }, - { 133290, true }, - { 133313, true }, - { 133332, false }, + { 132642, true }, + { 132667, true }, + { 132683, true }, + { 132695, true }, + { 132707, true }, + { 132720, true }, + { 132728, false }, + { 132748, true }, + { 132767, true }, + { 132781, true }, + { 132800, true }, + { 132820, true }, + { 132840, true }, + { 132860, true }, + { 132879, true }, + { 132898, true }, + { 132909, true }, + { 132919, true }, + { 132928, true }, + { 132941, true }, + { 132951, true }, + { 132964, true }, + { 132976, false }, + { 132987, true }, + { 132998, true }, + { 133006, true }, + { 133019, true }, + { 133029, true }, + { 133038, true }, + { 133058, true }, + { 133081, true }, + { 133100, false }, + { 133111, true }, + { 133133, true }, + { 133142, true }, + { 133149, true }, + { 133156, true }, + { 133168, true }, + { 133185, true }, + { 133192, true }, + { 133200, true }, + { 133211, true }, + { 133225, true }, + { 133237, true }, + { 133249, true }, + { 133258, true }, + { 133270, false }, + { 133281, true }, + { 133294, true }, + { 133320, true }, { 133343, true }, - { 133365, true }, - { 133374, true }, - { 133381, true }, - { 133388, true }, - { 133400, true }, - { 133417, true }, - { 133424, true }, - { 133432, true }, - { 133443, true }, - { 133457, true }, - { 133469, true }, - { 133481, true }, - { 133490, true }, - { 133499, true }, - { 133511, false }, - { 133522, true }, - { 133535, true }, - { 133561, true }, - { 133584, true }, - { 133604, true }, - { 133621, true }, - { 133636, true }, + { 133363, true }, + { 133380, true }, + { 133395, true }, + { 133413, true }, + { 133427, true }, + { 133445, true }, + { 133464, true }, + { 133475, true }, + { 133493, true }, + { 133508, true }, + { 133528, true }, + { 133537, true }, + { 133557, true }, + { 133572, true }, + { 133587, true }, + { 133602, true }, + { 133616, true }, + { 133630, true }, + { 133639, true }, { 133654, true }, - { 133668, true }, - { 133686, true }, - { 133705, true }, - { 133716, true }, + { 133662, true }, + { 133675, true }, + { 133693, true }, + { 133704, true }, + { 133714, true }, + { 133723, true }, { 133734, true }, - { 133749, true }, - { 133769, true }, + { 133744, true }, + { 133754, true }, + { 133767, true }, { 133778, true }, - { 133798, true }, - { 133813, true }, - { 133828, true }, - { 133843, true }, + { 133788, true }, + { 133795, true }, + { 133806, true }, + { 133817, true }, + { 133831, true }, + { 133838, true }, + { 133849, true }, { 133857, true }, - { 133871, true }, - { 133880, true }, - { 133895, true }, - { 133903, true }, - { 133916, true }, - { 133934, true }, - { 133945, true }, - { 133955, true }, - { 133964, true }, - { 133975, true }, - { 133985, true }, - { 133995, true }, - { 134008, true }, - { 134019, true }, - { 134029, true }, - { 134036, true }, - { 134047, true }, - { 134058, true }, - { 134072, true }, - { 134079, true }, - { 134090, true }, - { 134098, true }, - { 134116, true }, - { 134129, true }, - { 134141, true }, - { 134149, true }, - { 134169, false }, - { 134185, true }, - { 134204, true }, - { 134227, true }, - { 134246, true }, - { 134257, true }, - { 134279, true }, - { 134292, true }, - { 134301, true }, - { 134324, true }, - { 134340, true }, - { 134356, true }, + { 133875, true }, + { 133888, true }, + { 133900, true }, + { 133908, true }, + { 133928, false }, + { 133944, true }, + { 133963, true }, + { 133986, true }, + { 134005, true }, + { 134016, true }, + { 134038, true }, + { 134051, true }, + { 134060, true }, + { 134083, true }, + { 134099, true }, + { 134115, true }, + { 134137, true }, + { 134164, true }, + { 134178, true }, + { 134188, true }, + { 134198, true }, + { 134217, true }, + { 134231, true }, + { 134245, true }, + { 134261, true }, + { 134272, true }, + { 134287, true }, + { 134310, true }, + { 134333, true }, + { 134351, true }, + { 134368, true }, { 134378, true }, - { 134405, true }, - { 134419, true }, - { 134429, true }, - { 134439, true }, - { 134458, true }, - { 134472, true }, - { 134486, true }, - { 134502, true }, - { 134513, true }, - { 134528, true }, - { 134551, true }, - { 134574, true }, - { 134592, true }, - { 134609, true }, - { 134619, true }, - { 134644, true }, - { 134662, true }, - { 134672, true }, - { 134684, true }, - { 134697, true }, - { 134708, true }, - { 134725, true }, + { 134403, true }, + { 134421, true }, + { 134431, true }, + { 134443, true }, + { 134456, true }, + { 134467, true }, + { 134484, true }, + { 134494, true }, + { 134509, true }, + { 134525, true }, + { 134546, true }, + { 134568, true }, + { 134586, true }, + { 134597, true }, + { 134611, true }, + { 134624, true }, + { 134635, true }, + { 134648, true }, + { 134659, true }, + { 134669, true }, + { 134683, true }, + { 134693, true }, + { 134704, true }, + { 134717, true }, { 134735, true }, - { 134750, true }, - { 134766, true }, - { 134787, true }, - { 134809, true }, - { 134827, true }, - { 134838, true }, - { 134852, true }, - { 134865, true }, - { 134876, true }, - { 134889, true }, - { 134900, true }, - { 134910, true }, - { 134924, true }, - { 134934, true }, - { 134945, true }, - { 134958, true }, - { 134976, true }, - { 134985, true }, + { 134744, true }, + { 134759, true }, + { 134775, false }, + { 134788, false }, + { 134801, false }, + { 134813, true }, + { 134824, true }, + { 134839, true }, + { 134851, true }, + { 134868, true }, + { 134882, true }, + { 134895, true }, + { 134904, true }, + { 134915, true }, + { 134926, true }, + { 134938, true }, + { 134951, true }, + { 134964, true }, + { 134973, true }, + { 134984, true }, { 135000, true }, - { 135016, false }, - { 135029, false }, - { 135042, false }, - { 135054, true }, - { 135065, true }, + { 135012, true }, + { 135024, true }, + { 135041, true }, + { 135053, true }, + { 135067, true }, { 135080, true }, - { 135092, true }, - { 135109, true }, - { 135123, true }, - { 135136, true }, - { 135145, true }, - { 135156, true }, + { 135097, true }, + { 135111, true }, + { 135126, true }, + { 135142, true }, + { 135158, true }, { 135167, true }, - { 135179, true }, - { 135192, true }, - { 135205, true }, - { 135214, true }, - { 135225, true }, - { 135241, true }, - { 135253, true }, - { 135265, true }, - { 135282, true }, - { 135294, true }, - { 135308, true }, - { 135321, true }, - { 135338, true }, - { 135352, true }, - { 135367, true }, - { 135383, true }, - { 135399, true }, - { 135408, true }, - { 135415, true }, - { 135431, true }, - { 135442, true }, - { 135459, true }, - { 135472, true }, - { 135487, true }, - { 135497, true }, - { 135508, true }, - { 135531, true }, - { 135543, false }, - { 135557, true }, - { 135568, true }, - { 135584, false }, - { 135603, true }, - { 135622, true }, - { 135633, true }, - { 135654, true }, - { 135670, true }, - { 135684, true }, - { 135698, true }, - { 135709, true }, - { 135730, true }, - { 135743, true }, - { 135753, true }, - { 135764, true }, + { 135174, true }, + { 135190, true }, + { 135201, true }, + { 135218, true }, + { 135231, true }, + { 135246, true }, + { 135256, true }, + { 135267, true }, + { 135290, true }, + { 135302, false }, + { 135316, true }, + { 135327, true }, + { 135343, false }, + { 135362, true }, + { 135381, true }, + { 135392, true }, + { 135413, true }, + { 135429, true }, + { 135443, true }, + { 135457, true }, + { 135468, true }, + { 135489, true }, + { 135502, true }, + { 135512, true }, + { 135523, true }, + { 135540, true }, + { 135560, true }, + { 135575, true }, + { 135594, false }, + { 135611, true }, + { 135634, true }, + { 135649, true }, + { 135665, true }, + { 135676, true }, + { 135686, true }, + { 135694, true }, + { 135717, true }, + { 135729, true }, + { 135737, true }, + { 135763, true }, { 135781, true }, - { 135801, true }, - { 135816, true }, - { 135835, false }, - { 135852, true }, - { 135875, true }, - { 135890, true }, - { 135906, true }, - { 135917, true }, - { 135927, true }, - { 135935, true }, - { 135958, true }, + { 135794, true }, + { 135802, true }, + { 135814, true }, + { 135841, true }, + { 135872, true }, + { 135888, true }, + { 135898, true }, + { 135913, true }, + { 135924, true }, + { 135935, false }, + { 135948, true }, + { 135957, true }, { 135970, true }, - { 135978, true }, - { 136004, true }, - { 136022, true }, - { 136035, true }, - { 136043, true }, + { 135998, true }, + { 136019, true }, + { 136033, true }, { 136055, true }, - { 136082, true }, - { 136113, true }, - { 136129, true }, - { 136139, true }, - { 136154, true }, - { 136165, true }, - { 136176, false }, - { 136189, true }, + { 136065, true }, + { 136077, true }, + { 136093, true }, + { 136107, true }, + { 136118, true }, + { 136132, true }, + { 136150, true }, + { 136167, true }, + { 136187, true }, { 136198, true }, - { 136211, true }, - { 136239, true }, - { 136260, true }, - { 136274, true }, - { 136296, true }, - { 136306, true }, - { 136318, true }, - { 136334, true }, - { 136348, true }, - { 136359, true }, - { 136373, true }, - { 136391, true }, - { 136408, true }, - { 136428, true }, - { 136439, true }, - { 136450, false }, - { 136457, true }, - { 136484, true }, - { 136504, true }, - { 136522, true }, - { 136537, false }, - { 136548, true }, - { 136564, true }, - { 136581, true }, - { 136598, true }, - { 136620, true }, - { 136634, true }, - { 136650, false }, - { 136667, true }, - { 136683, true }, - { 136693, true }, - { 136714, true }, - { 136732, true }, - { 136750, true }, + { 136209, false }, + { 136216, true }, + { 136243, true }, + { 136263, true }, + { 136281, true }, + { 136296, false }, + { 136307, true }, + { 136323, true }, + { 136340, true }, + { 136357, true }, + { 136379, true }, + { 136393, true }, + { 136409, false }, + { 136426, true }, + { 136442, true }, + { 136452, true }, + { 136473, true }, + { 136491, true }, + { 136509, true }, + { 136523, true }, + { 136534, true }, + { 136551, true }, + { 136571, true }, + { 136585, true }, + { 136602, true }, + { 136619, true }, + { 136636, true }, + { 136657, true }, + { 136673, true }, + { 136696, true }, + { 136713, true }, + { 136731, true }, + { 136738, true }, + { 136748, true }, { 136764, true }, - { 136775, true }, - { 136792, true }, - { 136812, true }, - { 136826, true }, - { 136843, true }, - { 136860, true }, - { 136877, true }, - { 136898, true }, + { 136775, false }, + { 136795, true }, + { 136808, true }, + { 136821, true }, + { 136831, true }, + { 136848, true }, + { 136868, true }, + { 136883, true }, + { 136900, true }, { 136914, true }, - { 136937, true }, - { 136954, true }, - { 136972, true }, - { 136979, true }, - { 136989, true }, - { 137005, true }, - { 137016, false }, - { 137036, true }, - { 137049, true }, - { 137062, true }, - { 137072, true }, - { 137089, true }, - { 137109, true }, - { 137124, true }, - { 137141, true }, - { 137155, true }, - { 137169, true }, - { 137190, true }, - { 137204, false }, - { 137218, true }, - { 137235, true }, - { 137252, true }, - { 137268, true }, - { 137288, true }, - { 137311, true }, - { 137320, false }, - { 137328, true }, - { 137340, false }, - { 137362, true }, + { 136928, true }, + { 136949, true }, + { 136963, false }, + { 136977, true }, + { 136994, true }, + { 137011, true }, + { 137027, true }, + { 137047, true }, + { 137070, true }, + { 137079, false }, + { 137087, true }, + { 137099, false }, + { 137121, true }, + { 137136, true }, + { 137150, true }, + { 137164, true }, + { 137177, true }, + { 137192, true }, + { 137206, true }, + { 137227, true }, + { 137237, true }, + { 137245, false }, + { 137267, true }, + { 137279, true }, + { 137304, true }, + { 137314, true }, + { 137339, true }, + { 137352, false }, { 137377, true }, - { 137391, true }, - { 137405, true }, - { 137418, true }, - { 137433, true }, - { 137447, true }, - { 137468, true }, - { 137478, true }, - { 137486, false }, - { 137508, true }, - { 137520, true }, - { 137545, true }, - { 137555, true }, - { 137580, true }, - { 137593, false }, - { 137618, true }, - { 137635, true }, - { 137652, true }, - { 137665, true }, - { 137676, true }, - { 137684, true }, - { 137693, true }, - { 137707, true }, - { 137720, true }, - { 137736, true }, - { 137752, true }, - { 137763, true }, - { 137774, true }, - { 137790, true }, - { 137800, false }, - { 137812, true }, - { 137824, true }, - { 137839, true }, - { 137857, true }, - { 137869, true }, - { 137879, true }, - { 137895, true }, - { 137919, true }, - { 137926, true }, - { 137933, true }, - { 137950, true }, - { 137964, true }, - { 137976, true }, - { 137988, true }, - { 138000, true }, - { 138014, true }, - { 138035, true }, - { 138048, true }, - { 138059, true }, - { 138076, true }, - { 138091, true }, + { 137394, true }, + { 137411, true }, + { 137424, true }, + { 137435, true }, + { 137443, true }, + { 137452, true }, + { 137466, true }, + { 137479, true }, + { 137495, true }, + { 137511, true }, + { 137522, true }, + { 137533, true }, + { 137549, true }, + { 137559, false }, + { 137571, true }, + { 137583, true }, + { 137598, true }, + { 137616, true }, + { 137628, true }, + { 137638, true }, + { 137654, true }, + { 137678, true }, + { 137685, true }, + { 137692, true }, + { 137709, true }, + { 137723, true }, + { 137735, true }, + { 137747, true }, + { 137759, true }, + { 137773, true }, + { 137794, true }, + { 137807, true }, + { 137818, true }, + { 137835, true }, + { 137850, true }, + { 137875, true }, + { 137890, true }, + { 137900, true }, + { 137911, true }, + { 137920, true }, + { 137929, true }, + { 137944, true }, + { 137954, true }, + { 137970, true }, + { 137983, true }, + { 137995, true }, + { 138012, true }, + { 138033, true }, + { 138054, true }, + { 138071, true }, + { 138089, true }, + { 138101, true }, { 138116, true }, - { 138131, true }, - { 138141, true }, - { 138152, true }, - { 138161, true }, - { 138170, true }, - { 138185, true }, - { 138195, true }, - { 138211, true }, - { 138224, true }, - { 138236, true }, - { 138253, true }, - { 138274, true }, - { 138295, true }, - { 138312, true }, - { 138330, true }, - { 138342, true }, - { 138357, true }, - { 138373, true }, - { 138387, true }, - { 138399, true }, - { 138413, true }, + { 138132, true }, + { 138146, true }, + { 138158, true }, + { 138172, true }, + { 138184, true }, + { 138203, true }, + { 138219, true }, + { 138235, true }, + { 138251, true }, + { 138269, true }, + { 138286, true }, + { 138304, true }, + { 138318, true }, + { 138336, true }, + { 138353, true }, + { 138372, true }, + { 138392, true }, + { 138409, true }, { 138425, true }, - { 138444, true }, - { 138460, true }, - { 138476, true }, - { 138492, true }, - { 138510, true }, - { 138527, true }, - { 138545, true }, - { 138559, true }, - { 138577, true }, - { 138594, true }, + { 138443, false }, + { 138456, true }, + { 138473, false }, + { 138494, true }, + { 138511, true }, + { 138526, true }, + { 138539, true }, + { 138550, true }, + { 138568, true }, + { 138580, true }, + { 138604, true }, { 138613, true }, - { 138633, true }, - { 138650, true }, - { 138666, true }, - { 138684, false }, - { 138697, true }, - { 138714, false }, - { 138735, true }, - { 138752, true }, - { 138767, true }, - { 138780, true }, - { 138791, true }, - { 138809, true }, - { 138821, true }, - { 138845, true }, - { 138854, true }, + { 138628, true }, + { 138655, true }, + { 138673, true }, + { 138682, true }, + { 138692, true }, + { 138703, true }, + { 138713, true }, + { 138726, true }, + { 138734, true }, + { 138741, true }, + { 138760, true }, + { 138775, true }, + { 138784, true }, + { 138796, true }, + { 138808, false }, + { 138828, true }, + { 138842, true }, + { 138852, true }, { 138869, true }, - { 138896, true }, - { 138914, true }, - { 138923, true }, - { 138933, true }, - { 138944, true }, - { 138954, true }, - { 138967, true }, - { 138975, true }, - { 138982, true }, - { 139001, true }, - { 139008, true }, - { 139023, true }, - { 139032, true }, - { 139044, true }, - { 139056, false }, - { 139076, true }, - { 139090, true }, - { 139100, true }, - { 139117, true }, - { 139135, true }, - { 139152, true }, - { 139174, true }, - { 139187, true }, - { 139206, true }, + { 138887, true }, + { 138904, true }, + { 138926, true }, + { 138939, true }, + { 138958, true }, + { 138970, true }, + { 138983, true }, + { 139002, true }, + { 139017, true }, + { 139033, true }, + { 139053, true }, + { 139066, true }, + { 139080, true }, + { 139092, true }, + { 139103, true }, + { 139114, true }, + { 139125, true }, + { 139136, true }, + { 139155, true }, + { 139172, true }, + { 139189, true }, + { 139201, true }, { 139218, true }, - { 139231, true }, - { 139250, true }, - { 139265, true }, - { 139281, true }, - { 139301, true }, - { 139314, true }, - { 139328, true }, - { 139340, true }, - { 139351, true }, - { 139362, true }, + { 139229, true }, + { 139253, true }, + { 139263, true }, + { 139275, true }, + { 139285, true }, + { 139316, true }, + { 139325, true }, + { 139342, true }, + { 139354, true }, { 139373, true }, - { 139384, true }, - { 139403, true }, - { 139420, true }, - { 139437, true }, - { 139449, true }, - { 139466, true }, - { 139477, true }, - { 139501, true }, - { 139511, true }, - { 139523, true }, - { 139533, true }, - { 139564, true }, + { 139389, true }, + { 139402, true }, + { 139415, true }, + { 139425, true }, + { 139439, true }, + { 139448, true }, + { 139458, true }, + { 139473, true }, + { 139483, true }, + { 139497, true }, + { 139513, true }, + { 139528, true }, + { 139538, true }, + { 139556, true }, { 139573, true }, - { 139590, true }, - { 139602, true }, - { 139621, true }, - { 139637, true }, - { 139650, true }, - { 139663, true }, - { 139673, true }, + { 139589, true }, + { 139606, true }, + { 139628, true }, + { 139640, true }, + { 139658, true }, + { 139672, false }, { 139687, true }, - { 139696, true }, - { 139706, true }, - { 139721, true }, - { 139731, true }, - { 139745, true }, - { 139761, true }, - { 139776, true }, - { 139786, true }, - { 139804, true }, - { 139821, true }, - { 139837, true }, - { 139854, true }, - { 139876, true }, - { 139888, false }, - { 139906, true }, - { 139920, false }, - { 139935, true }, - { 139948, true }, - { 139961, true }, - { 139973, true }, - { 139985, true }, - { 139996, true }, - { 140013, true }, - { 140025, true }, - { 140044, true }, - { 140053, true }, - { 140068, false }, - { 140075, true }, - { 140091, true }, - { 140106, true }, - { 140128, true }, - { 140144, true }, - { 140162, true }, - { 140176, true }, - { 140186, true }, - { 140201, true }, + { 139700, true }, + { 139713, true }, + { 139725, true }, + { 139737, true }, + { 139748, true }, + { 139765, true }, + { 139777, true }, + { 139796, true }, + { 139805, true }, + { 139820, false }, + { 139827, true }, + { 139843, true }, + { 139858, true }, + { 139880, true }, + { 139896, true }, + { 139914, true }, + { 139928, true }, + { 139938, true }, + { 139953, true }, + { 139963, true }, + { 139975, true }, + { 139993, true }, + { 140009, true }, + { 140024, true }, + { 140039, false }, + { 140062, true }, + { 140070, true }, + { 140086, true }, + { 140097, true }, + { 140114, true }, + { 140134, true }, + { 140146, true }, + { 140177, true }, + { 140198, true }, { 140211, true }, - { 140223, true }, - { 140241, true }, - { 140257, true }, + { 140232, true }, + { 140243, true }, + { 140260, true }, { 140272, true }, - { 140287, false }, - { 140310, true }, - { 140318, true }, - { 140334, true }, - { 140345, true }, - { 140362, true }, - { 140382, true }, - { 140394, true }, - { 140425, true }, - { 140446, true }, - { 140459, true }, - { 140480, true }, - { 140491, true }, - { 140508, true }, - { 140520, true }, - { 140528, true }, - { 140539, true }, - { 140548, true }, - { 140557, true }, - { 140571, true }, - { 140583, false }, - { 140590, true }, - { 140598, true }, - { 140607, true }, - { 140616, true }, - { 140627, true }, - { 140635, true }, - { 140649, true }, - { 140668, false }, - { 140688, true }, - { 140698, true }, - { 140719, true }, - { 140730, false }, - { 140742, true }, - { 140759, true }, - { 140770, true }, - { 140799, true }, - { 140813, true }, - { 140827, true }, - { 140844, true }, - { 140856, true }, - { 140871, true }, - { 140879, true }, - { 140893, true }, - { 140910, true }, - { 140928, true }, - { 140941, true }, - { 140950, false }, - { 140968, true }, - { 140980, true }, - { 140993, true }, - { 141002, true }, - { 141025, true }, - { 141039, true }, - { 141052, true }, - { 141068, true }, - { 141085, true }, - { 141098, true }, - { 141116, true }, - { 141128, true }, - { 141147, false }, - { 141163, true }, - { 141186, true }, - { 141195, true }, - { 141210, true }, - { 141218, true }, - { 141233, true }, - { 141252, true }, - { 141266, true }, - { 141282, true }, - { 141302, true }, - { 141312, true }, - { 141330, true }, - { 141337, true }, - { 141349, true }, - { 141362, true }, - { 141372, true }, - { 141378, true }, - { 141386, true }, - { 141394, true }, - { 141402, false }, - { 141425, true }, - { 141450, true }, - { 141467, true }, - { 141479, true }, - { 141491, true }, - { 141506, true }, - { 141515, true }, - { 141529, true }, - { 141542, true }, - { 141564, true }, - { 141574, true }, - { 141595, true }, - { 141616, true }, - { 141633, true }, - { 141649, true }, - { 141662, true }, + { 140280, true }, + { 140291, true }, + { 140300, true }, + { 140309, true }, + { 140323, true }, + { 140335, false }, + { 140342, true }, + { 140350, true }, + { 140359, true }, + { 140368, true }, + { 140379, true }, + { 140387, true }, + { 140401, true }, + { 140420, false }, + { 140440, true }, + { 140450, true }, + { 140471, true }, + { 140482, false }, + { 140494, true }, + { 140511, true }, + { 140522, true }, + { 140551, true }, + { 140565, true }, + { 140579, true }, + { 140596, true }, + { 140608, true }, + { 140623, true }, + { 140631, true }, + { 140645, true }, + { 140662, true }, + { 140680, true }, + { 140693, true }, + { 140702, false }, + { 140720, true }, + { 140732, true }, + { 140745, true }, + { 140754, true }, + { 140777, true }, + { 140791, true }, + { 140804, true }, + { 140820, true }, + { 140837, true }, + { 140850, true }, + { 140868, true }, + { 140880, true }, + { 140899, false }, + { 140915, true }, + { 140938, true }, + { 140947, true }, + { 140962, true }, + { 140970, true }, + { 140985, true }, + { 141004, true }, + { 141018, true }, + { 141034, true }, + { 141054, true }, + { 141064, true }, + { 141082, true }, + { 141089, true }, + { 141101, true }, + { 141114, true }, + { 141124, true }, + { 141130, true }, + { 141138, true }, + { 141146, true }, + { 141154, false }, + { 141177, true }, + { 141202, true }, + { 141219, true }, + { 141231, true }, + { 141243, true }, + { 141258, true }, + { 141267, true }, + { 141281, true }, + { 141294, true }, + { 141316, true }, + { 141326, true }, + { 141347, true }, + { 141368, true }, + { 141385, true }, + { 141401, true }, + { 141414, true }, + { 141424, true }, + { 141434, true }, + { 141447, true }, + { 141471, true }, + { 141490, true }, + { 141502, true }, + { 141520, true }, + { 141537, false }, + { 141550, true }, + { 141563, false }, + { 141584, true }, + { 141594, true }, + { 141613, true }, + { 141626, true }, + { 141641, true }, + { 141661, true }, { 141672, true }, - { 141682, true }, - { 141695, true }, - { 141719, true }, - { 141738, true }, - { 141750, true }, + { 141684, true }, + { 141697, true }, + { 141712, true }, + { 141727, true }, + { 141740, false }, + { 141749, true }, { 141768, true }, { 141785, false }, - { 141798, true }, - { 141811, false }, - { 141832, true }, - { 141842, true }, - { 141861, true }, - { 141874, true }, - { 141889, true }, - { 141909, true }, - { 141920, true }, - { 141932, true }, - { 141945, true }, - { 141960, true }, - { 141975, true }, - { 141988, false }, - { 141997, true }, - { 142016, true }, - { 142033, false }, - { 142048, true }, - { 142058, true }, - { 142071, true }, - { 142087, true }, - { 142105, true }, - { 142115, true }, - { 142127, true }, - { 142140, true }, + { 141800, true }, + { 141810, true }, + { 141823, true }, + { 141839, true }, + { 141857, true }, + { 141867, true }, + { 141879, true }, + { 141892, true }, + { 141905, true }, + { 141914, true }, + { 141938, false }, + { 141951, true }, + { 141962, true }, + { 141974, true }, + { 141990, true }, + { 142007, true }, + { 142017, true }, + { 142034, true }, + { 142053, false }, + { 142062, true }, + { 142084, true }, + { 142098, true }, + { 142111, false }, + { 142126, true }, + { 142141, true }, { 142153, true }, - { 142162, true }, - { 142186, false }, - { 142199, true }, - { 142210, true }, - { 142222, true }, - { 142238, true }, - { 142255, true }, - { 142265, true }, - { 142282, true }, - { 142301, false }, - { 142310, true }, - { 142332, true }, - { 142346, true }, - { 142359, false }, - { 142374, true }, - { 142389, true }, - { 142401, true }, - { 142420, false }, - { 142443, true }, - { 142459, true }, - { 142475, false }, - { 142495, true }, - { 142508, true }, - { 142524, true }, - { 142535, true }, - { 142554, true }, - { 142568, true }, - { 142579, true }, - { 142589, true }, - { 142606, true }, - { 142618, true }, - { 142636, true }, - { 142655, true }, - { 142667, true }, - { 142678, true }, - { 142697, true }, - { 142710, true }, - { 142726, true }, - { 142750, false }, - { 142768, true }, - { 142786, false }, - { 142806, true }, - { 142822, true }, - { 142840, true }, - { 142852, true }, - { 142869, true }, + { 142172, false }, + { 142195, true }, + { 142211, true }, + { 142227, false }, + { 142247, true }, + { 142260, true }, + { 142276, true }, + { 142287, true }, + { 142306, true }, + { 142320, true }, + { 142331, true }, + { 142341, true }, + { 142358, true }, + { 142370, true }, + { 142388, true }, + { 142407, true }, + { 142419, true }, + { 142430, true }, + { 142449, true }, + { 142462, true }, + { 142478, true }, + { 142502, false }, + { 142520, true }, + { 142538, false }, + { 142558, true }, + { 142574, true }, + { 142592, true }, + { 142604, true }, + { 142621, true }, + { 142640, true }, + { 142660, true }, + { 142673, true }, + { 142685, true }, + { 142708, true }, + { 142716, true }, + { 142736, true }, + { 142744, true }, + { 142760, true }, + { 142774, true }, + { 142783, true }, + { 142795, true }, + { 142805, true }, + { 142814, true }, + { 142831, true }, + { 142843, true }, + { 142854, true }, + { 142864, true }, + { 142875, true }, { 142888, true }, - { 142908, true }, - { 142921, true }, - { 142933, true }, + { 142901, true }, + { 142918, true }, + { 142929, true }, + { 142939, true }, { 142956, true }, - { 142964, true }, { 142984, true }, - { 142992, true }, - { 143008, true }, - { 143022, true }, - { 143031, true }, - { 143043, true }, - { 143053, true }, - { 143062, true }, - { 143079, true }, - { 143091, true }, - { 143102, true }, - { 143112, true }, - { 143123, true }, - { 143136, true }, - { 143149, true }, - { 143166, true }, - { 143177, true }, - { 143187, true }, - { 143204, true }, - { 143232, true }, - { 143246, true }, - { 143258, true }, - { 143277, true }, - { 143287, true }, - { 143309, true }, - { 143323, true }, - { 143337, true }, - { 143352, true }, - { 143366, true }, - { 143375, true }, - { 143381, true }, - { 143389, true }, - { 143401, true }, - { 143422, true }, - { 143432, true }, - { 143450, true }, + { 142998, true }, + { 143010, true }, + { 143029, true }, + { 143039, true }, + { 143061, true }, + { 143075, true }, + { 143089, true }, + { 143104, true }, + { 143118, true }, + { 143127, true }, + { 143133, true }, + { 143141, true }, + { 143153, true }, + { 143174, true }, + { 143184, true }, + { 143202, true }, + { 143213, true }, + { 143231, true }, + { 143244, true }, + { 143263, true }, + { 143279, true }, + { 143292, true }, + { 143303, true }, + { 143316, true }, + { 143330, true }, + { 143347, true }, + { 143357, true }, + { 143365, true }, + { 143382, true }, + { 143396, true }, + { 143410, true }, + { 143424, false }, + { 143437, true }, + { 143449, true }, { 143461, true }, - { 143479, true }, - { 143492, true }, - { 143511, true }, - { 143527, true }, - { 143540, true }, - { 143551, true }, - { 143564, true }, - { 143578, true }, + { 143480, true }, + { 143499, true }, + { 143513, true }, + { 143525, true }, + { 143538, true }, + { 143554, true }, + { 143567, true }, + { 143580, true }, { 143595, true }, - { 143605, true }, - { 143613, true }, - { 143630, true }, - { 143644, true }, - { 143658, true }, - { 143672, false }, - { 143685, true }, - { 143697, true }, - { 143709, true }, - { 143728, true }, - { 143747, true }, - { 143761, true }, + { 143623, true }, + { 143634, true }, + { 143647, true }, + { 143666, true }, + { 143679, true }, + { 143704, true }, + { 143716, true }, + { 143730, true }, + { 143744, true }, + { 143759, true }, { 143773, true }, - { 143786, true }, - { 143802, true }, - { 143815, true }, - { 143828, true }, - { 143843, true }, + { 143787, true }, + { 143801, true }, + { 143817, true }, + { 143840, true }, + { 143856, true }, { 143871, true }, - { 143882, true }, { 143895, true }, { 143914, true }, { 143927, true }, - { 143952, true }, - { 143964, true }, - { 143978, true }, - { 143992, true }, - { 144007, true }, - { 144021, true }, - { 144035, true }, - { 144049, true }, - { 144065, true }, - { 144088, true }, - { 144104, true }, - { 144119, true }, - { 144143, true }, - { 144162, true }, - { 144175, true }, - { 144205, true }, - { 144225, true }, - { 144243, true }, - { 144256, true }, + { 143957, true }, + { 143977, true }, + { 143995, true }, + { 144008, true }, + { 144029, true }, + { 144047, true }, + { 144063, true }, + { 144076, true }, + { 144089, true }, + { 144106, true }, + { 144126, true }, + { 144139, true }, + { 144154, true }, + { 144166, true }, + { 144185, true }, + { 144204, true }, + { 144218, true }, + { 144233, true }, + { 144245, true }, + { 144262, true }, { 144277, true }, { 144295, true }, - { 144311, true }, - { 144324, true }, - { 144337, true }, + { 144307, true }, + { 144321, true }, + { 144332, true }, { 144354, true }, - { 144374, true }, - { 144387, true }, - { 144402, true }, - { 144414, true }, - { 144433, true }, - { 144452, true }, - { 144466, true }, - { 144481, true }, - { 144493, true }, - { 144510, true }, - { 144525, true }, - { 144543, true }, - { 144555, true }, - { 144569, true }, - { 144580, true }, + { 144363, true }, + { 144375, true }, + { 144391, true }, + { 144406, true }, + { 144429, true }, + { 144440, true }, + { 144458, true }, + { 144474, true }, + { 144490, true }, + { 144509, true }, + { 144527, true }, + { 144533, true }, + { 144551, false }, + { 144571, true }, + { 144588, true }, { 144602, true }, - { 144611, true }, - { 144623, true }, - { 144639, true }, - { 144654, true }, - { 144677, true }, - { 144688, true }, - { 144706, true }, + { 144614, true }, + { 144633, false }, + { 144650, true }, + { 144669, true }, + { 144680, true }, + { 144699, true }, { 144722, true }, - { 144738, true }, - { 144757, true }, - { 144775, true }, - { 144781, true }, - { 144799, false }, - { 144819, true }, - { 144836, true }, - { 144850, true }, - { 144862, true }, - { 144881, false }, - { 144898, true }, - { 144917, true }, - { 144928, true }, - { 144947, true }, - { 144970, true }, - { 144988, true }, - { 145008, true }, - { 145025, true }, - { 145044, true }, - { 145062, true }, - { 145071, true }, - { 145078, true }, + { 144740, true }, + { 144760, true }, + { 144777, true }, + { 144796, true }, + { 144814, true }, + { 144823, true }, + { 144830, true }, + { 144837, true }, + { 144849, false }, + { 144869, true }, + { 144877, true }, + { 144888, true }, + { 144911, true }, + { 144935, true }, + { 144958, true }, + { 144981, true }, + { 145009, true }, + { 145038, true }, + { 145053, true }, + { 145072, true }, { 145085, true }, - { 145097, false }, - { 145117, true }, - { 145125, true }, - { 145136, true }, - { 145159, true }, + { 145103, true }, + { 145126, true }, + { 145143, true }, + { 145154, true }, + { 145165, true }, { 145183, true }, - { 145206, true }, - { 145229, true }, - { 145257, true }, - { 145286, true }, - { 145301, true }, - { 145320, true }, - { 145333, true }, - { 145351, true }, - { 145374, true }, - { 145391, true }, - { 145402, true }, - { 145413, true }, - { 145431, true }, - { 145457, true }, + { 145209, true }, + { 145238, true }, + { 145250, true }, + { 145263, false }, + { 145283, true }, + { 145295, true }, + { 145313, false }, + { 145328, false }, + { 145344, true }, + { 145362, true }, + { 145378, true }, + { 145396, true }, + { 145412, true }, + { 145424, true }, + { 145444, true }, + { 145466, true }, { 145486, true }, - { 145498, true }, - { 145511, false }, - { 145531, true }, + { 145504, true }, + { 145523, true }, { 145543, true }, - { 145561, false }, - { 145576, false }, - { 145592, true }, - { 145610, true }, - { 145626, true }, - { 145644, true }, + { 145562, true }, + { 145579, true }, + { 145597, false }, + { 145615, true }, + { 145634, true }, + { 145646, true }, { 145660, true }, - { 145672, true }, - { 145692, true }, - { 145714, true }, - { 145734, true }, - { 145752, true }, - { 145771, true }, - { 145791, true }, - { 145810, true }, - { 145827, true }, - { 145845, false }, - { 145863, true }, - { 145882, true }, - { 145894, true }, + { 145675, true }, + { 145694, true }, + { 145708, true }, + { 145723, true }, + { 145733, true }, + { 145746, true }, + { 145766, true }, + { 145775, true }, + { 145785, false }, + { 145802, true }, + { 145811, true }, + { 145824, true }, + { 145841, true }, + { 145855, true }, + { 145869, true }, + { 145881, true }, + { 145898, true }, { 145908, true }, - { 145923, true }, - { 145942, true }, - { 145956, true }, - { 145971, true }, - { 145986, true }, - { 145996, true }, - { 146009, true }, + { 145924, true }, + { 145936, true }, + { 145947, false }, + { 145963, true }, + { 145974, true }, + { 145990, true }, + { 145999, true }, + { 146012, true }, { 146029, true }, - { 146038, true }, - { 146048, false }, + { 146041, true }, + { 146053, true }, { 146065, true }, { 146074, true }, - { 146087, true }, - { 146104, true }, - { 146118, true }, - { 146132, true }, - { 146144, true }, - { 146161, true }, - { 146171, true }, - { 146187, true }, - { 146199, true }, - { 146210, false }, - { 146226, true }, - { 146237, true }, - { 146253, true }, - { 146262, true }, - { 146275, true }, - { 146292, true }, - { 146304, true }, - { 146316, true }, - { 146328, true }, + { 146086, true }, + { 146101, true }, + { 146115, true }, + { 146125, true }, + { 146146, true }, + { 146164, true }, + { 146176, true }, + { 146191, true }, + { 146201, true }, + { 146216, true }, + { 146228, true }, + { 146240, true }, + { 146255, true }, + { 146266, true }, + { 146277, true }, + { 146285, true }, + { 146298, true }, + { 146311, true }, + { 146320, true }, { 146337, true }, - { 146349, true }, - { 146364, true }, - { 146378, true }, - { 146388, true }, - { 146409, true }, - { 146427, true }, - { 146439, true }, - { 146454, true }, - { 146464, true }, - { 146479, true }, - { 146491, true }, - { 146503, true }, - { 146518, true }, + { 146347, true }, + { 146360, true }, + { 146377, true }, + { 146391, true }, + { 146400, true }, + { 146415, true }, + { 146429, true }, + { 146442, true }, + { 146456, true }, + { 146470, true }, + { 146489, true }, + { 146497, true }, + { 146514, true }, { 146529, true }, - { 146540, true }, - { 146548, true }, - { 146561, true }, + { 146544, true }, + { 146558, true }, { 146574, true }, - { 146583, true }, - { 146600, true }, - { 146610, true }, - { 146623, true }, - { 146640, true }, - { 146654, true }, - { 146663, true }, - { 146678, true }, - { 146692, true }, - { 146705, true }, - { 146719, true }, - { 146733, true }, - { 146752, true }, - { 146760, true }, - { 146777, true }, - { 146792, true }, - { 146807, true }, - { 146821, true }, - { 146837, true }, - { 146853, true }, + { 146590, true }, + { 146604, true }, + { 146620, true }, + { 146637, true }, + { 146650, true }, + { 146664, false }, + { 146682, true }, + { 146697, true }, + { 146714, true }, + { 146731, false }, + { 146757, true }, + { 146772, true }, + { 146790, true }, + { 146803, true }, + { 146813, true }, + { 146826, true }, + { 146838, true }, + { 146857, true }, { 146867, true }, - { 146883, true }, - { 146900, true }, - { 146913, true }, - { 146927, false }, - { 146945, true }, - { 146960, true }, - { 146977, true }, - { 146994, false }, - { 147020, true }, + { 146882, true }, + { 146898, true }, + { 146910, true }, + { 146923, true }, + { 146934, true }, + { 146951, true }, + { 146982, true }, + { 146993, true }, + { 147005, true }, + { 147019, true }, + { 147027, true }, { 147035, true }, - { 147053, true }, - { 147066, true }, - { 147076, true }, - { 147089, true }, - { 147101, true }, - { 147120, true }, - { 147130, true }, - { 147145, true }, - { 147161, true }, - { 147173, true }, - { 147186, true }, - { 147197, true }, - { 147214, true }, - { 147245, true }, - { 147256, true }, - { 147268, true }, + { 147046, true }, + { 147057, false }, + { 147077, true }, + { 147095, true }, + { 147110, false }, + { 147124, true }, + { 147144, true }, + { 147155, true }, + { 147180, true }, + { 147198, true }, + { 147213, true }, + { 147230, true }, + { 147246, true }, + { 147271, true }, { 147282, true }, - { 147290, true }, - { 147298, true }, - { 147309, true }, - { 147320, false }, - { 147340, true }, - { 147358, true }, - { 147373, false }, - { 147387, true }, - { 147407, true }, - { 147418, true }, - { 147443, true }, - { 147461, true }, - { 147476, true }, - { 147493, true }, - { 147509, true }, - { 147534, true }, - { 147545, true }, - { 147556, true }, - { 147569, true }, - { 147581, true }, - { 147594, false }, - { 147602, true }, - { 147612, true }, - { 147627, true }, - { 147645, true }, - { 147664, true }, - { 147677, true }, - { 147690, true }, - { 147705, true }, - { 147718, true }, - { 147731, true }, - { 147744, true }, - { 147764, true }, - { 147782, true }, + { 147293, true }, + { 147306, true }, + { 147318, true }, + { 147331, false }, + { 147339, true }, + { 147349, true }, + { 147364, true }, + { 147382, true }, + { 147401, true }, + { 147414, true }, + { 147427, true }, + { 147442, true }, + { 147455, true }, + { 147468, true }, + { 147481, true }, + { 147501, true }, + { 147519, true }, + { 147533, true }, + { 147544, true }, + { 147555, true }, + { 147572, true }, + { 147587, true }, + { 147600, true }, + { 147625, true }, + { 147661, true }, + { 147674, true }, + { 147684, true }, + { 147699, true }, + { 147712, true }, + { 147734, true }, + { 147752, true }, + { 147765, true }, + { 147776, true }, + { 147788, true }, { 147796, true }, - { 147807, true }, - { 147818, true }, - { 147835, true }, - { 147850, true }, - { 147863, true }, - { 147888, true }, - { 147924, true }, - { 147937, true }, - { 147947, true }, - { 147962, true }, - { 147975, true }, - { 147997, true }, - { 148015, true }, - { 148028, true }, - { 148039, true }, - { 148051, true }, - { 148059, true }, - { 148092, true }, - { 148099, true }, - { 148116, true }, - { 148134, false }, - { 148152, true }, - { 148170, true }, - { 148182, true }, - { 148194, true }, - { 148207, true }, - { 148223, true }, + { 147829, true }, + { 147836, true }, + { 147853, true }, + { 147871, false }, + { 147889, true }, + { 147907, true }, + { 147919, true }, + { 147931, true }, + { 147944, true }, + { 147960, true }, + { 147974, true }, + { 147994, true }, + { 148014, true }, + { 148025, true }, + { 148035, true }, + { 148044, true }, + { 148055, true }, + { 148074, true }, + { 148088, true }, + { 148102, true }, + { 148125, true }, + { 148139, true }, + { 148153, true }, + { 148165, true }, + { 148179, true }, + { 148193, true }, + { 148202, true }, + { 148214, true }, + { 148226, true }, { 148237, true }, - { 148257, true }, - { 148277, true }, - { 148288, true }, - { 148298, true }, - { 148307, true }, - { 148318, true }, - { 148337, true }, - { 148351, true }, + { 148246, true }, + { 148255, true }, + { 148267, true }, + { 148281, true }, + { 148293, true }, + { 148308, false }, + { 148335, true }, + { 148355, true }, { 148365, true }, - { 148388, true }, - { 148402, true }, - { 148416, true }, + { 148378, true }, + { 148391, true }, + { 148407, true }, { 148428, true }, - { 148442, true }, - { 148456, true }, - { 148465, true }, - { 148477, true }, - { 148489, true }, + { 148447, true }, + { 148457, true }, + { 148469, true }, + { 148481, true }, + { 148492, false }, { 148500, true }, - { 148509, true }, - { 148518, true }, - { 148530, true }, - { 148544, true }, - { 148556, true }, - { 148571, false }, - { 148598, true }, - { 148618, true }, - { 148628, true }, - { 148641, true }, - { 148654, true }, - { 148670, true }, - { 148691, true }, - { 148710, true }, - { 148720, true }, - { 148732, true }, - { 148744, true }, - { 148755, false }, - { 148763, true }, - { 148778, true }, - { 148792, true }, - { 148801, true }, - { 148813, true }, - { 148826, true }, - { 148836, true }, - { 148857, true }, - { 148869, true }, - { 148880, true }, - { 148900, true }, - { 148919, true }, - { 148930, true }, - { 148945, true }, - { 148970, false }, - { 148998, false }, - { 149010, true }, + { 148515, true }, + { 148529, true }, + { 148538, true }, + { 148550, true }, + { 148563, true }, + { 148573, true }, + { 148594, true }, + { 148606, true }, + { 148617, true }, + { 148637, true }, + { 148656, true }, + { 148667, true }, + { 148682, true }, + { 148707, false }, + { 148735, false }, + { 148747, true }, + { 148758, true }, + { 148769, true }, + { 148784, true }, + { 148799, true }, + { 148816, true }, + { 148828, false }, + { 148845, true }, + { 148861, true }, + { 148875, true }, + { 148890, true }, + { 148905, true }, + { 148921, true }, + { 148938, true }, + { 148961, true }, + { 148980, true }, + { 149001, true }, { 149021, true }, - { 149032, true }, - { 149047, true }, - { 149062, true }, - { 149079, true }, - { 149091, false }, - { 149108, true }, - { 149124, true }, + { 149039, true }, + { 149058, true }, + { 149076, true }, + { 149094, true }, + { 149109, false }, + { 149124, false }, { 149138, true }, - { 149153, true }, - { 149168, true }, - { 149184, true }, - { 149201, true }, - { 149224, true }, + { 149149, true }, + { 149160, true }, + { 149175, true }, + { 149193, true }, + { 149215, true }, + { 149229, true }, { 149243, true }, - { 149264, true }, - { 149284, true }, - { 149302, true }, - { 149321, true }, - { 149339, true }, - { 149357, true }, - { 149372, false }, - { 149387, false }, - { 149401, true }, - { 149412, true }, - { 149423, true }, - { 149438, true }, + { 149262, true }, + { 149276, true }, + { 149291, true }, + { 149307, true }, + { 149325, true }, + { 149335, true }, + { 149347, false }, + { 149358, true }, + { 149371, true }, + { 149390, false }, + { 149409, true }, + { 149424, true }, + { 149437, false }, { 149456, true }, - { 149478, true }, - { 149492, true }, - { 149506, true }, - { 149525, true }, + { 149467, true }, + { 149485, true }, + { 149499, true }, + { 149524, true }, { 149539, true }, - { 149554, true }, - { 149570, true }, - { 149588, true }, - { 149598, true }, - { 149610, false }, - { 149621, true }, - { 149634, true }, - { 149653, false }, - { 149672, true }, - { 149687, true }, - { 149700, false }, - { 149719, true }, - { 149730, true }, + { 149557, true }, + { 149574, true }, + { 149585, true }, + { 149595, true }, + { 149610, true }, + { 149619, true }, + { 149629, true }, + { 149644, false }, + { 149657, true }, + { 149673, true }, + { 149694, true }, + { 149713, true }, + { 149725, true }, + { 149736, true }, { 149748, true }, - { 149762, true }, - { 149787, true }, - { 149802, true }, + { 149763, true }, + { 149777, true }, + { 149797, true }, { 149820, true }, - { 149837, true }, - { 149848, true }, - { 149858, true }, - { 149873, true }, - { 149882, true }, - { 149892, true }, - { 149907, false }, - { 149920, true }, - { 149936, true }, - { 149957, true }, - { 149976, true }, - { 149988, true }, - { 149999, true }, - { 150011, true }, - { 150026, true }, - { 150040, true }, - { 150060, true }, - { 150083, true }, - { 150096, true }, - { 150114, true }, + { 149833, true }, + { 149851, true }, + { 149859, true }, + { 149867, true }, + { 149879, true }, + { 149896, true }, + { 149913, true }, + { 149924, false }, + { 149941, true }, + { 149954, true }, + { 149965, false }, + { 149978, true }, + { 149993, false }, + { 150017, false }, + { 150029, true }, + { 150054, true }, + { 150063, true }, + { 150075, true }, + { 150095, true }, + { 150112, true }, { 150122, true }, - { 150134, true }, - { 150151, true }, - { 150168, true }, - { 150179, false }, - { 150196, true }, - { 150209, true }, - { 150220, false }, - { 150233, true }, - { 150248, false }, - { 150272, false }, - { 150284, true }, - { 150309, true }, - { 150318, true }, - { 150330, true }, - { 150350, true }, - { 150367, true }, - { 150377, true }, - { 150398, true }, - { 150407, true }, + { 150143, true }, + { 150152, true }, + { 150171, true }, + { 150189, true }, + { 150205, true }, + { 150220, true }, + { 150235, true }, + { 150250, true }, + { 150263, true }, + { 150276, true }, + { 150285, true }, + { 150299, true }, + { 150322, true }, + { 150344, true }, + { 150370, true }, + { 150385, true }, + { 150400, true }, + { 150414, true }, { 150426, true }, - { 150444, true }, - { 150460, true }, - { 150475, true }, - { 150490, true }, - { 150505, true }, - { 150518, true }, - { 150531, true }, - { 150540, true }, - { 150554, true }, - { 150577, true }, - { 150599, true }, - { 150625, true }, - { 150640, true }, - { 150655, true }, - { 150669, true }, - { 150681, true }, - { 150704, true }, - { 150714, true }, - { 150722, true }, - { 150738, true }, - { 150752, true }, - { 150765, false }, + { 150449, true }, + { 150459, true }, + { 150467, true }, + { 150483, true }, + { 150497, true }, + { 150510, false }, + { 150528, true }, + { 150539, true }, + { 150552, true }, + { 150563, true }, + { 150576, true }, + { 150586, true }, + { 150601, true }, + { 150614, true }, + { 150630, true }, + { 150640, false }, + { 150650, true }, + { 150663, true }, + { 150678, true }, + { 150688, true }, + { 150700, true }, + { 150709, true }, + { 150724, true }, + { 150735, true }, + { 150747, true }, + { 150767, true }, { 150783, true }, - { 150794, true }, - { 150807, true }, - { 150818, true }, - { 150831, true }, - { 150841, true }, - { 150856, true }, - { 150869, true }, - { 150885, true }, - { 150895, false }, - { 150905, true }, - { 150918, true }, - { 150933, true }, - { 150943, true }, + { 150800, true }, + { 150810, true }, + { 150820, true }, + { 150834, true }, + { 150846, true }, + { 150859, true }, + { 150876, true }, + { 150891, true }, + { 150908, true }, + { 150925, true }, + { 150939, true }, { 150955, true }, - { 150964, true }, - { 150979, true }, - { 150990, true }, - { 151002, true }, - { 151022, true }, - { 151038, true }, - { 151055, true }, - { 151065, true }, - { 151075, true }, - { 151089, true }, - { 151101, true }, - { 151114, true }, - { 151131, true }, - { 151146, true }, - { 151163, true }, - { 151180, true }, - { 151194, true }, - { 151210, true }, - { 151223, true }, - { 151238, false }, - { 151250, true }, - { 151260, true }, + { 150968, true }, + { 150983, false }, + { 150995, true }, + { 151005, true }, + { 151014, true }, + { 151026, true }, + { 151034, true }, + { 151042, true }, + { 151050, true }, + { 151056, true }, + { 151069, true }, + { 151084, true }, + { 151103, true }, + { 151118, true }, + { 151142, true }, + { 151152, true }, + { 151168, true }, + { 151191, true }, + { 151212, true }, + { 151225, true }, + { 151238, true }, + { 151255, true }, { 151269, true }, - { 151281, true }, - { 151289, true }, - { 151297, true }, - { 151305, true }, - { 151311, true }, - { 151324, true }, - { 151339, true }, - { 151358, true }, - { 151373, true }, - { 151397, true }, - { 151407, true }, + { 151281, false }, + { 151294, true }, + { 151313, true }, + { 151331, true }, + { 151355, false }, + { 151382, true }, + { 151408, true }, { 151423, true }, - { 151446, true }, - { 151467, true }, - { 151480, true }, - { 151493, true }, - { 151510, true }, - { 151524, true }, - { 151536, false }, - { 151549, true }, + { 151438, true }, + { 151455, true }, + { 151471, true }, + { 151488, true }, + { 151501, true }, + { 151512, true }, + { 151523, true }, + { 151533, true }, + { 151542, true }, + { 151555, true }, { 151568, true }, - { 151586, true }, - { 151610, false }, - { 151637, true }, - { 151663, true }, - { 151678, true }, - { 151693, true }, - { 151710, true }, - { 151726, true }, - { 151743, true }, - { 151756, true }, - { 151767, true }, - { 151778, true }, + { 151578, true }, + { 151589, true }, + { 151610, true }, + { 151624, true }, + { 151633, true }, + { 151640, true }, + { 151648, true }, + { 151671, true }, + { 151685, true }, + { 151694, true }, + { 151703, true }, + { 151711, true }, + { 151724, true }, + { 151732, true }, + { 151743, false }, + { 151759, true }, + { 151775, true }, { 151788, true }, - { 151797, true }, - { 151810, true }, - { 151823, true }, - { 151833, true }, - { 151844, true }, - { 151865, true }, - { 151879, true }, - { 151888, true }, - { 151895, true }, - { 151903, true }, - { 151926, true }, - { 151940, true }, - { 151949, true }, - { 151958, true }, - { 151966, true }, - { 151974, true }, - { 151985, false }, - { 152001, true }, - { 152017, true }, - { 152030, true }, - { 152041, true }, - { 152053, true }, - { 152068, true }, - { 152077, true }, - { 152089, true }, - { 152100, true }, - { 152112, true }, - { 152125, true }, - { 152140, true }, - { 152160, true }, - { 152172, true }, - { 152189, true }, - { 152199, true }, - { 152210, true }, - { 152220, true }, - { 152227, true }, - { 152237, true }, - { 152251, true }, - { 152263, true }, - { 152279, true }, - { 152294, true }, + { 151799, true }, + { 151811, true }, + { 151826, true }, + { 151835, true }, + { 151847, true }, + { 151858, true }, + { 151870, true }, + { 151883, true }, + { 151898, true }, + { 151918, true }, + { 151930, true }, + { 151947, true }, + { 151957, true }, + { 151968, true }, + { 151978, true }, + { 151985, true }, + { 151995, true }, + { 152009, true }, + { 152021, true }, + { 152037, true }, + { 152052, true }, + { 152061, true }, + { 152075, true }, + { 152095, true }, + { 152113, true }, + { 152120, true }, + { 152137, true }, + { 152154, true }, + { 152174, true }, + { 152193, false }, + { 152211, true }, + { 152238, true }, + { 152255, true }, + { 152269, true }, + { 152284, false }, { 152303, true }, - { 152317, true }, - { 152337, true }, - { 152355, true }, - { 152362, true }, - { 152379, true }, - { 152396, true }, - { 152416, true }, - { 152435, false }, - { 152453, true }, - { 152480, true }, - { 152497, true }, - { 152511, true }, - { 152526, false }, - { 152545, true }, - { 152563, true }, - { 152581, true }, - { 152599, true }, - { 152616, true }, - { 152637, true }, - { 152656, true }, - { 152667, true }, - { 152675, true }, - { 152690, true }, - { 152705, true }, + { 152321, true }, + { 152339, true }, + { 152357, true }, + { 152374, true }, + { 152395, true }, + { 152414, true }, + { 152425, true }, + { 152433, true }, + { 152448, true }, + { 152463, true }, + { 152474, true }, + { 152496, true }, + { 152509, true }, + { 152528, true }, + { 152554, true }, + { 152570, true }, + { 152588, true }, + { 152606, true }, + { 152621, true }, + { 152629, true }, + { 152642, true }, + { 152650, true }, + { 152664, true }, + { 152680, true }, + { 152689, true }, + { 152706, true }, { 152716, true }, - { 152738, true }, - { 152751, true }, - { 152770, true }, - { 152796, true }, - { 152812, true }, - { 152830, true }, - { 152848, true }, - { 152863, true }, - { 152871, true }, + { 152729, true }, + { 152747, true }, + { 152760, true }, + { 152779, false }, + { 152789, true }, + { 152806, true }, + { 152822, true }, + { 152845, true }, + { 152870, true }, { 152884, true }, - { 152892, true }, - { 152906, true }, - { 152922, true }, - { 152931, true }, - { 152948, true }, - { 152958, true }, - { 152971, true }, - { 152989, true }, + { 152897, true }, + { 152908, true }, + { 152923, true }, + { 152935, true }, + { 152953, true }, + { 152978, true }, + { 152990, true }, { 153002, true }, - { 153021, false }, - { 153031, true }, - { 153048, true }, - { 153064, true }, - { 153087, true }, - { 153112, true }, - { 153126, true }, - { 153139, true }, - { 153150, true }, - { 153165, true }, - { 153177, true }, - { 153195, true }, - { 153220, true }, - { 153232, true }, - { 153244, true }, - { 153256, true }, - { 153274, true }, - { 153295, true }, - { 153311, true }, - { 153323, true }, - { 153337, true }, - { 153352, true }, - { 153365, true }, - { 153385, true }, - { 153395, false }, - { 153406, true }, - { 153414, false }, - { 153426, true }, - { 153443, true }, - { 153453, true }, + { 153014, true }, + { 153032, true }, + { 153053, true }, + { 153069, true }, + { 153081, true }, + { 153095, true }, + { 153110, true }, + { 153123, true }, + { 153143, true }, + { 153153, false }, + { 153164, true }, + { 153172, false }, + { 153184, true }, + { 153201, true }, + { 153211, true }, + { 153222, true }, + { 153229, true }, + { 153240, true }, + { 153260, true }, + { 153275, true }, + { 153284, true }, + { 153291, true }, + { 153301, true }, + { 153312, true }, + { 153324, true }, + { 153334, true }, + { 153355, true }, + { 153364, false }, + { 153377, true }, + { 153393, true }, + { 153413, true }, + { 153427, true }, + { 153441, true }, + { 153456, true }, { 153464, true }, - { 153471, true }, - { 153482, true }, - { 153502, true }, - { 153517, true }, - { 153526, true }, + { 153477, true }, + { 153493, true }, + { 153506, true }, + { 153519, true }, { 153533, true }, - { 153543, true }, - { 153554, true }, - { 153566, true }, + { 153555, true }, { 153576, true }, - { 153597, true }, - { 153606, false }, - { 153619, true }, - { 153635, true }, - { 153655, true }, - { 153669, true }, - { 153685, true }, - { 153699, true }, - { 153714, true }, - { 153722, true }, - { 153735, true }, + { 153595, true }, + { 153623, true }, + { 153644, true }, + { 153663, true }, + { 153687, true }, + { 153697, true }, + { 153706, true }, + { 153719, true }, + { 153725, true }, + { 153737, true }, { 153751, true }, - { 153764, true }, - { 153777, true }, - { 153791, true }, - { 153813, true }, - { 153834, true }, - { 153853, true }, - { 153881, true }, - { 153902, true }, - { 153921, true }, - { 153945, true }, - { 153955, true }, - { 153964, true }, - { 153977, true }, - { 153983, true }, + { 153765, true }, + { 153779, false }, + { 153792, true }, + { 153805, true }, + { 153816, true }, + { 153826, true }, + { 153839, true }, + { 153858, true }, + { 153877, true }, + { 153897, true }, + { 153906, true }, + { 153917, true }, + { 153926, true }, + { 153945, false }, + { 153961, false }, + { 153974, true }, + { 153985, true }, { 153995, true }, - { 154009, true }, - { 154023, true }, - { 154037, false }, - { 154050, true }, - { 154063, true }, - { 154074, true }, - { 154084, true }, - { 154097, true }, - { 154116, true }, - { 154135, true }, - { 154155, true }, - { 154164, true }, + { 154010, true }, + { 154021, true }, + { 154040, true }, + { 154053, true }, + { 154065, true }, + { 154078, true }, + { 154093, true }, + { 154102, true }, + { 154115, true }, + { 154127, true }, + { 154142, true }, + { 154158, true }, { 154175, true }, { 154184, true }, - { 154203, false }, - { 154219, false }, - { 154232, true }, - { 154243, true }, - { 154253, true }, - { 154268, true }, + { 154196, true }, + { 154210, true }, + { 154224, true }, + { 154248, true }, + { 154263, true }, { 154279, true }, - { 154298, true }, - { 154311, true }, - { 154323, true }, - { 154336, true }, - { 154351, true }, - { 154360, true }, - { 154373, true }, - { 154385, true }, - { 154400, true }, - { 154416, true }, - { 154433, true }, - { 154442, true }, - { 154454, true }, - { 154468, true }, - { 154482, true }, - { 154506, true }, - { 154521, true }, - { 154537, true }, - { 154552, true }, - { 154565, true }, - { 154588, true }, - { 154601, true }, - { 154614, true }, - { 154634, true }, - { 154645, true }, - { 154659, true }, + { 154294, true }, + { 154307, true }, + { 154330, true }, + { 154343, true }, + { 154356, true }, + { 154376, true }, + { 154387, true }, + { 154401, true }, + { 154410, true }, + { 154419, true }, + { 154437, true }, + { 154451, true }, + { 154467, true }, + { 154479, true }, + { 154493, true }, + { 154518, true }, + { 154534, true }, + { 154551, true }, + { 154566, true }, + { 154576, true }, + { 154600, true }, + { 154612, true }, + { 154625, true }, + { 154639, true }, { 154668, true }, - { 154677, true }, - { 154695, true }, - { 154709, true }, - { 154725, true }, - { 154737, true }, - { 154751, true }, - { 154776, true }, - { 154792, true }, - { 154809, true }, + { 154693, true }, + { 154718, true }, + { 154747, true }, + { 154759, true }, + { 154775, true }, + { 154784, true }, + { 154796, true }, + { 154810, true }, { 154824, true }, - { 154834, true }, - { 154858, true }, + { 154838, true }, + { 154851, true }, { 154870, true }, { 154883, true }, - { 154897, true }, - { 154926, true }, - { 154951, true }, - { 154976, true }, - { 155005, true }, - { 155017, true }, - { 155033, true }, - { 155042, true }, - { 155054, true }, + { 154900, true }, + { 154909, true }, + { 154927, true }, + { 154941, false }, + { 154952, false }, + { 154965, true }, + { 154975, true }, + { 154994, true }, + { 155016, true }, + { 155027, true }, + { 155038, true }, + { 155049, true }, + { 155059, true }, { 155068, true }, - { 155082, true }, - { 155096, true }, - { 155109, true }, - { 155128, true }, - { 155141, true }, - { 155158, true }, - { 155167, true }, - { 155185, true }, - { 155199, false }, - { 155210, false }, - { 155223, true }, - { 155233, true }, - { 155252, true }, - { 155274, true }, - { 155285, true }, - { 155296, true }, - { 155307, true }, - { 155317, true }, - { 155326, true }, - { 155334, false }, - { 155340, false }, - { 155348, true }, - { 155357, true }, - { 155365, true }, - { 155375, true }, - { 155394, true }, + { 155076, false }, + { 155082, false }, + { 155090, true }, + { 155099, true }, + { 155107, true }, + { 155117, true }, + { 155136, true }, + { 155161, true }, + { 155168, true }, + { 155181, true }, + { 155195, true }, + { 155205, true }, + { 155215, true }, + { 155234, true }, + { 155246, true }, + { 155261, true }, + { 155273, true }, + { 155286, true }, + { 155299, true }, + { 155311, true }, + { 155330, true }, + { 155341, false }, + { 155352, true }, + { 155367, true }, + { 155383, true }, + { 155405, true }, { 155419, true }, - { 155426, true }, - { 155439, true }, - { 155453, true }, - { 155463, true }, - { 155473, true }, - { 155492, true }, - { 155504, true }, - { 155519, true }, - { 155531, true }, - { 155544, true }, - { 155557, true }, - { 155569, true }, - { 155588, true }, - { 155599, false }, - { 155610, true }, - { 155625, true }, - { 155641, true }, - { 155663, true }, - { 155677, true }, - { 155690, true }, - { 155703, true }, - { 155722, true }, - { 155738, true }, - { 155751, true }, - { 155771, false }, - { 155798, false }, - { 155814, true }, - { 155830, true }, - { 155845, true }, - { 155861, true }, - { 155879, true }, - { 155898, true }, - { 155908, true }, + { 155432, true }, + { 155445, true }, + { 155464, true }, + { 155480, true }, + { 155493, true }, + { 155513, false }, + { 155540, false }, + { 155556, true }, + { 155572, true }, + { 155587, true }, + { 155603, true }, + { 155621, true }, + { 155640, true }, + { 155650, true }, + { 155659, true }, + { 155672, true }, + { 155689, true }, + { 155708, true }, + { 155721, true }, + { 155737, true }, + { 155750, true }, + { 155769, true }, + { 155786, true }, + { 155804, true }, + { 155821, true }, + { 155839, true }, + { 155857, true }, + { 155870, true }, + { 155886, true }, + { 155907, true }, { 155917, true }, - { 155930, true }, + { 155938, true }, { 155947, true }, - { 155966, true }, - { 155979, true }, - { 155995, true }, - { 156008, true }, - { 156027, true }, - { 156044, true }, - { 156062, true }, - { 156079, true }, - { 156097, true }, - { 156115, true }, - { 156128, true }, - { 156144, true }, - { 156165, true }, - { 156175, true }, - { 156196, true }, - { 156205, true }, - { 156216, true }, - { 156229, false }, + { 155958, true }, + { 155971, false }, + { 155984, true }, + { 155997, true }, + { 156013, true }, + { 156027, false }, + { 156042, true }, + { 156056, true }, + { 156071, true }, + { 156088, true }, + { 156104, true }, + { 156123, true }, + { 156139, true }, + { 156152, true }, + { 156161, true }, + { 156171, true }, + { 156180, true }, + { 156207, false }, + { 156224, true }, { 156242, true }, - { 156255, true }, - { 156271, true }, - { 156285, false }, - { 156300, true }, - { 156314, true }, - { 156329, true }, - { 156346, true }, - { 156362, true }, - { 156381, true }, - { 156397, true }, + { 156266, true }, + { 156290, true }, + { 156304, true }, + { 156315, true }, + { 156343, true }, + { 156357, true }, + { 156366, true }, + { 156376, true }, + { 156396, true }, { 156410, true }, - { 156419, true }, - { 156429, true }, - { 156438, true }, - { 156465, false }, - { 156482, true }, - { 156500, true }, - { 156524, true }, - { 156548, true }, - { 156562, true }, - { 156573, true }, - { 156601, true }, - { 156615, true }, - { 156624, true }, - { 156634, true }, - { 156654, true }, - { 156668, true }, - { 156681, true }, - { 156701, true }, - { 156719, true }, - { 156731, true }, - { 156746, true }, - { 156761, true }, - { 156777, true }, - { 156792, false }, - { 156809, true }, - { 156821, false }, - { 156844, true }, - { 156861, true }, - { 156874, true }, - { 156897, true }, - { 156915, true }, - { 156936, true }, - { 156958, true }, - { 156979, true }, - { 157000, true }, - { 157010, false }, - { 157024, true }, - { 157041, true }, - { 157058, true }, - { 157068, true }, - { 157081, true }, - { 157096, true }, - { 157114, true }, - { 157131, true }, - { 157147, true }, - { 157184, true }, - { 157203, true }, - { 157218, true }, - { 157233, false }, - { 157245, true }, - { 157262, true }, - { 157279, false }, - { 157294, true }, - { 157315, false }, - { 157327, false }, - { 157344, true }, + { 156423, true }, + { 156443, true }, + { 156461, true }, + { 156473, true }, + { 156488, true }, + { 156503, true }, + { 156519, true }, + { 156534, false }, + { 156551, true }, + { 156563, false }, + { 156586, true }, + { 156603, true }, + { 156616, true }, + { 156639, true }, + { 156657, true }, + { 156678, true }, + { 156700, true }, + { 156721, true }, + { 156742, true }, + { 156752, false }, + { 156766, true }, + { 156783, true }, + { 156800, true }, + { 156810, true }, + { 156823, true }, + { 156838, true }, + { 156856, true }, + { 156873, true }, + { 156889, true }, + { 156926, true }, + { 156945, true }, + { 156960, true }, + { 156975, false }, + { 156987, true }, + { 157004, true }, + { 157021, false }, + { 157036, true }, + { 157057, false }, + { 157069, false }, + { 157086, true }, + { 157103, true }, + { 157120, true }, + { 157133, true }, + { 157149, true }, + { 157165, true }, + { 157178, true }, + { 157196, true }, + { 157206, false }, + { 157220, false }, + { 157232, true }, + { 157243, true }, + { 157259, true }, + { 157269, true }, + { 157288, true }, + { 157301, true }, + { 157315, true }, + { 157330, true }, + { 157341, true }, { 157361, true }, - { 157378, true }, - { 157391, true }, - { 157407, true }, - { 157423, true }, - { 157436, true }, - { 157454, true }, - { 157464, false }, - { 157478, false }, - { 157490, true }, - { 157501, true }, - { 157517, true }, - { 157527, true }, - { 157546, true }, - { 157559, true }, - { 157573, true }, - { 157588, true }, - { 157599, true }, - { 157619, true }, - { 157632, true }, - { 157645, true }, - { 157657, true }, - { 157676, true }, - { 157689, true }, - { 157700, true }, - { 157711, true }, - { 157731, true }, - { 157741, true }, - { 157751, true }, - { 157773, true }, - { 157793, true }, - { 157806, true }, - { 157815, true }, - { 157826, true }, - { 157842, true }, - { 157858, true }, - { 157880, true }, - { 157896, true }, - { 157912, true }, - { 157936, true }, - { 157951, true }, - { 157964, true }, - { 157983, true }, - { 157993, true }, + { 157374, true }, + { 157387, true }, + { 157399, true }, + { 157418, true }, + { 157431, true }, + { 157442, true }, + { 157453, true }, + { 157473, true }, + { 157483, true }, + { 157493, true }, + { 157515, true }, + { 157535, true }, + { 157548, true }, + { 157557, true }, + { 157568, true }, + { 157584, true }, + { 157600, true }, + { 157622, true }, + { 157638, true }, + { 157654, true }, + { 157678, true }, + { 157693, true }, + { 157706, true }, + { 157725, true }, + { 157735, true }, + { 157749, true }, + { 157760, true }, + { 157778, true }, + { 157795, true }, + { 157807, true }, + { 157820, true }, + { 157837, true }, + { 157849, true }, + { 157866, true }, + { 157875, true }, + { 157895, false }, + { 157915, true }, + { 157932, true }, + { 157942, true }, + { 157959, true }, + { 157971, true }, + { 157988, true }, { 158007, true }, - { 158018, true }, - { 158036, true }, - { 158053, true }, - { 158065, true }, - { 158078, true }, - { 158095, true }, - { 158107, true }, - { 158124, true }, - { 158133, true }, - { 158153, false }, - { 158173, true }, - { 158190, true }, - { 158200, true }, - { 158217, true }, - { 158229, true }, + { 158024, true }, + { 158041, true }, + { 158058, true }, + { 158069, true }, + { 158081, true }, + { 158093, true }, + { 158103, true }, + { 158112, true }, + { 158125, true }, + { 158135, true }, + { 158147, true }, + { 158161, false }, + { 158170, true }, + { 158182, true }, + { 158193, true }, + { 158206, true }, + { 158216, true }, + { 158226, true }, + { 158237, true }, { 158246, true }, - { 158265, true }, + { 158258, false }, + { 158271, true }, { 158282, true }, - { 158299, true }, - { 158316, true }, - { 158327, true }, - { 158339, true }, + { 158296, false }, + { 158307, false }, + { 158318, true }, + { 158328, true }, { 158351, true }, { 158361, true }, - { 158370, true }, - { 158383, true }, - { 158393, true }, - { 158405, true }, - { 158419, false }, - { 158428, true }, - { 158440, true }, - { 158451, true }, - { 158464, true }, - { 158474, true }, - { 158484, true }, - { 158495, true }, - { 158504, true }, - { 158516, false }, - { 158529, true }, - { 158540, true }, - { 158554, false }, - { 158565, false }, - { 158576, true }, - { 158586, true }, - { 158609, true }, - { 158619, true }, - { 158631, true }, - { 158644, true }, - { 158652, true }, - { 158667, true }, - { 158679, true }, - { 158694, true }, - { 158703, true }, - { 158722, true }, - { 158737, true }, - { 158759, true }, - { 158775, true }, - { 158791, true }, - { 158805, true }, + { 158373, true }, + { 158386, true }, + { 158394, true }, + { 158409, true }, + { 158418, true }, + { 158430, true }, + { 158445, true }, + { 158454, true }, + { 158473, true }, + { 158488, true }, + { 158510, true }, + { 158526, false }, + { 158538, true }, + { 158554, true }, + { 158568, true }, + { 158581, true }, + { 158592, true }, + { 158600, true }, + { 158614, true }, + { 158625, true }, + { 158642, true }, + { 158655, true }, + { 158668, true }, + { 158684, true }, + { 158701, true }, + { 158717, true }, + { 158730, true }, + { 158744, true }, + { 158771, true }, + { 158795, true }, { 158818, true }, - { 158829, true }, - { 158837, true }, - { 158851, true }, - { 158862, true }, - { 158879, true }, - { 158892, true }, - { 158905, true }, - { 158921, true }, - { 158938, true }, - { 158954, true }, - { 158967, true }, - { 158981, true }, - { 159008, true }, - { 159032, true }, - { 159055, true }, - { 159077, true }, - { 159090, false }, - { 159103, true }, - { 159117, true }, - { 159131, false }, - { 159152, true }, - { 159162, true }, - { 159174, true }, - { 159200, true }, - { 159213, true }, - { 159227, true }, - { 159246, true }, - { 159263, true }, - { 159281, true }, - { 159302, true }, - { 159316, true }, - { 159338, true }, - { 159357, true }, - { 159369, true }, + { 158840, true }, + { 158853, false }, + { 158866, true }, + { 158880, true }, + { 158894, false }, + { 158915, true }, + { 158925, true }, + { 158937, true }, + { 158963, true }, + { 158976, true }, + { 158990, true }, + { 159009, true }, + { 159026, true }, + { 159044, true }, + { 159065, true }, + { 159079, true }, + { 159101, true }, + { 159120, true }, + { 159132, true }, + { 159144, true }, + { 159168, true }, + { 159178, true }, + { 159191, true }, + { 159210, true }, + { 159225, true }, + { 159242, true }, + { 159258, true }, + { 159276, true }, + { 159293, true }, + { 159308, true }, + { 159324, true }, + { 159351, true }, + { 159365, true }, { 159381, true }, - { 159405, true }, - { 159415, true }, - { 159428, true }, - { 159447, true }, - { 159462, true }, - { 159479, true }, - { 159495, true }, - { 159513, true }, - { 159530, true }, - { 159545, true }, - { 159561, true }, - { 159588, true }, - { 159602, true }, - { 159618, true }, + { 159396, true }, + { 159409, true }, + { 159418, true }, + { 159434, true }, + { 159449, true }, + { 159460, true }, + { 159472, true }, + { 159489, true }, + { 159500, true }, + { 159511, true }, + { 159534, true }, + { 159544, true }, + { 159558, true }, + { 159567, true }, + { 159574, true }, + { 159588, false }, + { 159608, true }, + { 159619, true }, { 159633, true }, { 159646, true }, - { 159655, true }, - { 159671, true }, - { 159686, true }, + { 159660, true }, + { 159668, true }, + { 159679, true }, { 159697, true }, - { 159713, true }, - { 159725, true }, - { 159742, true }, + { 159707, true }, + { 159717, true }, + { 159728, true }, { 159753, true }, - { 159764, true }, - { 159787, true }, - { 159797, true }, - { 159811, true }, - { 159820, true }, - { 159827, true }, - { 159841, false }, - { 159861, true }, - { 159872, true }, - { 159886, true }, - { 159899, true }, - { 159913, true }, - { 159921, true }, - { 159932, true }, - { 159950, true }, - { 159960, true }, - { 159970, true }, - { 159981, true }, - { 160006, true }, - { 160020, true }, - { 160031, true }, - { 160042, true }, - { 160057, false }, - { 160068, true }, - { 160083, false }, - { 160102, true }, + { 159767, true }, + { 159778, true }, + { 159789, true }, + { 159804, false }, + { 159815, true }, + { 159830, false }, + { 159849, true }, + { 159860, true }, + { 159870, true }, + { 159890, true }, + { 159904, true }, + { 159918, true }, + { 159929, true }, + { 159936, true }, + { 159949, false }, + { 159959, true }, + { 159968, true }, + { 159978, true }, + { 159989, true }, + { 160001, true }, + { 160009, true }, + { 160019, true }, + { 160036, true }, + { 160053, true }, + { 160072, true }, + { 160083, true }, + { 160102, false }, { 160113, true }, - { 160123, true }, - { 160143, true }, - { 160157, true }, - { 160171, true }, - { 160182, true }, - { 160189, true }, - { 160202, false }, - { 160212, true }, - { 160221, true }, - { 160231, true }, - { 160243, true }, - { 160251, true }, - { 160261, true }, - { 160278, true }, - { 160295, true }, - { 160314, true }, - { 160325, true }, - { 160344, false }, - { 160355, true }, - { 160372, true }, - { 160389, true }, - { 160402, true }, - { 160418, true }, - { 160429, true }, - { 160440, true }, - { 160457, true }, - { 160466, false }, - { 160474, false }, - { 160487, true }, - { 160498, true }, - { 160505, true }, - { 160519, true }, - { 160533, true }, - { 160553, false }, - { 160565, true }, - { 160581, true }, - { 160593, true }, - { 160612, true }, - { 160636, true }, + { 160130, true }, + { 160147, true }, + { 160160, true }, + { 160176, true }, + { 160187, true }, + { 160198, true }, + { 160215, true }, + { 160224, false }, + { 160232, false }, + { 160245, true }, + { 160256, true }, + { 160263, true }, + { 160277, true }, + { 160291, true }, + { 160311, false }, + { 160323, true }, + { 160339, true }, + { 160351, true }, + { 160370, true }, + { 160394, true }, + { 160411, true }, + { 160427, true }, + { 160443, true }, + { 160452, true }, + { 160464, true }, + { 160477, true }, + { 160491, true }, + { 160507, false }, + { 160522, true }, + { 160531, true }, + { 160551, true }, + { 160559, true }, + { 160573, true }, + { 160584, true }, + { 160594, false }, + { 160604, true }, + { 160618, true }, + { 160630, true }, + { 160640, false }, { 160653, true }, { 160669, true }, - { 160685, true }, - { 160694, true }, - { 160706, true }, - { 160719, true }, - { 160733, true }, - { 160749, false }, - { 160764, true }, - { 160773, true }, + { 160691, true }, + { 160708, true }, + { 160717, true }, + { 160726, true }, + { 160741, true }, + { 160755, true }, + { 160765, true }, + { 160775, true }, { 160793, true }, - { 160801, true }, - { 160815, true }, - { 160826, true }, - { 160836, false }, - { 160846, true }, - { 160860, true }, - { 160872, true }, - { 160882, false }, - { 160895, true }, - { 160911, true }, - { 160933, true }, - { 160950, true }, - { 160959, true }, - { 160968, true }, - { 160983, true }, - { 160997, true }, - { 161007, true }, - { 161017, true }, - { 161035, true }, - { 161056, true }, - { 161071, true }, - { 161085, true }, - { 161105, true }, - { 161121, true }, - { 161133, false }, - { 161149, true }, - { 161164, true }, - { 161179, true }, - { 161196, true }, - { 161209, false }, - { 161228, false }, - { 161240, true }, - { 161256, true }, - { 161284, true }, - { 161316, true }, - { 161331, true }, - { 161343, true }, - { 161357, false }, - { 161370, true }, - { 161388, true }, - { 161396, true }, - { 161410, true }, - { 161424, true }, - { 161436, true }, - { 161457, true }, - { 161472, true }, - { 161487, true }, - { 161503, true }, - { 161516, false }, - { 161524, false }, - { 161536, true }, - { 161545, true }, - { 161555, true }, - { 161566, true }, - { 161578, true }, - { 161591, true }, - { 161602, true }, - { 161618, true }, - { 161628, true }, - { 161639, true }, - { 161650, true }, - { 161662, true }, - { 161672, true }, - { 161681, true }, - { 161700, true }, - { 161728, true }, - { 161744, true }, - { 161759, true }, - { 161772, true }, - { 161788, false }, - { 161801, true }, + { 160814, true }, + { 160829, true }, + { 160843, true }, + { 160863, true }, + { 160879, true }, + { 160891, false }, + { 160907, true }, + { 160922, true }, + { 160937, true }, + { 160954, true }, + { 160967, false }, + { 160986, false }, + { 160998, true }, + { 161014, true }, + { 161042, true }, + { 161074, true }, + { 161089, true }, + { 161101, true }, + { 161115, false }, + { 161128, true }, + { 161146, true }, + { 161154, true }, + { 161168, true }, + { 161182, true }, + { 161194, true }, + { 161215, true }, + { 161230, true }, + { 161245, true }, + { 161261, false }, + { 161269, false }, + { 161281, true }, + { 161290, true }, + { 161300, true }, + { 161311, true }, + { 161323, true }, + { 161336, true }, + { 161347, true }, + { 161363, true }, + { 161373, true }, + { 161384, true }, + { 161395, true }, + { 161407, true }, + { 161417, true }, + { 161426, true }, + { 161445, true }, + { 161473, true }, + { 161489, true }, + { 161504, true }, + { 161517, true }, + { 161533, false }, + { 161546, true }, + { 161560, true }, + { 161572, true }, + { 161587, true }, + { 161607, true }, + { 161626, true }, + { 161645, true }, + { 161658, true }, + { 161674, true }, + { 161687, true }, + { 161702, true }, + { 161718, true }, + { 161735, true }, + { 161751, true }, + { 161768, true }, + { 161781, true }, + { 161796, true }, { 161815, true }, - { 161827, true }, - { 161842, true }, - { 161862, true }, - { 161881, true }, - { 161900, true }, - { 161913, true }, - { 161929, true }, - { 161942, true }, + { 161828, true }, + { 161844, true }, + { 161856, true }, + { 161867, true }, + { 161880, true }, + { 161894, true }, + { 161908, true }, + { 161922, false }, + { 161938, true }, { 161957, true }, - { 161973, true }, - { 161990, true }, - { 162006, true }, - { 162023, true }, - { 162036, true }, - { 162051, true }, - { 162070, true }, - { 162083, true }, - { 162099, true }, - { 162111, true }, - { 162122, true }, - { 162135, true }, - { 162149, true }, - { 162163, true }, - { 162177, false }, - { 162193, true }, - { 162212, true }, - { 162232, true }, - { 162252, false }, - { 162268, true }, - { 162284, true }, - { 162300, true }, - { 162315, true }, - { 162330, true }, - { 162351, false }, - { 162370, true }, - { 162381, true }, - { 162397, true }, - { 162411, true }, - { 162424, true }, - { 162437, true }, - { 162453, true }, - { 162464, true }, + { 161977, true }, + { 161997, false }, + { 162013, true }, + { 162029, true }, + { 162045, true }, + { 162060, true }, + { 162075, true }, + { 162096, false }, + { 162115, true }, + { 162126, true }, + { 162142, true }, + { 162156, true }, + { 162169, true }, + { 162182, true }, + { 162198, true }, + { 162209, true }, + { 162218, true }, + { 162228, true }, + { 162239, true }, + { 162253, true }, + { 162262, true }, + { 162275, true }, + { 162294, true }, + { 162311, false }, + { 162326, true }, + { 162342, false }, + { 162354, true }, + { 162374, true }, + { 162387, true }, + { 162407, true }, + { 162428, true }, + { 162450, true }, { 162473, true }, - { 162483, true }, - { 162494, true }, - { 162508, true }, - { 162517, true }, - { 162530, true }, - { 162549, true }, - { 162566, false }, - { 162581, true }, - { 162597, false }, - { 162609, true }, - { 162629, true }, - { 162642, true }, - { 162662, true }, - { 162683, true }, - { 162705, true }, - { 162728, true }, - { 162746, true }, - { 162762, true }, - { 162775, true }, - { 162789, true }, - { 162803, true }, - { 162811, true }, - { 162829, true }, - { 162839, true }, - { 162859, true }, - { 162876, true }, - { 162887, true }, - { 162900, true }, - { 162912, true }, - { 162928, true }, - { 162941, true }, - { 162958, true }, - { 162979, true }, - { 162987, true }, - { 162997, true }, - { 163020, true }, - { 163029, true }, - { 163039, true }, - { 163051, true }, - { 163064, true }, - { 163074, true }, - { 163087, true }, - { 163108, true }, - { 163118, true }, - { 163132, true }, - { 163152, true }, - { 163165, true }, - { 163185, false }, - { 163208, true }, - { 163221, true }, - { 163232, true }, - { 163243, true }, - { 163253, true }, - { 163278, true }, - { 163288, true }, - { 163302, true }, - { 163316, false }, + { 162491, true }, + { 162507, true }, + { 162520, true }, + { 162534, true }, + { 162548, true }, + { 162556, true }, + { 162574, true }, + { 162584, true }, + { 162604, true }, + { 162621, true }, + { 162632, true }, + { 162645, true }, + { 162657, true }, + { 162673, true }, + { 162686, true }, + { 162703, true }, + { 162724, true }, + { 162732, true }, + { 162742, true }, + { 162765, true }, + { 162774, true }, + { 162784, true }, + { 162796, true }, + { 162809, true }, + { 162819, true }, + { 162832, true }, + { 162853, true }, + { 162863, true }, + { 162877, true }, + { 162897, true }, + { 162910, true }, + { 162930, false }, + { 162953, true }, + { 162966, true }, + { 162977, true }, + { 162988, true }, + { 162998, true }, + { 163023, true }, + { 163033, true }, + { 163047, true }, + { 163061, false }, + { 163076, true }, + { 163090, true }, + { 163115, true }, + { 163129, true }, + { 163141, true }, + { 163155, true }, + { 163165, false }, + { 163185, true }, + { 163199, true }, + { 163218, true }, + { 163233, true }, + { 163246, true }, + { 163261, true }, + { 163271, true }, + { 163285, true }, + { 163294, true }, + { 163309, true }, + { 163320, true }, { 163331, true }, - { 163345, true }, - { 163370, true }, - { 163384, true }, + { 163342, true }, + { 163352, true }, + { 163361, false }, + { 163381, true }, { 163396, true }, - { 163410, true }, - { 163420, false }, - { 163440, true }, - { 163454, true }, - { 163473, true }, - { 163488, true }, - { 163501, true }, - { 163516, true }, - { 163526, true }, + { 163408, true }, + { 163420, true }, + { 163439, true }, + { 163459, true }, + { 163476, true }, + { 163486, true }, + { 163500, true }, + { 163517, true }, + { 163532, true }, { 163540, true }, - { 163549, true }, - { 163564, true }, - { 163575, true }, - { 163586, true }, + { 163558, true }, + { 163579, false }, { 163597, true }, - { 163607, true }, - { 163616, false }, - { 163636, true }, - { 163651, true }, - { 163663, true }, - { 163675, true }, - { 163694, true }, + { 163609, true }, + { 163625, true }, + { 163640, true }, + { 163656, true }, + { 163667, true }, + { 163692, true }, { 163714, true }, - { 163731, true }, - { 163741, true }, - { 163755, true }, - { 163772, true }, - { 163787, true }, - { 163795, true }, - { 163813, true }, - { 163834, false }, - { 163852, true }, - { 163864, true }, - { 163880, true }, - { 163895, true }, - { 163911, true }, - { 163922, true }, - { 163947, true }, - { 163969, true }, - { 163983, true }, - { 164004, true }, - { 164018, true }, - { 164035, true }, - { 164054, true }, - { 164073, true }, - { 164098, true }, - { 164111, true }, - { 164127, true }, - { 164153, true }, - { 164174, true }, - { 164192, true }, - { 164216, true }, - { 164232, true }, - { 164257, true }, - { 164283, true }, - { 164294, true }, - { 164320, true }, - { 164342, true }, - { 164363, true }, - { 164380, true }, - { 164398, true }, - { 164408, false }, - { 164426, true }, - { 164441, false }, - { 164460, true }, + { 163728, true }, + { 163749, true }, + { 163763, true }, + { 163780, true }, + { 163799, true }, + { 163818, true }, + { 163843, true }, + { 163856, true }, + { 163872, true }, + { 163898, true }, + { 163919, true }, + { 163937, true }, + { 163961, true }, + { 163977, true }, + { 164002, true }, + { 164028, true }, + { 164039, true }, + { 164065, true }, + { 164087, true }, + { 164108, true }, + { 164125, true }, + { 164143, true }, + { 164153, false }, + { 164171, true }, + { 164186, false }, + { 164205, true }, + { 164227, true }, + { 164250, true }, + { 164269, true }, + { 164287, true }, + { 164310, true }, + { 164323, true }, + { 164339, true }, + { 164357, true }, + { 164373, true }, + { 164387, true }, + { 164405, true }, + { 164420, true }, + { 164437, true }, + { 164451, true }, + { 164465, false }, { 164482, true }, - { 164505, true }, - { 164524, true }, - { 164542, true }, + { 164500, true }, + { 164516, true }, + { 164532, true }, + { 164545, true }, { 164565, true }, - { 164578, true }, - { 164594, true }, - { 164612, true }, - { 164628, true }, - { 164642, true }, - { 164660, true }, - { 164675, true }, - { 164692, true }, - { 164706, true }, - { 164720, false }, - { 164737, true }, - { 164755, true }, - { 164771, true }, - { 164787, true }, - { 164800, true }, - { 164820, true }, - { 164838, true }, - { 164857, true }, - { 164870, true }, - { 164893, true }, - { 164908, true }, - { 164924, true }, - { 164935, true }, - { 164965, true }, - { 164981, true }, - { 164996, true }, - { 165011, true }, + { 164583, true }, + { 164602, true }, + { 164615, true }, + { 164638, true }, + { 164653, true }, + { 164669, true }, + { 164680, true }, + { 164710, true }, + { 164726, true }, + { 164741, true }, + { 164756, true }, + { 164767, true }, + { 164781, true }, + { 164803, true }, + { 164818, true }, + { 164841, true }, + { 164850, true }, + { 164872, true }, + { 164891, true }, + { 164915, true }, + { 164926, true }, + { 164943, true }, + { 164957, true }, + { 164970, true }, + { 164986, true }, + { 165005, true }, { 165022, true }, - { 165036, true }, - { 165058, true }, - { 165081, true }, - { 165090, true }, - { 165112, true }, - { 165131, true }, - { 165155, true }, - { 165166, true }, - { 165183, true }, - { 165197, true }, - { 165210, true }, - { 165226, true }, - { 165245, true }, + { 165033, true }, + { 165048, true }, + { 165067, true }, + { 165087, true }, + { 165104, false }, + { 165119, true }, + { 165137, true }, + { 165159, true }, + { 165175, true }, + { 165187, true }, + { 165199, true }, + { 165211, true }, + { 165227, true }, + { 165246, true }, { 165262, true }, - { 165273, true }, - { 165288, true }, - { 165307, true }, - { 165327, true }, - { 165344, false }, - { 165359, true }, - { 165377, true }, - { 165399, true }, - { 165415, true }, - { 165427, true }, - { 165439, true }, - { 165451, true }, + { 165281, false }, + { 165295, true }, + { 165312, true }, + { 165333, true }, + { 165353, true }, + { 165367, true }, + { 165385, true }, + { 165401, true }, + { 165411, true }, + { 165422, true }, + { 165434, true }, + { 165453, true }, { 165467, true }, - { 165486, true }, - { 165502, true }, - { 165521, false }, - { 165535, true }, - { 165552, true }, - { 165573, true }, - { 165593, true }, - { 165607, true }, - { 165625, true }, + { 165480, true }, + { 165496, true }, + { 165507, true }, + { 165528, true }, + { 165556, true }, + { 165572, true }, + { 165585, true }, + { 165608, true }, + { 165626, true }, { 165641, true }, - { 165651, true }, - { 165662, true }, - { 165674, true }, - { 165693, true }, - { 165707, true }, - { 165720, true }, - { 165736, true }, - { 165747, true }, - { 165768, true }, - { 165796, true }, - { 165812, true }, - { 165825, true }, - { 165848, true }, - { 165866, true }, - { 165881, true }, - { 165906, false }, - { 165922, true }, - { 165931, true }, - { 165941, true }, - { 165953, true }, - { 165972, true }, - { 165989, true }, - { 166006, true }, - { 166022, false }, - { 166040, false }, - { 166060, true }, - { 166077, true }, - { 166090, true }, - { 166110, true }, - { 166134, true }, - { 166152, true }, - { 166173, true }, - { 166188, true }, - { 166203, true }, - { 166215, true }, - { 166240, true }, + { 165666, false }, + { 165682, true }, + { 165691, true }, + { 165701, true }, + { 165713, true }, + { 165732, true }, + { 165749, true }, + { 165766, true }, + { 165782, false }, + { 165800, false }, + { 165820, true }, + { 165837, true }, + { 165850, true }, + { 165870, true }, + { 165894, true }, + { 165912, true }, + { 165933, true }, + { 165948, true }, + { 165963, true }, + { 165975, true }, + { 166000, true }, + { 166013, true }, + { 166035, true }, + { 166045, true }, + { 166062, true }, + { 166075, true }, + { 166089, true }, + { 166122, true }, + { 166137, true }, + { 166151, true }, + { 166160, true }, + { 166169, true }, + { 166179, true }, + { 166190, false }, + { 166204, true }, + { 166213, true }, + { 166224, true }, + { 166235, true }, { 166253, true }, - { 166275, true }, - { 166285, true }, - { 166302, true }, - { 166315, true }, - { 166329, true }, - { 166362, true }, - { 166377, true }, - { 166391, true }, - { 166400, true }, - { 166409, true }, - { 166419, true }, - { 166430, false }, - { 166444, true }, - { 166453, true }, - { 166464, true }, - { 166475, true }, - { 166493, true }, - { 166506, true }, - { 166521, true }, - { 166534, true }, - { 166553, true }, - { 166573, true }, - { 166590, true }, - { 166597, true }, - { 166608, true }, - { 166624, true }, + { 166266, true }, + { 166281, true }, + { 166294, true }, + { 166313, true }, + { 166333, true }, + { 166350, true }, + { 166357, true }, + { 166368, true }, + { 166384, true }, + { 166402, true }, + { 166423, true }, + { 166435, true }, + { 166465, true }, + { 166478, true }, + { 166488, true }, + { 166500, true }, + { 166514, true }, + { 166528, true }, + { 166541, true }, + { 166552, true }, + { 166566, true }, + { 166585, true }, + { 166604, true }, + { 166619, true }, + { 166631, true }, { 166642, true }, - { 166663, true }, - { 166675, true }, - { 166705, true }, - { 166718, true }, - { 166728, true }, - { 166740, true }, - { 166754, true }, - { 166768, true }, - { 166781, true }, - { 166792, true }, - { 166806, true }, - { 166825, true }, - { 166844, true }, - { 166859, true }, + { 166657, true }, + { 166669, true }, + { 166685, true }, + { 166701, true }, + { 166710, true }, + { 166724, true }, + { 166735, false }, + { 166750, true }, + { 166764, true }, + { 166780, true }, + { 166793, true }, + { 166813, true }, + { 166826, false }, + { 166846, true }, + { 166860, true }, { 166871, true }, - { 166882, true }, - { 166897, true }, - { 166909, true }, - { 166925, true }, - { 166941, true }, - { 166950, true }, + { 166888, true }, + { 166902, true }, + { 166914, true }, + { 166928, true }, + { 166940, true }, + { 166952, true }, { 166964, true }, - { 166975, false }, - { 166990, true }, + { 166974, true }, + { 166987, true }, { 167004, true }, - { 167020, true }, - { 167033, true }, - { 167053, true }, - { 167066, false }, - { 167086, true }, - { 167100, true }, - { 167111, true }, - { 167128, true }, - { 167142, true }, - { 167154, true }, - { 167168, true }, - { 167180, true }, - { 167192, true }, - { 167204, true }, - { 167214, true }, + { 167031, true }, + { 167044, true }, + { 167052, true }, + { 167064, true }, + { 167078, true }, + { 167091, true }, + { 167118, false }, + { 167129, true }, + { 167147, true }, + { 167155, true }, + { 167164, true }, + { 167173, true }, + { 167181, true }, + { 167194, true }, + { 167203, true }, + { 167215, true }, { 167227, true }, - { 167244, true }, - { 167271, true }, - { 167284, true }, - { 167292, true }, - { 167304, true }, - { 167318, true }, - { 167331, true }, - { 167358, false }, - { 167369, true }, - { 167387, true }, - { 167395, true }, - { 167404, true }, - { 167412, true }, - { 167425, true }, - { 167434, true }, - { 167446, true }, - { 167458, true }, - { 167465, true }, - { 167481, true }, - { 167498, true }, - { 167505, true }, - { 167519, true }, - { 167536, true }, - { 167548, true }, - { 167556, true }, - { 167563, true }, - { 167583, true }, - { 167599, true }, - { 167615, true }, - { 167634, true }, - { 167652, true }, - { 167667, true }, - { 167685, true }, - { 167695, true }, - { 167707, true }, - { 167726, true }, - { 167741, true }, - { 167756, true }, - { 167768, true }, - { 167776, false }, - { 167801, true }, - { 167811, true }, - { 167826, true }, - { 167838, true }, - { 167852, true }, - { 167861, false }, + { 167234, true }, + { 167250, true }, + { 167267, true }, + { 167274, true }, + { 167288, true }, + { 167305, true }, + { 167317, true }, + { 167325, true }, + { 167332, true }, + { 167352, true }, + { 167368, true }, + { 167384, true }, + { 167403, true }, + { 167421, true }, + { 167436, true }, + { 167454, true }, + { 167464, true }, + { 167476, true }, + { 167495, true }, + { 167510, true }, + { 167525, true }, + { 167537, true }, + { 167545, false }, + { 167570, true }, + { 167580, true }, + { 167595, true }, + { 167607, true }, + { 167621, true }, + { 167630, false }, + { 167642, true }, + { 167655, true }, + { 167688, true }, + { 167711, true }, + { 167724, true }, + { 167735, true }, + { 167749, true }, + { 167769, true }, + { 167782, true }, + { 167792, true }, + { 167810, true }, + { 167824, true }, + { 167836, true }, + { 167851, true }, { 167873, true }, - { 167886, true }, - { 167919, true }, - { 167942, true }, + { 167883, true }, + { 167895, true }, + { 167911, true }, + { 167923, true }, + { 167933, true }, + { 167946, true }, { 167955, true }, - { 167966, true }, - { 167980, true }, - { 168000, true }, - { 168013, true }, - { 168023, true }, - { 168041, true }, - { 168055, true }, - { 168067, true }, - { 168082, true }, - { 168104, true }, - { 168114, true }, - { 168126, true }, - { 168142, true }, - { 168154, true }, - { 168164, true }, - { 168177, true }, - { 168186, false }, - { 168194, true }, - { 168205, false }, - { 168221, true }, - { 168232, true }, - { 168245, true }, - { 168257, false }, - { 168271, true }, - { 168284, true }, - { 168295, true }, - { 168305, true }, - { 168319, true }, - { 168338, true }, - { 168349, true }, - { 168363, true }, - { 168374, true }, - { 168385, true }, - { 168396, true }, - { 168407, true }, - { 168418, true }, - { 168432, true }, - { 168444, true }, - { 168459, true }, - { 168473, true }, - { 168488, true }, - { 168501, true }, - { 168517, true }, + { 167968, false }, + { 167976, true }, + { 167987, false }, + { 168003, true }, + { 168014, true }, + { 168027, true }, + { 168039, false }, + { 168053, true }, + { 168066, true }, + { 168077, true }, + { 168087, true }, + { 168101, true }, + { 168120, true }, + { 168131, true }, + { 168145, true }, + { 168156, true }, + { 168167, true }, + { 168178, true }, + { 168189, true }, + { 168200, true }, + { 168214, true }, + { 168226, true }, + { 168241, true }, + { 168255, true }, + { 168270, true }, + { 168283, true }, + { 168299, true }, + { 168308, true }, + { 168317, true }, + { 168331, true }, + { 168342, true }, + { 168353, false }, + { 168369, true }, + { 168380, true }, + { 168391, true }, + { 168407, false }, + { 168421, true }, + { 168430, true }, + { 168440, true }, + { 168454, true }, + { 168464, true }, + { 168477, true }, + { 168491, true }, + { 168505, true }, { 168526, true }, - { 168535, true }, - { 168549, true }, - { 168560, true }, - { 168571, false }, - { 168587, true }, + { 168540, true }, + { 168552, true }, + { 168567, true }, + { 168586, true }, { 168598, true }, - { 168609, true }, - { 168625, false }, - { 168639, true }, - { 168648, true }, - { 168658, true }, - { 168672, true }, - { 168682, true }, - { 168695, true }, - { 168709, true }, - { 168723, true }, - { 168744, true }, - { 168758, true }, - { 168770, true }, - { 168785, true }, + { 168617, true }, + { 168626, false }, + { 168641, false }, + { 168653, true }, + { 168679, true }, + { 168690, true }, + { 168711, true }, + { 168729, true }, + { 168746, true }, + { 168761, true }, + { 168781, true }, + { 168792, true }, { 168804, true }, - { 168816, true }, + { 168817, true }, { 168835, true }, - { 168844, false }, - { 168859, false }, - { 168871, true }, - { 168897, true }, - { 168908, true }, - { 168929, true }, - { 168947, true }, - { 168964, true }, - { 168979, true }, - { 168999, true }, - { 169010, true }, - { 169022, true }, + { 168855, true }, + { 168874, true }, + { 168893, true }, + { 168914, true }, + { 168923, true }, + { 168947, false }, + { 168966, true }, + { 168980, true }, + { 168998, true }, + { 169015, true }, { 169035, true }, - { 169053, true }, - { 169073, true }, - { 169092, true }, - { 169111, true }, - { 169132, true }, - { 169141, true }, - { 169165, false }, - { 169184, true }, - { 169198, true }, - { 169216, true }, - { 169233, true }, - { 169253, true }, + { 169049, true }, + { 169059, true }, + { 169072, true }, + { 169093, true }, + { 169105, true }, + { 169116, true }, + { 169131, true }, + { 169152, true }, + { 169171, true }, + { 169200, true }, + { 169207, true }, + { 169219, true }, + { 169234, true }, + { 169250, true }, { 169267, true }, - { 169277, true }, - { 169290, true }, + { 169289, true }, + { 169299, true }, { 169311, true }, { 169323, true }, - { 169334, true }, - { 169349, true }, - { 169370, true }, - { 169389, true }, - { 169418, true }, - { 169425, true }, - { 169437, true }, - { 169452, true }, - { 169468, true }, - { 169485, true }, - { 169507, true }, + { 169340, false }, + { 169353, false }, + { 169373, true }, + { 169383, true }, + { 169395, true }, + { 169412, true }, + { 169428, true }, + { 169443, true }, + { 169458, true }, + { 169471, true }, + { 169487, true }, + { 169505, true }, { 169517, true }, - { 169529, true }, - { 169541, true }, - { 169558, false }, - { 169571, false }, + { 169531, true }, + { 169542, true }, + { 169561, true }, + { 169580, true }, { 169591, true }, - { 169601, true }, - { 169613, true }, - { 169630, true }, - { 169646, true }, - { 169661, true }, - { 169676, true }, - { 169689, true }, - { 169705, true }, - { 169723, true }, - { 169735, true }, - { 169749, true }, - { 169760, true }, - { 169779, true }, - { 169798, true }, - { 169809, true }, - { 169821, true }, - { 169834, true }, - { 169847, true }, - { 169860, true }, - { 169873, true }, - { 169886, true }, - { 169901, true }, - { 169911, true }, - { 169924, true }, + { 169603, true }, + { 169616, true }, + { 169629, true }, + { 169642, true }, + { 169655, true }, + { 169668, true }, + { 169683, true }, + { 169693, true }, + { 169706, true }, + { 169725, true }, + { 169738, true }, + { 169756, true }, + { 169778, true }, + { 169791, true }, + { 169808, true }, + { 169824, true }, + { 169852, true }, + { 169877, true }, + { 169909, true }, + { 169928, true }, { 169943, true }, - { 169956, true }, - { 169974, true }, - { 169996, true }, + { 169963, true }, + { 169976, true }, + { 169992, true }, { 170009, true }, { 170026, true }, - { 170042, true }, - { 170070, true }, - { 170095, true }, - { 170127, true }, - { 170146, true }, - { 170161, true }, - { 170181, true }, - { 170194, true }, + { 170038, true }, + { 170051, true }, + { 170064, true }, + { 170086, true }, + { 170104, true }, + { 170118, true }, + { 170139, true }, + { 170151, true }, + { 170166, true }, + { 170183, true }, + { 170195, true }, { 170210, true }, - { 170227, true }, - { 170244, true }, - { 170256, true }, - { 170269, true }, - { 170282, true }, - { 170304, true }, - { 170322, true }, - { 170336, true }, - { 170357, true }, - { 170369, true }, - { 170384, true }, - { 170401, true }, - { 170413, true }, - { 170428, true }, - { 170439, true }, + { 170221, true }, + { 170235, true }, + { 170254, true }, + { 170271, true }, + { 170283, true }, + { 170303, true }, + { 170317, true }, + { 170330, true }, + { 170349, true }, + { 170363, true }, + { 170377, true }, + { 170387, true }, + { 170399, true }, + { 170417, false }, + { 170425, true }, + { 170441, true }, { 170453, true }, - { 170472, true }, - { 170489, true }, - { 170501, true }, - { 170521, true }, - { 170535, true }, - { 170548, true }, - { 170567, true }, - { 170581, true }, - { 170595, true }, - { 170605, true }, - { 170617, true }, - { 170635, false }, - { 170643, true }, - { 170659, true }, - { 170671, true }, - { 170683, true }, - { 170694, true }, - { 170706, true }, - { 170715, true }, - { 170729, true }, - { 170743, true }, - { 170757, true }, - { 170768, true }, - { 170776, true }, - { 170792, true }, - { 170803, true }, - { 170818, true }, - { 170836, true }, - { 170856, true }, - { 170869, true }, + { 170465, true }, + { 170476, true }, + { 170488, true }, + { 170497, true }, + { 170511, true }, + { 170525, true }, + { 170539, true }, + { 170550, true }, + { 170558, true }, + { 170574, true }, + { 170585, true }, + { 170600, true }, + { 170618, true }, + { 170638, true }, + { 170651, true }, + { 170672, true }, + { 170683, false }, + { 170701, false }, + { 170722, true }, + { 170731, true }, + { 170754, true }, + { 170777, true }, + { 170794, true }, + { 170806, true }, + { 170827, true }, + { 170844, true }, + { 170864, true }, + { 170877, true }, { 170890, true }, - { 170901, false }, - { 170919, false }, - { 170940, true }, - { 170949, true }, - { 170972, true }, + { 170904, true }, + { 170926, true }, + { 170941, true }, + { 170958, true }, + { 170975, true }, { 170995, true }, - { 171012, true }, - { 171024, true }, + { 171020, true }, { 171045, true }, - { 171062, true }, - { 171082, true }, - { 171095, true }, - { 171108, true }, - { 171122, true }, - { 171144, true }, - { 171159, true }, - { 171176, true }, - { 171193, true }, - { 171213, true }, - { 171238, true }, - { 171263, true }, - { 171276, true }, - { 171292, true }, + { 171058, true }, + { 171074, true }, + { 171085, true }, + { 171100, true }, + { 171109, true }, + { 171120, true }, + { 171132, true }, + { 171146, true }, + { 171155, true }, + { 171177, true }, + { 171189, true }, + { 171197, true }, + { 171211, true }, + { 171219, true }, + { 171229, true }, + { 171236, true }, + { 171246, true }, + { 171253, true }, + { 171270, true }, + { 171282, true }, + { 171293, true }, { 171303, true }, - { 171318, true }, - { 171327, true }, - { 171338, true }, - { 171350, true }, - { 171364, true }, - { 171373, true }, - { 171395, true }, - { 171407, true }, + { 171316, true }, + { 171326, true }, + { 171337, true }, + { 171348, true }, + { 171356, true }, + { 171368, true }, + { 171379, true }, + { 171393, true }, + { 171402, true }, { 171415, true }, - { 171429, true }, - { 171437, true }, - { 171447, true }, - { 171454, true }, - { 171464, true }, - { 171471, true }, - { 171488, true }, - { 171500, true }, - { 171511, true }, - { 171521, true }, - { 171534, true }, - { 171544, true }, - { 171555, true }, - { 171566, true }, - { 171574, true }, - { 171586, true }, - { 171597, true }, - { 171611, true }, - { 171620, true }, - { 171633, true }, - { 171659, true }, - { 171675, true }, - { 171691, true }, - { 171704, true }, - { 171716, true }, - { 171728, true }, - { 171749, true }, - { 171759, true }, - { 171781, true }, - { 171799, true }, - { 171812, true }, - { 171823, false }, - { 171834, true }, - { 171844, true }, + { 171441, true }, + { 171457, true }, + { 171473, true }, + { 171486, true }, + { 171498, true }, + { 171510, true }, + { 171531, true }, + { 171541, true }, + { 171563, true }, + { 171581, true }, + { 171594, true }, + { 171605, false }, + { 171616, true }, + { 171626, true }, + { 171638, true }, + { 171647, true }, + { 171661, true }, + { 171672, false }, + { 171685, false }, + { 171705, true }, + { 171715, true }, + { 171723, false }, + { 171732, true }, + { 171745, true }, + { 171791, true }, + { 171804, true }, + { 171817, true }, + { 171840, true }, { 171856, true }, - { 171865, true }, - { 171879, true }, - { 171890, false }, - { 171903, false }, - { 171923, true }, - { 171933, true }, - { 171941, false }, - { 171950, true }, - { 171963, true }, - { 172009, true }, - { 172022, true }, - { 172035, true }, - { 172058, true }, - { 172074, true }, - { 172087, true }, - { 172103, true }, - { 172113, false }, - { 172125, true }, + { 171869, true }, + { 171885, true }, + { 171895, false }, + { 171907, true }, + { 171924, true }, + { 171942, true }, + { 171953, true }, + { 171961, true }, + { 171971, true }, + { 171978, true }, + { 171987, true }, + { 171994, true }, + { 172003, true }, + { 172019, true }, + { 172038, true }, + { 172051, true }, + { 172065, true }, + { 172077, true }, + { 172091, true }, + { 172106, true }, + { 172118, true }, + { 172131, true }, { 172142, true }, - { 172160, true }, - { 172171, true }, - { 172179, true }, + { 172163, true }, + { 172173, true }, + { 172182, true }, { 172189, true }, - { 172196, true }, - { 172205, true }, - { 172212, true }, + { 172197, true }, { 172221, true }, - { 172237, true }, - { 172256, true }, - { 172269, true }, - { 172283, true }, - { 172295, true }, - { 172309, true }, - { 172324, true }, - { 172336, true }, - { 172349, true }, - { 172360, true }, - { 172381, true }, - { 172391, true }, + { 172235, true }, + { 172245, true }, + { 172262, false }, + { 172277, true }, + { 172291, true }, + { 172303, true }, + { 172317, true }, + { 172334, true }, + { 172345, true }, + { 172357, true }, + { 172369, true }, + { 172379, true }, + { 172390, true }, { 172400, true }, - { 172407, true }, + { 172419, true }, { 172431, true }, - { 172445, true }, - { 172455, true }, - { 172472, false }, - { 172487, true }, - { 172501, true }, - { 172513, true }, - { 172527, true }, - { 172544, true }, - { 172555, true }, - { 172567, true }, - { 172579, true }, - { 172589, true }, - { 172600, true }, - { 172610, true }, - { 172629, true }, - { 172641, true }, - { 172657, true }, - { 172672, true }, - { 172695, true }, - { 172702, true }, - { 172715, true }, - { 172726, true }, - { 172736, true }, - { 172743, true }, + { 172447, true }, + { 172462, true }, + { 172485, true }, + { 172492, true }, + { 172505, true }, + { 172516, true }, + { 172526, true }, + { 172533, true }, + { 172545, true }, + { 172556, true }, + { 172566, false }, + { 172586, true }, + { 172609, true }, + { 172633, true }, + { 172654, true }, + { 172673, true }, + { 172683, true }, + { 172696, true }, + { 172710, true }, + { 172723, true }, + { 172734, true }, + { 172745, true }, { 172755, true }, - { 172766, true }, - { 172776, false }, - { 172796, true }, - { 172819, true }, - { 172843, true }, - { 172864, true }, - { 172883, true }, - { 172893, true }, - { 172906, true }, - { 172920, true }, - { 172933, true }, - { 172944, true }, + { 172765, true }, + { 172776, true }, + { 172791, true }, + { 172805, true }, + { 172816, true }, + { 172830, true }, + { 172844, true }, + { 172859, true }, + { 172872, true }, + { 172895, true }, + { 172910, true }, + { 172926, true }, + { 172941, true }, { 172955, true }, - { 172965, true }, - { 172975, true }, - { 172986, true }, - { 173001, true }, - { 173015, true }, - { 173026, true }, - { 173040, true }, - { 173060, true }, + { 172971, true }, + { 172985, true }, + { 172999, true }, + { 173017, true }, + { 173035, true }, + { 173055, true }, { 173074, true }, - { 173089, true }, - { 173102, true }, - { 173125, true }, - { 173140, true }, - { 173156, true }, - { 173171, true }, - { 173185, true }, - { 173201, true }, + { 173090, true }, + { 173105, true }, + { 173119, true }, + { 173139, true }, + { 173155, true }, + { 173170, true }, + { 173184, true }, { 173215, true }, - { 173229, true }, - { 173247, true }, - { 173265, true }, - { 173285, true }, + { 173231, true }, + { 173242, true }, + { 173252, false }, + { 173276, true }, + { 173290, true }, { 173304, true }, - { 173320, true }, - { 173335, true }, - { 173349, true }, - { 173369, true }, - { 173385, true }, - { 173400, true }, - { 173414, true }, - { 173445, true }, - { 173461, true }, + { 173314, true }, + { 173331, true }, + { 173344, true }, + { 173357, true }, + { 173374, true }, + { 173391, false }, + { 173408, true }, + { 173421, true }, + { 173438, true }, + { 173459, true }, { 173472, true }, - { 173482, false }, - { 173506, true }, - { 173520, true }, - { 173534, true }, - { 173544, true }, - { 173561, true }, - { 173574, true }, - { 173587, true }, + { 173485, true }, + { 173505, true }, + { 173523, true }, + { 173533, true }, + { 173546, true }, + { 173565, true }, + { 173579, true }, + { 173593, false }, { 173604, true }, - { 173621, false }, - { 173638, true }, - { 173651, true }, - { 173668, true }, - { 173689, true }, - { 173702, true }, - { 173715, true }, - { 173735, true }, - { 173753, true }, - { 173763, true }, - { 173776, true }, - { 173795, true }, - { 173809, true }, - { 173823, false }, - { 173834, true }, - { 173851, true }, - { 173864, true }, - { 173887, true }, - { 173915, true }, - { 173927, true }, - { 173941, true }, - { 173954, true }, - { 173966, true }, - { 173982, true }, - { 173995, true }, - { 174011, true }, - { 174021, true }, - { 174034, true }, - { 174049, true }, - { 174057, true }, - { 174072, true }, - { 174089, true }, - { 174096, true }, - { 174106, true }, - { 174116, true }, - { 174137, true }, - { 174153, true }, - { 174172, true }, - { 174185, true }, + { 173621, true }, + { 173634, true }, + { 173657, true }, + { 173685, true }, + { 173697, true }, + { 173711, true }, + { 173724, true }, + { 173736, true }, + { 173752, true }, + { 173765, true }, + { 173781, true }, + { 173791, true }, + { 173804, true }, + { 173819, true }, + { 173827, true }, + { 173842, true }, + { 173859, true }, + { 173866, true }, + { 173876, true }, + { 173886, true }, + { 173907, true }, + { 173923, true }, + { 173942, true }, + { 173955, true }, + { 173975, true }, + { 173990, true }, + { 174009, false }, + { 174017, true }, + { 174024, true }, + { 174039, true }, + { 174047, true }, + { 174058, true }, + { 174069, true }, + { 174084, false }, + { 174104, true }, + { 174119, true }, + { 174134, true }, + { 174144, true }, + { 174156, true }, + { 174180, true }, + { 174193, true }, { 174205, true }, - { 174220, true }, - { 174239, false }, - { 174247, true }, - { 174254, true }, - { 174269, true }, - { 174277, true }, - { 174288, true }, - { 174299, true }, - { 174314, false }, - { 174334, true }, - { 174349, true }, - { 174364, true }, - { 174374, true }, - { 174386, true }, - { 174410, true }, - { 174423, true }, + { 174218, true }, + { 174232, true }, + { 174248, true }, + { 174267, true }, + { 174287, true }, + { 174298, true }, + { 174309, true }, + { 174317, true }, + { 174330, true }, + { 174344, true }, + { 174354, true }, + { 174372, true }, + { 174399, true }, + { 174412, false }, { 174435, true }, - { 174448, true }, - { 174462, true }, - { 174478, true }, - { 174497, true }, - { 174517, true }, - { 174528, true }, - { 174539, true }, - { 174547, true }, - { 174560, true }, - { 174574, true }, - { 174584, true }, - { 174602, true }, - { 174629, true }, - { 174642, false }, + { 174457, true }, + { 174470, true }, + { 174485, true }, + { 174492, true }, + { 174499, true }, + { 174510, true }, + { 174526, true }, + { 174538, true }, + { 174551, true }, + { 174563, true }, + { 174573, true }, + { 174590, true }, + { 174605, true }, + { 174614, true }, + { 174625, true }, + { 174643, true }, + { 174655, true }, { 174665, true }, - { 174687, true }, - { 174700, true }, - { 174715, true }, + { 174677, true }, + { 174690, true }, + { 174705, true }, { 174722, true }, - { 174729, true }, - { 174740, true }, - { 174756, true }, - { 174768, true }, - { 174781, true }, - { 174793, true }, - { 174803, true }, - { 174820, true }, - { 174835, true }, - { 174844, true }, - { 174855, true }, - { 174873, true }, - { 174885, true }, - { 174895, true }, - { 174907, true }, - { 174920, true }, - { 174935, true }, - { 174952, true }, - { 174962, true }, - { 174981, true }, - { 175000, true }, - { 175018, true }, - { 175030, true }, - { 175049, false }, - { 175064, true }, - { 175078, false }, - { 175088, false }, - { 175098, true }, - { 175104, true }, - { 175113, true }, - { 175132, true }, - { 175146, true }, - { 175164, true }, - { 175176, true }, - { 175186, true }, - { 175210, true }, - { 175233, true }, - { 175246, true }, - { 175262, true }, - { 175274, true }, - { 175288, false }, + { 174732, true }, + { 174751, true }, + { 174770, true }, + { 174788, true }, + { 174800, true }, + { 174819, false }, + { 174834, true }, + { 174848, false }, + { 174858, false }, + { 174868, true }, + { 174874, true }, + { 174883, true }, + { 174902, true }, + { 174916, true }, + { 174934, true }, + { 174946, true }, + { 174956, true }, + { 174980, true }, + { 175003, true }, + { 175016, true }, + { 175032, true }, + { 175044, true }, + { 175058, false }, + { 175071, true }, + { 175090, true }, + { 175100, true }, + { 175122, true }, + { 175135, true }, + { 175144, true }, + { 175155, true }, + { 175168, true }, + { 175181, true }, + { 175192, true }, + { 175206, true }, + { 175221, true }, + { 175236, true }, + { 175259, false }, + { 175272, false }, + { 175286, true }, { 175301, true }, - { 175320, true }, - { 175330, true }, - { 175352, true }, - { 175365, true }, - { 175374, true }, - { 175385, true }, - { 175398, true }, - { 175411, true }, - { 175422, true }, - { 175436, true }, - { 175451, true }, - { 175466, true }, - { 175489, false }, - { 175502, false }, - { 175516, true }, - { 175531, true }, + { 175313, true }, + { 175323, true }, + { 175337, true }, + { 175350, false }, + { 175364, true }, + { 175376, true }, + { 175388, true }, + { 175404, true }, + { 175430, true }, + { 175448, false }, + { 175461, true }, + { 175471, true }, + { 175481, true }, + { 175492, true }, + { 175507, true }, + { 175519, true }, + { 175535, true }, { 175543, true }, { 175553, true }, - { 175567, true }, - { 175580, false }, - { 175594, true }, - { 175606, true }, - { 175618, true }, - { 175634, true }, - { 175660, true }, - { 175678, false }, - { 175691, true }, - { 175701, true }, - { 175711, true }, + { 175563, true }, + { 175573, true }, + { 175584, true }, + { 175604, false }, + { 175625, true }, + { 175638, true }, + { 175652, true }, + { 175665, true }, + { 175681, true }, + { 175692, false }, + { 175712, true }, { 175722, true }, - { 175737, true }, + { 175732, true }, { 175749, true }, { 175765, true }, - { 175773, true }, - { 175783, true }, - { 175793, true }, - { 175803, true }, - { 175814, true }, - { 175834, false }, - { 175855, true }, - { 175868, true }, - { 175882, true }, - { 175895, true }, - { 175911, true }, - { 175922, false }, - { 175942, true }, - { 175952, true }, - { 175962, true }, - { 175979, true }, - { 175995, true }, - { 176006, true }, - { 176036, true }, - { 176062, true }, + { 175776, true }, + { 175806, true }, + { 175832, true }, + { 175840, true }, + { 175859, true }, + { 175873, true }, + { 175892, true }, + { 175913, true }, + { 175923, true }, + { 175938, true }, + { 175954, true }, + { 175971, true }, + { 175982, true }, + { 175999, true }, + { 176015, true }, + { 176035, true }, + { 176057, true }, { 176070, true }, - { 176089, true }, - { 176103, true }, - { 176122, true }, - { 176143, true }, - { 176153, true }, - { 176168, true }, + { 176080, true }, + { 176102, true }, + { 176123, true }, + { 176136, true }, + { 176160, true }, + { 176172, true }, { 176184, true }, - { 176201, true }, - { 176212, true }, + { 176194, true }, + { 176212, false }, { 176229, true }, - { 176245, true }, - { 176265, true }, - { 176287, true }, - { 176300, true }, - { 176310, true }, - { 176332, true }, - { 176353, true }, - { 176366, true }, - { 176390, true }, + { 176261, true }, + { 176272, true }, + { 176282, true }, + { 176295, true }, + { 176308, true }, + { 176319, true }, + { 176330, true }, + { 176340, true }, + { 176347, true }, + { 176360, false }, + { 176372, true }, + { 176392, true }, { 176402, true }, - { 176414, true }, - { 176424, true }, - { 176442, false }, - { 176459, true }, - { 176491, true }, - { 176502, true }, - { 176512, true }, - { 176525, true }, - { 176538, true }, - { 176549, true }, - { 176560, true }, - { 176570, true }, - { 176577, true }, - { 176590, false }, - { 176602, true }, - { 176622, true }, - { 176632, true }, - { 176653, true }, - { 176670, true }, - { 176687, true }, - { 176705, true }, - { 176723, false }, - { 176741, false }, - { 176759, false }, - { 176776, true }, - { 176798, true }, - { 176811, true }, - { 176824, false }, - { 176839, false }, - { 176849, false }, - { 176863, true }, - { 176878, true }, - { 176890, true }, + { 176423, true }, + { 176440, true }, + { 176457, true }, + { 176475, true }, + { 176493, false }, + { 176511, false }, + { 176529, false }, + { 176546, true }, + { 176568, true }, + { 176581, true }, + { 176594, false }, + { 176609, false }, + { 176619, false }, + { 176633, true }, + { 176648, true }, + { 176660, true }, + { 176678, true }, + { 176693, true }, + { 176711, true }, + { 176723, true }, + { 176739, true }, + { 176749, true }, + { 176759, true }, + { 176787, true }, + { 176802, true }, + { 176813, true }, + { 176823, false }, + { 176841, true }, + { 176856, true }, + { 176868, true }, + { 176881, true }, + { 176898, true }, { 176908, true }, - { 176923, true }, - { 176941, true }, - { 176957, true }, + { 176919, false }, + { 176934, true }, + { 176952, true }, { 176967, true }, - { 176977, true }, - { 177005, true }, - { 177020, true }, - { 177031, true }, - { 177041, false }, - { 177059, true }, - { 177074, true }, - { 177086, true }, - { 177099, true }, - { 177116, true }, - { 177126, true }, - { 177137, false }, - { 177152, true }, - { 177170, true }, - { 177185, true }, - { 177203, true }, - { 177226, true }, - { 177240, true }, - { 177256, true }, - { 177274, true }, - { 177307, false }, - { 177330, true }, - { 177350, true }, - { 177367, true }, - { 177385, true }, - { 177398, true }, - { 177411, true }, - { 177428, true }, - { 177439, true }, - { 177461, true }, - { 177479, false }, - { 177493, true }, + { 176985, true }, + { 177008, true }, + { 177022, true }, + { 177038, true }, + { 177056, true }, + { 177089, false }, + { 177112, true }, + { 177132, true }, + { 177149, true }, + { 177167, true }, + { 177180, true }, + { 177193, true }, + { 177210, true }, + { 177221, true }, + { 177243, true }, + { 177261, false }, + { 177275, true }, + { 177294, true }, + { 177308, true }, + { 177329, true }, + { 177347, true }, + { 177361, true }, + { 177370, true }, + { 177383, true }, + { 177401, true }, + { 177413, true }, + { 177429, true }, + { 177444, true }, + { 177457, true }, + { 177469, true }, + { 177481, true }, + { 177492, true }, + { 177503, true }, { 177512, true }, - { 177526, true }, - { 177547, true }, - { 177565, true }, - { 177579, true }, - { 177588, true }, + { 177525, true }, + { 177539, true }, + { 177550, true }, + { 177561, true }, + { 177574, true }, + { 177588, false }, { 177601, true }, - { 177619, true }, - { 177631, true }, - { 177647, true }, - { 177662, true }, - { 177675, true }, - { 177687, true }, - { 177699, true }, - { 177710, true }, - { 177721, true }, - { 177730, true }, - { 177743, true }, - { 177757, true }, - { 177768, true }, - { 177779, true }, - { 177792, true }, - { 177806, false }, - { 177819, true }, - { 177828, true }, + { 177610, true }, + { 177620, true }, + { 177633, true }, + { 177642, true }, + { 177652, true }, + { 177663, true }, + { 177673, true }, + { 177681, false }, + { 177695, false }, + { 177715, true }, + { 177725, true }, + { 177739, true }, + { 177749, true }, + { 177760, true }, + { 177772, true }, + { 177784, true }, + { 177794, true }, + { 177803, true }, + { 177815, true }, + { 177826, true }, { 177838, true }, - { 177851, true }, - { 177860, true }, - { 177870, true }, - { 177881, true }, - { 177891, true }, - { 177899, false }, - { 177913, false }, - { 177933, true }, - { 177943, true }, - { 177957, true }, - { 177967, true }, - { 177978, true }, - { 177990, true }, + { 177854, true }, + { 177869, true }, + { 177879, true }, + { 177894, true }, + { 177909, true }, + { 177921, true }, + { 177928, true }, + { 177939, true }, + { 177949, true }, + { 177964, true }, + { 177975, true }, + { 177988, true }, { 178002, true }, - { 178012, true }, - { 178021, true }, - { 178033, true }, - { 178044, true }, - { 178056, true }, - { 178072, true }, - { 178087, true }, - { 178097, true }, - { 178112, true }, - { 178127, true }, - { 178139, true }, - { 178146, true }, - { 178157, true }, - { 178167, true }, - { 178182, true }, - { 178193, true }, + { 178016, true }, + { 178027, false }, + { 178042, true }, + { 178051, true }, + { 178061, true }, + { 178068, true }, + { 178079, true }, + { 178091, true }, + { 178113, true }, + { 178136, false }, + { 178147, true }, + { 178160, true }, + { 178170, true }, + { 178197, true }, { 178206, true }, - { 178220, true }, - { 178234, true }, - { 178245, false }, - { 178260, true }, - { 178269, true }, - { 178276, true }, - { 178287, true }, - { 178299, true }, - { 178321, true }, - { 178344, false }, - { 178355, true }, - { 178368, true }, - { 178378, true }, - { 178405, true }, - { 178414, true }, - { 178423, true }, - { 178440, true }, - { 178452, true }, - { 178465, true }, - { 178492, true }, - { 178499, true }, - { 178510, true }, - { 178527, true }, - { 178543, true }, - { 178554, true }, - { 178567, true }, - { 178591, true }, + { 178215, true }, + { 178232, true }, + { 178244, true }, + { 178257, true }, + { 178284, true }, + { 178291, true }, + { 178302, true }, + { 178319, true }, + { 178335, true }, + { 178346, true }, + { 178359, true }, + { 178383, true }, + { 178390, true }, + { 178400, true }, + { 178407, true }, + { 178427, true }, + { 178439, true }, + { 178460, true }, + { 178471, true }, + { 178483, true }, + { 178493, true }, + { 178502, true }, + { 178511, true }, + { 178530, true }, + { 178550, true }, + { 178564, true }, + { 178585, true }, { 178598, true }, - { 178608, true }, - { 178615, true }, - { 178635, true }, - { 178647, true }, - { 178668, true }, - { 178679, true }, - { 178691, true }, - { 178701, true }, - { 178710, true }, - { 178719, true }, - { 178738, true }, - { 178758, true }, - { 178772, true }, - { 178793, true }, - { 178806, true }, - { 178818, true }, - { 178842, true }, - { 178860, false }, - { 178874, true }, - { 178889, true }, - { 178904, true }, - { 178913, false }, - { 178930, false }, - { 178940, true }, - { 178950, true }, - { 178964, true }, - { 178979, true }, - { 178995, true }, - { 179011, true }, - { 179021, true }, - { 179032, true }, - { 179043, true }, - { 179055, true }, - { 179067, true }, - { 179078, true }, - { 179092, true }, - { 179108, true }, - { 179120, false }, - { 179139, true }, - { 179154, true }, - { 179164, true }, - { 179182, true }, - { 179193, true }, - { 179213, true }, - { 179230, true }, - { 179246, true }, - { 179265, true }, - { 179280, true }, - { 179296, true }, - { 179313, true }, + { 178610, true }, + { 178634, true }, + { 178652, false }, + { 178666, true }, + { 178681, true }, + { 178696, true }, + { 178705, false }, + { 178722, false }, + { 178732, true }, + { 178742, true }, + { 178756, true }, + { 178771, true }, + { 178787, true }, + { 178803, true }, + { 178813, true }, + { 178824, true }, + { 178835, true }, + { 178847, true }, + { 178859, true }, + { 178870, true }, + { 178884, true }, + { 178900, true }, + { 178912, false }, + { 178931, true }, + { 178946, true }, + { 178956, true }, + { 178974, true }, + { 178985, true }, + { 179005, true }, + { 179022, true }, + { 179038, true }, + { 179057, true }, + { 179072, true }, + { 179088, true }, + { 179105, true }, + { 179125, true }, + { 179137, true }, + { 179152, true }, + { 179171, true }, + { 179180, true }, + { 179197, true }, + { 179209, true }, + { 179221, true }, + { 179233, true }, + { 179242, true }, + { 179252, true }, + { 179269, true }, + { 179287, true }, + { 179298, true }, + { 179308, true }, + { 179323, true }, { 179333, true }, - { 179345, true }, + { 179343, false }, + { 179350, true }, { 179360, true }, - { 179379, true }, - { 179388, true }, - { 179405, true }, - { 179417, true }, - { 179429, true }, - { 179441, true }, - { 179450, true }, - { 179460, true }, + { 179381, true }, + { 179401, true }, + { 179424, true }, + { 179444, true }, + { 179459, true }, { 179477, true }, - { 179495, true }, - { 179506, true }, - { 179516, true }, + { 179488, false }, + { 179512, true }, { 179531, true }, - { 179541, true }, - { 179551, false }, - { 179558, true }, - { 179568, true }, - { 179589, true }, - { 179609, true }, - { 179632, true }, - { 179652, true }, - { 179667, true }, - { 179685, true }, - { 179696, false }, - { 179720, true }, - { 179739, true }, - { 179752, true }, - { 179768, false }, - { 179784, true }, - { 179798, true }, - { 179805, true }, - { 179817, false }, - { 179831, true }, - { 179850, true }, - { 179868, true }, - { 179881, true }, - { 179895, false }, - { 179911, true }, - { 179929, true }, - { 179952, true }, - { 179965, true }, - { 179977, true }, - { 179988, true }, - { 179999, true }, - { 180014, true }, - { 180028, true }, - { 180053, true }, - { 180086, true }, - { 180112, true }, + { 179544, true }, + { 179560, false }, + { 179576, true }, + { 179590, true }, + { 179597, true }, + { 179609, false }, + { 179623, true }, + { 179642, true }, + { 179660, true }, + { 179673, true }, + { 179687, false }, + { 179703, true }, + { 179721, true }, + { 179744, true }, + { 179757, true }, + { 179769, true }, + { 179780, true }, + { 179791, true }, + { 179806, true }, + { 179820, true }, + { 179845, true }, + { 179878, true }, + { 179904, true }, + { 179938, true }, + { 179961, true }, + { 179973, true }, + { 179985, true }, + { 180001, false }, + { 180021, true }, + { 180034, false }, + { 180052, false }, + { 180075, true }, + { 180095, true }, + { 180111, true }, + { 180125, true }, { 180146, true }, - { 180169, true }, - { 180181, true }, - { 180193, true }, - { 180209, false }, - { 180229, true }, - { 180242, false }, - { 180260, false }, - { 180283, true }, - { 180303, true }, - { 180319, true }, - { 180333, true }, - { 180354, true }, - { 180369, false }, - { 180382, true }, - { 180396, true }, - { 180408, true }, - { 180420, true }, - { 180436, false }, - { 180458, true }, - { 180478, true }, - { 180490, true }, - { 180506, true }, - { 180518, true }, - { 180531, true }, - { 180547, true }, - { 180565, true }, - { 180577, true }, + { 180161, false }, + { 180174, true }, + { 180188, true }, + { 180200, true }, + { 180212, true }, + { 180228, false }, + { 180250, true }, + { 180270, true }, + { 180282, true }, + { 180298, true }, + { 180310, true }, + { 180323, true }, + { 180339, true }, + { 180357, true }, + { 180369, true }, + { 180383, true }, + { 180397, true }, + { 180414, true }, + { 180428, true }, + { 180438, false }, + { 180452, true }, + { 180462, true }, + { 180483, true }, + { 180496, true }, + { 180509, true }, + { 180520, true }, + { 180533, true }, + { 180554, true }, + { 180574, true }, { 180591, true }, - { 180605, true }, - { 180622, true }, - { 180636, true }, - { 180646, true }, - { 180660, true }, - { 180670, true }, - { 180691, true }, - { 180704, true }, - { 180720, true }, - { 180733, true }, - { 180744, true }, - { 180757, true }, - { 180778, true }, - { 180798, true }, - { 180815, true }, - { 180827, true }, - { 180841, true }, - { 180851, true }, - { 180861, true }, - { 180869, true }, - { 180885, true }, - { 180901, true }, - { 180917, true }, + { 180603, true }, + { 180617, true }, + { 180627, true }, + { 180637, true }, + { 180645, true }, + { 180661, true }, + { 180677, true }, + { 180693, true }, + { 180714, true }, + { 180725, true }, + { 180737, true }, + { 180750, true }, + { 180775, true }, + { 180790, true }, + { 180810, true }, + { 180824, true }, + { 180838, true }, + { 180853, true }, + { 180875, true }, + { 180895, true }, + { 180910, true }, + { 180920, true }, { 180938, true }, - { 180949, true }, - { 180961, true }, - { 180974, true }, - { 180999, true }, - { 181014, true }, - { 181034, true }, - { 181048, true }, - { 181062, true }, - { 181077, true }, - { 181099, true }, - { 181119, true }, + { 180953, true }, + { 180969, true }, + { 180985, true }, + { 180994, false }, + { 181004, true }, + { 181016, true }, + { 181028, true }, + { 181044, true }, + { 181060, true }, + { 181081, true }, + { 181093, true }, + { 181112, false }, + { 181124, true }, { 181134, true }, - { 181144, true }, - { 181162, true }, - { 181177, true }, - { 181193, true }, - { 181209, true }, - { 181218, false }, - { 181228, true }, - { 181240, true }, - { 181252, true }, - { 181268, true }, - { 181284, true }, - { 181305, true }, - { 181317, true }, - { 181336, false }, + { 181149, true }, + { 181161, true }, + { 181185, true }, + { 181197, true }, + { 181218, true }, + { 181249, true }, + { 181274, true }, + { 181297, true }, + { 181308, true }, + { 181320, true }, + { 181335, true }, { 181348, true }, - { 181358, true }, - { 181373, true }, - { 181385, true }, - { 181409, true }, - { 181421, true }, - { 181442, true }, - { 181473, true }, - { 181498, true }, - { 181521, true }, - { 181532, true }, - { 181544, true }, - { 181559, true }, - { 181572, true }, - { 181585, true }, - { 181614, true }, - { 181637, true }, - { 181661, true }, - { 181688, true }, - { 181702, true }, - { 181725, true }, - { 181751, true }, - { 181779, true }, - { 181810, true }, - { 181835, true }, - { 181843, true }, + { 181361, true }, + { 181390, true }, + { 181413, true }, + { 181437, true }, + { 181464, true }, + { 181478, true }, + { 181501, true }, + { 181527, true }, + { 181555, true }, + { 181586, true }, + { 181611, true }, + { 181619, true }, + { 181626, true }, + { 181638, true }, + { 181650, true }, + { 181663, true }, + { 181684, true }, + { 181697, true }, + { 181718, true }, + { 181737, true }, + { 181756, true }, + { 181767, true }, + { 181780, true }, + { 181796, false }, + { 181812, true }, + { 181820, true }, + { 181835, false }, { 181850, true }, - { 181862, true }, - { 181874, true }, - { 181887, true }, - { 181908, true }, - { 181921, true }, - { 181942, true }, - { 181961, true }, - { 181980, true }, - { 181991, true }, - { 182004, true }, - { 182020, false }, - { 182036, true }, - { 182044, true }, - { 182059, false }, - { 182074, true }, - { 182090, true }, - { 182100, true }, - { 182116, true }, + { 181866, true }, + { 181876, true }, + { 181892, true }, + { 181911, true }, + { 181925, true }, + { 181934, true }, + { 181946, true }, + { 181959, true }, + { 181974, true }, + { 181996, true }, + { 182013, true }, + { 182027, true }, + { 182034, true }, + { 182047, true }, + { 182060, true }, + { 182086, true }, + { 182098, true }, + { 182109, true }, { 182135, true }, - { 182149, true }, - { 182158, true }, - { 182170, true }, - { 182183, true }, - { 182198, true }, - { 182220, true }, - { 182237, true }, - { 182251, true }, - { 182258, true }, - { 182271, true }, - { 182284, true }, - { 182310, true }, - { 182322, true }, - { 182333, true }, - { 182359, true }, - { 182369, false }, - { 182386, true }, - { 182398, true }, + { 182145, false }, + { 182162, true }, + { 182174, true }, + { 182189, true }, + { 182199, true }, + { 182212, true }, + { 182224, true }, + { 182234, true }, + { 182247, false }, + { 182263, true }, + { 182279, true }, + { 182293, false }, + { 182308, true }, + { 182321, true }, + { 182335, true }, + { 182349, true }, + { 182363, true }, + { 182387, true }, + { 182400, true }, { 182413, true }, - { 182423, true }, - { 182436, true }, - { 182448, true }, - { 182458, true }, - { 182471, false }, - { 182487, true }, - { 182503, true }, - { 182517, false }, - { 182532, true }, - { 182545, true }, - { 182559, true }, - { 182573, true }, - { 182587, true }, - { 182611, true }, - { 182624, true }, - { 182637, true }, - { 182651, true }, - { 182665, true }, - { 182680, true }, - { 182694, true }, - { 182710, true }, - { 182725, true }, - { 182740, true }, + { 182427, true }, + { 182441, true }, + { 182456, true }, + { 182470, true }, + { 182486, true }, + { 182501, true }, + { 182516, true }, + { 182534, true }, + { 182546, true }, + { 182558, true }, + { 182574, true }, + { 182591, true }, + { 182615, true }, + { 182632, true }, + { 182650, true }, + { 182669, true }, + { 182689, true }, + { 182704, true }, + { 182716, true }, + { 182730, true }, + { 182747, true }, { 182758, true }, - { 182770, true }, - { 182782, true }, - { 182798, true }, - { 182815, true }, - { 182839, true }, - { 182856, true }, - { 182874, true }, - { 182893, true }, - { 182913, true }, - { 182928, true }, - { 182940, true }, - { 182954, true }, - { 182971, true }, - { 182982, true }, - { 182991, true }, - { 183005, true }, - { 183020, true }, - { 183032, true }, - { 183042, true }, - { 183054, true }, - { 183068, true }, - { 183081, true }, - { 183093, false }, - { 183112, true }, - { 183134, true }, - { 183149, true }, - { 183168, true }, + { 182767, true }, + { 182781, true }, + { 182796, true }, + { 182808, true }, + { 182818, true }, + { 182830, true }, + { 182844, true }, + { 182857, true }, + { 182869, false }, + { 182888, true }, + { 182910, true }, + { 182925, true }, + { 182944, true }, + { 182958, false }, + { 182969, true }, + { 182984, true }, + { 182998, true }, + { 183010, true }, + { 183027, true }, + { 183045, true }, + { 183052, true }, + { 183065, true }, + { 183077, true }, + { 183085, true }, + { 183095, true }, + { 183105, true }, + { 183120, true }, + { 183139, true }, + { 183151, true }, + { 183167, true }, { 183182, false }, - { 183193, true }, - { 183208, true }, - { 183222, true }, - { 183234, true }, - { 183251, true }, - { 183269, true }, + { 183192, false }, + { 183204, true }, + { 183213, true }, + { 183227, true }, + { 183239, true }, + { 183247, true }, + { 183257, true }, { 183276, true }, - { 183289, true }, - { 183301, true }, + { 183284, false }, + { 183296, true }, { 183309, true }, - { 183319, true }, - { 183329, true }, - { 183344, true }, - { 183363, true }, - { 183375, true }, - { 183391, true }, - { 183406, false }, - { 183416, false }, - { 183428, true }, - { 183437, true }, - { 183451, true }, - { 183463, true }, - { 183471, true }, - { 183481, true }, - { 183500, true }, - { 183508, false }, - { 183520, true }, - { 183533, true }, - { 183548, true }, - { 183570, true }, - { 183584, true }, - { 183596, true }, - { 183614, true }, - { 183630, true }, - { 183639, false }, - { 183656, true }, - { 183677, true }, - { 183698, true }, - { 183710, true }, - { 183735, true }, - { 183761, true }, - { 183787, true }, - { 183799, true }, - { 183812, true }, - { 183825, true }, - { 183835, true }, - { 183844, true }, - { 183858, true }, - { 183874, true }, - { 183894, true }, + { 183324, true }, + { 183346, true }, + { 183360, true }, + { 183372, true }, + { 183390, true }, + { 183406, true }, + { 183415, false }, + { 183432, true }, + { 183453, true }, + { 183474, true }, + { 183486, true }, + { 183511, true }, + { 183537, true }, + { 183563, true }, + { 183575, true }, + { 183588, true }, + { 183601, true }, + { 183611, true }, + { 183620, true }, + { 183634, true }, + { 183650, true }, + { 183670, true }, + { 183685, true }, + { 183701, true }, + { 183711, true }, + { 183723, true }, + { 183743, true }, + { 183765, true }, + { 183782, true }, + { 183795, true }, + { 183814, true }, + { 183828, true }, + { 183852, true }, + { 183869, false }, + { 183883, true }, + { 183896, true }, { 183909, true }, - { 183925, true }, - { 183935, true }, - { 183947, true }, - { 183967, true }, - { 183989, true }, - { 184006, true }, - { 184019, true }, - { 184038, true }, - { 184052, true }, - { 184076, true }, - { 184093, false }, - { 184107, true }, - { 184120, true }, - { 184133, true }, - { 184152, true }, - { 184174, true }, - { 184186, true }, + { 183928, true }, + { 183950, true }, + { 183962, true }, + { 183977, true }, + { 183998, true }, + { 184023, true }, + { 184039, true }, + { 184065, true }, + { 184081, true }, + { 184094, true }, + { 184112, true }, + { 184126, true }, + { 184145, true }, + { 184156, true }, + { 184168, true }, + { 184178, true }, + { 184187, true }, { 184201, true }, - { 184222, true }, - { 184247, true }, - { 184263, true }, - { 184289, true }, - { 184305, true }, - { 184318, true }, - { 184336, true }, - { 184350, true }, - { 184369, true }, - { 184380, true }, - { 184392, true }, - { 184402, true }, - { 184411, true }, - { 184425, true }, - { 184436, true }, - { 184447, true }, - { 184455, true }, - { 184468, true }, - { 184482, true }, - { 184499, true }, - { 184510, false }, - { 184522, true }, - { 184541, true }, - { 184554, true }, - { 184565, true }, - { 184578, true }, - { 184590, true }, - { 184600, true }, - { 184610, true }, - { 184620, true }, - { 184643, true }, - { 184655, true }, - { 184674, true }, - { 184682, true }, - { 184696, false }, - { 184709, true }, - { 184722, true }, - { 184733, true }, - { 184744, true }, - { 184760, true }, - { 184770, true }, - { 184784, true }, - { 184791, true }, - { 184804, true }, - { 184821, true }, - { 184831, true }, - { 184847, true }, - { 184862, true }, - { 184872, true }, - { 184884, false }, - { 184895, false }, - { 184913, false }, - { 184926, true }, - { 184941, false }, - { 184959, false }, + { 184212, true }, + { 184223, true }, + { 184231, true }, + { 184244, true }, + { 184258, true }, + { 184275, true }, + { 184286, false }, + { 184298, true }, + { 184317, true }, + { 184330, true }, + { 184341, true }, + { 184354, true }, + { 184366, true }, + { 184376, true }, + { 184386, true }, + { 184396, true }, + { 184419, true }, + { 184431, true }, + { 184450, true }, + { 184458, true }, + { 184472, false }, + { 184485, true }, + { 184498, true }, + { 184509, true }, + { 184520, true }, + { 184536, true }, + { 184546, true }, + { 184560, true }, + { 184567, true }, + { 184580, true }, + { 184597, true }, + { 184607, true }, + { 184623, true }, + { 184638, true }, + { 184648, true }, + { 184660, false }, + { 184671, false }, + { 184689, false }, + { 184702, true }, + { 184717, false }, + { 184735, false }, + { 184758, false }, + { 184779, false }, + { 184798, true }, + { 184814, false }, + { 184830, false }, + { 184846, true }, + { 184868, true }, + { 184881, false }, + { 184898, false }, + { 184915, true }, + { 184932, false }, + { 184949, false }, + { 184963, false }, { 184982, false }, - { 185003, false }, - { 185022, true }, - { 185038, false }, + { 184993, false }, + { 185005, false }, + { 185017, false }, + { 185036, true }, { 185054, false }, - { 185070, true }, - { 185092, true }, - { 185105, false }, - { 185122, false }, - { 185139, true }, - { 185156, false }, + { 185068, false }, + { 185085, false }, + { 185102, false }, + { 185117, false }, + { 185133, true }, + { 185154, false }, { 185173, false }, - { 185187, false }, - { 185206, false }, - { 185217, false }, - { 185229, false }, - { 185241, false }, - { 185260, true }, - { 185278, false }, - { 185292, false }, - { 185309, false }, - { 185326, false }, - { 185341, false }, - { 185357, true }, - { 185378, false }, - { 185397, false }, - { 185415, false }, - { 185435, true }, - { 185451, false }, - { 185466, true }, - { 185481, true }, - { 185505, true }, - { 185512, true }, - { 185531, false }, - { 185549, false }, - { 185564, true }, - { 185585, false }, - { 185609, false }, - { 185628, false }, - { 185644, false }, - { 185659, false }, - { 185672, true }, - { 185688, false }, - { 185703, false }, - { 185717, false }, - { 185735, true }, + { 185191, false }, + { 185211, true }, + { 185227, false }, + { 185242, true }, + { 185257, true }, + { 185281, true }, + { 185288, true }, + { 185307, false }, + { 185325, false }, + { 185340, true }, + { 185361, false }, + { 185385, false }, + { 185404, false }, + { 185420, false }, + { 185435, false }, + { 185448, true }, + { 185464, false }, + { 185479, false }, + { 185493, false }, + { 185511, true }, + { 185522, true }, + { 185533, true }, + { 185541, true }, + { 185556, true }, + { 185569, true }, + { 185586, true }, + { 185598, true }, + { 185606, true }, + { 185617, true }, + { 185633, true }, + { 185638, true }, + { 185648, true }, + { 185656, true }, + { 185676, true }, + { 185683, true }, + { 185702, true }, + { 185709, true }, + { 185716, true }, + { 185725, true }, { 185746, true }, - { 185757, true }, - { 185765, true }, - { 185780, true }, - { 185793, true }, - { 185810, true }, - { 185822, true }, - { 185830, true }, - { 185841, true }, + { 185766, true }, + { 185790, true }, + { 185797, true }, + { 185807, true }, + { 185824, true }, + { 185844, true }, + { 185850, true }, { 185857, true }, - { 185862, true }, - { 185872, true }, - { 185880, true }, - { 185900, true }, - { 185907, true }, - { 185926, true }, - { 185933, true }, - { 185940, true }, - { 185949, true }, - { 185970, true }, - { 185990, true }, - { 186014, true }, - { 186021, true }, - { 186031, true }, - { 186048, true }, - { 186068, true }, - { 186074, true }, - { 186081, true }, - { 186093, true }, - { 186106, true }, - { 186116, true }, - { 186131, false }, - { 186142, true }, - { 186153, true }, - { 186161, false }, + { 185869, true }, + { 185882, true }, + { 185892, true }, + { 185907, false }, + { 185918, true }, + { 185929, true }, + { 185937, false }, + { 185956, true }, + { 185967, true }, + { 185978, true }, + { 185985, true }, + { 186004, true }, + { 186020, true }, + { 186032, true }, + { 186043, true }, + { 186056, true }, + { 186070, true }, + { 186085, true }, + { 186100, true }, + { 186110, true }, + { 186120, false }, + { 186130, true }, + { 186140, true }, + { 186151, true }, + { 186161, true }, + { 186170, true }, { 186180, true }, - { 186191, true }, - { 186202, true }, - { 186209, true }, - { 186228, true }, + { 186188, true }, + { 186200, true }, + { 186211, true }, + { 186222, true }, + { 186234, true }, { 186244, true }, - { 186256, true }, - { 186267, true }, - { 186280, true }, - { 186294, true }, - { 186309, true }, - { 186324, true }, - { 186334, true }, - { 186344, false }, - { 186354, true }, - { 186364, true }, - { 186375, true }, - { 186385, true }, - { 186394, true }, - { 186404, true }, - { 186412, true }, - { 186424, true }, - { 186435, true }, - { 186446, true }, - { 186458, true }, - { 186468, true }, - { 186476, true }, - { 186490, true }, - { 186497, true }, - { 186515, true }, - { 186541, true }, - { 186567, true }, - { 186590, true }, - { 186621, true }, - { 186637, true }, - { 186649, true }, - { 186668, true }, - { 186701, true }, - { 186727, true }, - { 186752, true }, - { 186777, true }, - { 186807, true }, - { 186818, true }, - { 186837, true }, - { 186868, true }, - { 186879, false }, - { 186900, true }, - { 186923, true }, - { 186938, true }, - { 186952, true }, - { 186994, true }, - { 187017, true }, - { 187033, true }, - { 187059, true }, - { 187093, true }, - { 187117, false }, - { 187127, true }, - { 187133, true }, - { 187142, false }, - { 187152, true }, - { 187163, true }, - { 187173, true }, - { 187180, true }, - { 187187, true }, - { 187200, true }, - { 187207, true }, - { 187214, true }, - { 187228, true }, - { 187237, true }, + { 186252, true }, + { 186266, true }, + { 186273, true }, + { 186291, true }, + { 186317, true }, + { 186343, true }, + { 186366, true }, + { 186397, true }, + { 186413, true }, + { 186425, true }, + { 186444, true }, + { 186477, true }, + { 186503, true }, + { 186528, true }, + { 186553, true }, + { 186583, true }, + { 186594, true }, + { 186613, true }, + { 186644, true }, + { 186655, false }, + { 186676, true }, + { 186699, true }, + { 186714, true }, + { 186728, true }, + { 186770, true }, + { 186793, true }, + { 186809, true }, + { 186835, true }, + { 186869, true }, + { 186893, false }, + { 186903, true }, + { 186909, true }, + { 186918, false }, + { 186928, true }, + { 186939, true }, + { 186949, true }, + { 186956, true }, + { 186963, true }, + { 186976, true }, + { 186983, true }, + { 186990, true }, + { 187004, true }, + { 187013, true }, + { 187027, true }, + { 187037, true }, + { 187047, true }, + { 187060, true }, + { 187067, true }, + { 187074, true }, + { 187083, true }, + { 187096, true }, + { 187103, true }, + { 187113, true }, + { 187121, true }, + { 187132, true }, + { 187142, true }, + { 187157, true }, + { 187167, true }, + { 187179, true }, + { 187199, true }, + { 187210, true }, + { 187221, true }, + { 187235, true }, { 187251, true }, - { 187261, true }, - { 187271, true }, - { 187284, true }, - { 187291, true }, - { 187298, true }, - { 187307, true }, - { 187320, true }, - { 187327, true }, - { 187337, true }, - { 187345, true }, + { 187258, true }, + { 187270, true }, + { 187280, true }, + { 187292, false }, + { 187304, true }, + { 187318, true }, + { 187331, true }, + { 187341, true }, { 187356, true }, - { 187366, true }, - { 187381, true }, + { 187368, true }, + { 187378, true }, { 187391, true }, { 187403, true }, + { 187411, true }, { 187423, true }, - { 187434, true }, - { 187445, true }, - { 187459, true }, - { 187475, true }, - { 187482, true }, - { 187494, true }, - { 187504, true }, - { 187511, true }, - { 187523, false }, - { 187535, true }, - { 187549, true }, - { 187562, true }, - { 187572, true }, - { 187587, true }, - { 187599, true }, - { 187609, true }, - { 187622, true }, - { 187634, true }, + { 187433, true }, + { 187441, true }, + { 187451, true }, + { 187458, true }, + { 187467, true }, + { 187487, true }, + { 187502, true }, + { 187517, true }, + { 187530, true }, + { 187542, true }, + { 187556, true }, + { 187566, false }, + { 187575, true }, + { 187591, true }, + { 187601, true }, + { 187610, true }, + { 187621, true }, + { 187632, true }, { 187642, true }, - { 187654, true }, - { 187664, true }, - { 187672, true }, - { 187682, true }, - { 187689, true }, - { 187698, true }, - { 187718, true }, - { 187733, true }, + { 187653, true }, + { 187675, true }, + { 187690, true }, + { 187697, true }, + { 187708, true }, + { 187716, true }, + { 187726, true }, + { 187739, false }, { 187748, true }, - { 187761, true }, - { 187773, true }, - { 187787, true }, - { 187797, false }, - { 187806, true }, - { 187822, true }, - { 187832, true }, - { 187841, true }, - { 187852, true }, - { 187863, true }, - { 187873, true }, - { 187884, true }, - { 187906, true }, + { 187762, true }, + { 187778, true }, + { 187802, true }, + { 187820, true }, + { 187831, true }, + { 187843, false }, + { 187858, true }, + { 187868, true }, + { 187880, true }, + { 187900, true }, + { 187910, true }, { 187921, true }, - { 187928, true }, - { 187939, true }, - { 187947, true }, - { 187957, true }, - { 187970, false }, - { 187979, true }, - { 187993, true }, - { 188009, true }, - { 188033, true }, - { 188051, true }, - { 188062, true }, - { 188074, false }, - { 188089, true }, + { 187931, true }, + { 187946, true }, + { 187960, true }, + { 187975, true }, + { 187990, true }, + { 188002, true }, + { 188014, true }, + { 188032, true }, + { 188043, true }, + { 188053, true }, + { 188065, true }, + { 188080, true }, { 188099, true }, - { 188111, true }, - { 188131, true }, - { 188141, true }, - { 188152, true }, - { 188162, true }, - { 188177, true }, - { 188191, true }, - { 188206, true }, - { 188221, true }, + { 188114, true }, + { 188126, true }, + { 188137, true }, + { 188159, true }, + { 188175, true }, + { 188195, true }, + { 188204, true }, + { 188212, true }, + { 188220, true }, { 188233, true }, { 188245, true }, - { 188263, true }, - { 188274, true }, - { 188284, true }, - { 188296, true }, - { 188311, true }, - { 188330, true }, - { 188345, true }, - { 188357, true }, - { 188368, true }, - { 188390, true }, - { 188406, true }, - { 188426, true }, - { 188435, true }, - { 188443, true }, - { 188451, true }, - { 188464, true }, - { 188476, true }, - { 188488, true }, - { 188496, true }, - { 188511, true }, - { 188521, true }, - { 188530, true }, - { 188539, true }, + { 188257, true }, + { 188265, true }, + { 188280, true }, + { 188290, true }, + { 188299, true }, + { 188308, true }, + { 188317, true }, + { 188326, true }, + { 188337, true }, + { 188351, true }, + { 188363, true }, + { 188376, true }, + { 188384, false }, + { 188396, true }, + { 188410, true }, + { 188422, true }, + { 188429, true }, + { 188437, true }, + { 188447, true }, + { 188456, true }, + { 188469, true }, + { 188474, true }, + { 188484, true }, + { 188491, true }, + { 188498, false }, + { 188517, true }, + { 188533, true }, { 188548, true }, - { 188557, true }, - { 188568, true }, - { 188582, true }, - { 188594, true }, - { 188607, true }, - { 188615, false }, - { 188627, true }, - { 188641, true }, - { 188653, true }, - { 188660, true }, - { 188668, true }, - { 188678, true }, - { 188687, true }, - { 188700, true }, - { 188705, true }, - { 188715, true }, - { 188722, true }, - { 188729, false }, - { 188748, true }, - { 188764, true }, - { 188779, true }, - { 188795, true }, - { 188810, true }, - { 188823, true }, - { 188836, true }, - { 188844, true }, - { 188857, true }, - { 188870, false }, + { 188564, true }, + { 188579, true }, + { 188592, true }, + { 188605, true }, + { 188613, true }, + { 188626, true }, + { 188639, false }, + { 188656, true }, + { 188664, true }, + { 188673, true }, + { 188686, true }, + { 188698, true }, + { 188728, true }, + { 188739, true }, + { 188757, true }, + { 188781, true }, + { 188793, true }, + { 188811, true }, + { 188820, true }, + { 188831, true }, + { 188843, true }, + { 188851, true }, + { 188858, true }, + { 188866, true }, + { 188877, true }, { 188887, true }, - { 188895, true }, - { 188904, true }, - { 188917, true }, - { 188929, true }, - { 188959, true }, - { 188970, true }, - { 188988, true }, - { 189012, true }, + { 188896, true }, + { 188908, true }, + { 188933, true }, + { 188945, true }, + { 188967, true }, + { 188978, false }, + { 188993, true }, + { 189011, true }, { 189024, true }, - { 189042, true }, - { 189051, true }, - { 189062, true }, - { 189074, true }, - { 189082, true }, - { 189089, true }, - { 189097, true }, - { 189108, true }, - { 189118, true }, + { 189040, true }, + { 189058, true }, + { 189068, true }, + { 189080, true }, + { 189092, true }, + { 189104, true }, + { 189115, true }, { 189127, true }, - { 189139, true }, - { 189164, true }, - { 189176, true }, + { 189140, true }, + { 189153, true }, + { 189165, true }, + { 189177, true }, + { 189188, false }, { 189198, true }, { 189209, true }, - { 189220, true }, - { 189238, true }, - { 189251, true }, - { 189267, true }, - { 189285, true }, - { 189295, true }, - { 189307, true }, - { 189319, true }, - { 189331, true }, - { 189342, true }, - { 189354, true }, - { 189367, true }, - { 189380, true }, - { 189392, true }, - { 189404, true }, - { 189415, false }, - { 189425, true }, - { 189436, true }, - { 189451, true }, - { 189464, true }, - { 189475, true }, - { 189485, true }, - { 189499, true }, - { 189511, true }, - { 189527, true }, - { 189542, true }, + { 189224, true }, + { 189237, true }, + { 189248, true }, + { 189258, true }, + { 189272, true }, + { 189284, true }, + { 189300, true }, + { 189315, true }, + { 189328, true }, + { 189340, true }, + { 189353, true }, + { 189360, true }, + { 189375, true }, + { 189387, true }, + { 189396, true }, + { 189408, true }, + { 189416, true }, + { 189425, false }, + { 189433, true }, + { 189444, true }, + { 189452, true }, + { 189463, true }, + { 189474, true }, + { 189489, true }, + { 189506, false }, + { 189518, true }, + { 189537, true }, { 189555, true }, { 189567, true }, - { 189580, true }, - { 189587, true }, - { 189602, true }, - { 189614, true }, - { 189623, true }, - { 189635, true }, - { 189643, true }, - { 189652, false }, - { 189660, true }, - { 189671, true }, - { 189679, true }, - { 189690, true }, - { 189701, true }, - { 189716, true }, - { 189733, false }, - { 189745, true }, - { 189764, true }, + { 189581, true }, + { 189591, true }, + { 189598, true }, + { 189609, true }, + { 189619, true }, + { 189625, true }, + { 189640, true }, + { 189655, true }, + { 189667, true }, + { 189674, true }, + { 189685, true }, + { 189698, true }, + { 189722, true }, + { 189729, true }, + { 189740, true }, + { 189751, true }, + { 189769, true }, { 189782, true }, - { 189794, true }, - { 189808, true }, - { 189818, true }, - { 189825, true }, - { 189836, true }, - { 189846, true }, - { 189852, true }, - { 189867, true }, - { 189882, true }, - { 189894, true }, - { 189901, true }, - { 189912, true }, - { 189925, true }, - { 189949, true }, - { 189956, true }, - { 189967, true }, - { 189978, true }, - { 189996, true }, - { 190009, true }, - { 190024, true }, - { 190040, true }, - { 190051, true }, - { 190067, true }, - { 190091, true }, - { 190106, true }, - { 190116, true }, - { 190124, true }, - { 190143, true }, - { 190154, true }, - { 190164, true }, - { 190179, true }, - { 190189, true }, - { 190200, true }, - { 190214, true }, - { 190228, true }, - { 190237, true }, - { 190245, true }, - { 190255, true }, - { 190268, true }, - { 190282, true }, - { 190303, true }, - { 190313, true }, - { 190320, true }, - { 190330, true }, - { 190338, true }, - { 190347, true }, - { 190360, true }, - { 190373, true }, - { 190384, true }, - { 190393, true }, - { 190403, true }, + { 189797, true }, + { 189813, true }, + { 189824, true }, + { 189840, true }, + { 189864, true }, + { 189879, true }, + { 189889, true }, + { 189897, true }, + { 189916, true }, + { 189927, true }, + { 189937, true }, + { 189952, true }, + { 189962, true }, + { 189973, true }, + { 189987, true }, + { 190001, true }, + { 190010, true }, + { 190018, true }, + { 190028, true }, + { 190041, true }, + { 190055, true }, + { 190076, true }, + { 190086, true }, + { 190093, true }, + { 190103, true }, + { 190111, true }, + { 190120, true }, + { 190133, true }, + { 190146, true }, + { 190157, true }, + { 190166, true }, + { 190176, true }, }; diff --git a/services/sync/tests/unit/sync_ping_schema.json b/services/sync/tests/unit/sync_ping_schema.json index 4ee734f30933..56114fb93ec8 100644 --- a/services/sync/tests/unit/sync_ping_schema.json +++ b/services/sync/tests/unit/sync_ping_schema.json @@ -28,7 +28,7 @@ }, "devices": { "type": "array", - "items": { "$ref": "#/definitions/engine" } + "items": { "$ref": "#/definitions/device" } }, "deviceID": { "type": "string", diff --git a/services/sync/tps/extensions/tps/resource/tps.jsm b/services/sync/tps/extensions/tps/resource/tps.jsm index 4260e8f037e3..f4cc0214aa21 100644 --- a/services/sync/tps/extensions/tps/resource/tps.jsm +++ b/services/sync/tps/extensions/tps/resource/tps.jsm @@ -19,6 +19,7 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/AppConstants.jsm"); Cu.import("resource://gre/modules/PlacesUtils.jsm"); +Cu.import("resource://gre/modules/FileUtils.jsm"); Cu.import("resource://services-common/async.js"); Cu.import("resource://services-sync/constants.js"); Cu.import("resource://services-sync/main.js"); @@ -49,6 +50,11 @@ var prefs = Cc["@mozilla.org/preferences-service;1"] var mozmillInit = {}; Cu.import('resource://mozmill/driver/mozmill.js', mozmillInit); +XPCOMUtils.defineLazyGetter(this, "fileProtocolHandler", () => { + let fileHandler = Services.io.getProtocolHandler("file"); + return fileHandler.QueryInterface(Ci.nsIFileProtocolHandler); +}); + // Options for wiping data during a sync const SYNC_RESET_CLIENT = "resetClient"; const SYNC_WIPE_CLIENT = "wipeClient"; @@ -744,6 +750,10 @@ var TPS = { if (this.shouldValidateAddons) { this.ValidateAddons(); } + // Force this early so that we run the validation and detect missing pings + // *before* we start shutting down, since if we do it after, the python + // code won't notice the failure. + SyncTelemetry.shutdown(); // we're all done Logger.logInfo("test phase " + this._currentPhase + ": " + (this._errors ? "FAIL" : "PASS")); @@ -751,7 +761,7 @@ var TPS = { this.quit(); return; } - + this.seconds_since_epoch = prefs.getIntPref("tps.seconds_since_epoch", 0); if (this.seconds_since_epoch) this._usSinceEpoch = this.seconds_since_epoch * 1000 * 1000; else { @@ -785,6 +795,50 @@ var TPS = { this.RunNextTestAction(); }, + _getFileRelativeToSourceRoot(testFileURL, relativePath) { + let file = fileProtocolHandler.getFileFromURLSpec(testFileURL); + let root = file // /services/sync/tests/tps/test_foo.js + .parent // /services/sync/tests/tps + .parent // /services/sync/tests + .parent // /services/sync + .parent // /services + .parent // + ; + root.appendRelativePath(relativePath); + return root; + }, + + // Attempt to load the sync_ping_schema.json and initialize `this.pingValidator` + // based on the source of the tps file. Assumes that it's at "../unit/sync_ping_schema.json" + // relative to the directory the tps test file (testFile) is contained in. + _tryLoadPingSchema(testFile) { + try { + let schemaFile = this._getFileRelativeToSourceRoot(testFile, + "services/sync/tests/unit/sync_ping_schema.json"); + + let stream = Cc["@mozilla.org/network/file-input-stream;1"] + .createInstance(Ci.nsIFileInputStream); + + let jsonReader = Cc["@mozilla.org/dom/json;1"] + .createInstance(Components.interfaces.nsIJSON); + + stream.init(schemaFile, FileUtils.MODE_RDONLY, FileUtils.PERMS_FILE, 0); + let schema = jsonReader.decodeFromStream(stream, stream.available()); + Logger.logInfo("Successfully loaded schema") + + // Importing resource://testing-common/* isn't possible from within TPS, + // so we load Ajv manually. + let ajvFile = this._getFileRelativeToSourceRoot(testFile, "testing/modules/ajv-4.1.1.js"); + let ajvURL = fileProtocolHandler.getURLSpecFromFile(ajvFile); + let ns = {}; + Cu.import(ajvURL, ns); + let ajv = new ns.Ajv({ async: "co*" }); + this.pingValidator = ajv.compile(schema); + } catch (e) { + this.DumpError(`Failed to load ping schema and AJV relative to "${testFile}".`, e); + } + }, + /** * Runs a single test phase. * @@ -853,6 +907,7 @@ var TPS = { */ _executeTestPhase: function _executeTestPhase(file, phase, settings) { try { + this.config = JSON.parse(prefs.getCharPref('tps.config')); // parse the test file Services.scriptloader.loadSubScript(file, this); this._currentPhase = phase; @@ -862,6 +917,9 @@ var TPS = { .selectedProfile.name; this.phases[this._currentPhase] = profileToClean; this.Phase(this._currentPhase, [[this.Cleanup]]); + } else { + // Don't bother doing this for cleanup phases. + this._tryLoadPingSchema(file); } let this_phase = this._phaselist[this._currentPhase]; @@ -895,24 +953,6 @@ var TPS = { Logger.logInfo("setting client.name to " + this.phases[this._currentPhase]); Weave.Svc.Prefs.set("client.name", this.phases[this._currentPhase]); - // If a custom server was specified, set it now - if (this.config["serverURL"]) { - Weave.Service.serverURL = this.config.serverURL; - prefs.setCharPref('tps.serverURL', this.config.serverURL); - } - - // Store account details as prefs so they're accessible to the Mozmill - // framework. - if (this.fxaccounts_enabled) { - prefs.setCharPref('tps.account.username', this.config.fx_account.username); - prefs.setCharPref('tps.account.password', this.config.fx_account.password); - } - else { - prefs.setCharPref('tps.account.username', this.config.sync_account.username); - prefs.setCharPref('tps.account.password', this.config.sync_account.password); - prefs.setCharPref('tps.account.passphrase', this.config.sync_account.passphrase); - } - this._interceptSyncTelemetry(); // start processing the test actions @@ -942,15 +982,27 @@ var TPS = { Logger.logInfo("Intercepted sync telemetry submission: " + JSON.stringify(record)); this._syncsReportedViaTelemetry += record.syncs.length + (record.discarded || 0); if (record.discarded) { - Logger.AssertTrue(record.syncs.length == SyncTelemetry.maxPayloadCount, - "Syncs discarded from ping before maximum payload count reached"); + if (record.syncs.length != SyncTelemetry.maxPayloadCount) { + this.DumpError("Syncs discarded from ping before maximum payload count reached"); + } } // If this is the shutdown ping, check and see that the telemetry saw all the syncs. if (record.why === "shutdown") { // If we happen to sync outside of tps manually causing it, its not an // error in the telemetry, so we only complain if we didn't see all of them. - Logger.AssertTrue(this._syncsReportedViaTelemetry >= this._syncCount, - `Telemetry missed syncs: Saw ${this._syncsReportedViaTelemetry}, should have >= ${this._syncCount}.`); + if (this._syncsReportedViaTelemetry < this._syncCount) { + this.DumpError(`Telemetry missed syncs: Saw ${this._syncsReportedViaTelemetry}, should have >= ${this._syncCount}.`); + } + } + if (!record.syncs.length) { + // Note: we're overwriting submit, so this is called even for pings that + // may have no data (which wouldn't be submitted to telemetry and would + // fail validation). + return; + } + if (!this.pingValidator(record)) { + // Note that we already logged the record. + this.DumpError("Sync ping validation failed with errors: " + JSON.stringify(this.pingValidator.errors)); } }; }, diff --git a/taskcluster/ci/desktop-test/test-platforms.yml b/taskcluster/ci/desktop-test/test-platforms.yml index f6e4fa081c0a..5bb5ce1ed01d 100644 --- a/taskcluster/ci/desktop-test/test-platforms.yml +++ b/taskcluster/ci/desktop-test/test-platforms.yml @@ -64,3 +64,10 @@ windows10-64-vm/opt: #windows10-64/opt: # build-platform: win64/opt # test-set: windows-gpu-tests + +macosx64/debug: + build-platform: macosx64/debug + test-set: macosx64-tests +# macosx64/opt: +# build-platform: macosx64/opt +# test-set: macosx64-tests diff --git a/taskcluster/ci/desktop-test/test-sets.yml b/taskcluster/ci/desktop-test/test-sets.yml index 841f3847ff2d..e4387908ec5e 100644 --- a/taskcluster/ci/desktop-test/test-sets.yml +++ b/taskcluster/ci/desktop-test/test-sets.yml @@ -96,4 +96,24 @@ ccov-code-coverage-tests: jsdcov-code-coverage-tests: - mochitest-browser-chrome - - mochitest-devtools-chrome \ No newline at end of file + - mochitest-devtools-chrome + +macosx64-tests: + - cppunit + - crashtest + # - gtest + - jsreftest + # - marionette + # - mochitest + # - mochitest-browser-chrome + # - mochitest-clipboard + # - mochitest-devtools-chrome + # - mochitest-gpu + # - mochitest-jetpack + # - mochitest-media + # - mochitest-other + - mochitest-webgl + # - reftest + # - web-platform-tests + # - web-platform-tests-reftests + # - xpcshell diff --git a/taskcluster/ci/desktop-test/tests.yml b/taskcluster/ci/desktop-test/tests.yml index 6debb20bc605..51077d957ede 100644 --- a/taskcluster/ci/desktop-test/tests.yml +++ b/taskcluster/ci/desktop-test/tests.yml @@ -17,6 +17,9 @@ cppunit: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -41,6 +44,9 @@ crashtest: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -77,7 +83,8 @@ firefox-ui-functional-local: - firefox_ui_tests/taskcluster.py - remove_executables.py extra-options: - - "--tag local" + - "--tag" + - "local" firefox-ui-functional-remote: description: "Firefox-ui-tests functional run" @@ -92,7 +99,8 @@ firefox-ui-functional-remote: - firefox_ui_tests/taskcluster.py - remove_executables.py extra-options: - - "--tag remote" + - "--tag" + - "remote" gtest: description: "GTests run" @@ -107,6 +115,9 @@ gtest: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -129,6 +140,9 @@ jittest: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -150,6 +164,9 @@ jsreftest: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -183,6 +200,7 @@ mochitest: default: ['all'] chunks: by-test-platform: + macosx.*: 5 win.*: 5 default: 10 e10s: @@ -198,6 +216,9 @@ mochitest: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -226,6 +247,9 @@ mochitest-a11y: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -267,6 +291,9 @@ mochitest-browser-chrome: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -292,7 +319,10 @@ mochitest-chrome: suite: mochitest/chrome treeherder-symbol: tc-M(c) loopback-video: true - chunks: 3 + chunks: + by-test-platform: + macosx.*: 1 + default: 3 e10s: false mozharness: script: desktop_unittest.py @@ -301,6 +331,9 @@ mochitest-chrome: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -321,6 +354,9 @@ mochitest-clipboard: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -359,6 +395,9 @@ mochitest-devtools-chrome: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -396,6 +435,9 @@ mochitest-gpu: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -417,6 +459,9 @@ mochitest-jetpack: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -440,12 +485,37 @@ mochitest-media: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py extra-options: - --mochitest-suite=mochitest-media +mochitest-other: + description: "Mochitest other" + suite: mochitest/other + treeherder-symbol: tc-M(oth) + e10s: false + max-run-time: 5400 + mozharness: + script: mozharness/scripts/desktop_unittest.py + no-read-buildbot-config: true + include-blob-upload-branch: true + chunked: true + config: + by-test-platform: + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py + default: + - unittests/linux_unittest.py + - remove_executables.py + extra-options: + - --mochitest-suite=chrome,a11y + mochitest-webgl: description: "Mochitest webgl run" suite: mochitest/mochitest-gl @@ -460,6 +530,9 @@ mochitest-webgl: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -472,8 +545,11 @@ reftest: description: "Reftest run" suite: reftest/reftest treeherder-symbol: tc-R(R) - chunks: 8 docker-image: {"in-tree": "desktop1604-test"} + chunks: + by-test-platform: + macosx.*: 1 + default: 8 mozharness: script: desktop_unittest.py no-read-buildbot-config: true @@ -481,6 +557,9 @@ reftest: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -491,8 +570,11 @@ reftest-no-accel: description: "Reftest not accelerated run" suite: reftest/reftest-no-accel treeherder-symbol: tc-R(Ru) - chunks: 8 docker-image: {"in-tree": "desktop1604-test"} + chunks: + by-test-platform: + macosx.*: 1 + default: 8 mozharness: script: desktop_unittest.py no-read-buildbot-config: true @@ -500,6 +582,9 @@ reftest-no-accel: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py @@ -510,7 +595,10 @@ web-platform-tests: description: "Web platform test run" suite: web-platform-tests treeherder-symbol: tc-W() - chunks: 12 + chunks: + by-test-platform: + macosx.*: 5 + default: 12 max-run-time: 7200 instance-size: xlarge docker-image: {"in-tree": "desktop1604-test"} @@ -581,6 +669,7 @@ xpcshell: chunks: by-test-platform: # win.*: 1 + macosx.*: 1 linux64/debug: 10 default: 8 max-run-time: 5400 @@ -592,6 +681,9 @@ xpcshell: by-test-platform: win.*: - unittests/win_taskcluster_unittest.py + macosx.*: + - remove_executables.py + - unittests/mac_unittest.py default: - unittests/linux_unittest.py - remove_executables.py diff --git a/taskcluster/docs/parameters.rst b/taskcluster/docs/parameters.rst index 336607413069..8514259cef09 100644 --- a/taskcluster/docs/parameters.rst +++ b/taskcluster/docs/parameters.rst @@ -11,12 +11,21 @@ a full parameters file as one of its output artifacts. The other ``mach taskgraph`` commands can take this file as input. This can be very helpful when working on a change to the task graph. +When experimenting with local runs of the task-graph generation, it is always +best to find a recent decision task's ``parameters.yml`` file, and modify that +file if necessary, rather than starting from scratch. This ensures you have a +complete set of parameters. + The properties of the parameters object are described here, divided rougly by topic. Push Information ---------------- +``triggered_by`` + The event that precipitated this decision task; one of ``"nightly"`` or + ``"push"``. + ``base_repository`` The repository from which to do an initial clone, utilizing any available caching. @@ -66,9 +75,10 @@ Tree Information ``cedar``. ``level`` - The SCM level associated with this tree. This dictates the names - of resources used in the generated tasks, and those tasks will fail if it - is incorrect. + The `SCM level + `_ + associated with this tree. This dictates the names of resources used in the + generated tasks, and those tasks will fail if it is incorrect. Target Set ---------- @@ -79,20 +89,9 @@ those in the target set, recursively. In a decision task, this set can be specified programmatically using one of a variety of methods (e.g., parsing try syntax or reading a project-specific configuration file). -The decision task writes its task set to the ``target_tasks.json`` artifact, -and this can be copied into ``parameters.target_tasks`` and -``parameters.target_tasks_method`` set to ``"from_parameters"`` for debugging -with other ``mach taskgraph`` commands. - ``target_tasks_method`` - (optional) The method to use to determine the target task set. This is the - suffix of one of the functions in ``tascluster/taskgraph/target_tasks.py``. - If omitted, all tasks are targeted. - -``target_tasks`` - (optional) The target set method ``from_parameters`` reads the target set, as - a list of task labels, from this parameter. + The method to use to determine the target task set. This is the suffix of + one of the functions in ``tascluster/taskgraph/target_tasks.py``. ``optimize_target_tasks`` - (optional; default True) If true, then target tasks are eligible for - optimization. + If true, then target tasks are eligible for optimization. diff --git a/taskcluster/mach_commands.py b/taskcluster/mach_commands.py index bdfa96a3a325..87ffbbf719d5 100644 --- a/taskcluster/mach_commands.py +++ b/taskcluster/mach_commands.py @@ -217,6 +217,7 @@ class MachCommands(MachCommandBase): try: self.setup_logging(quiet=options['quiet'], verbose=options['verbose']) parameters = taskgraph.parameters.load_parameters_file(options) + parameters.check() target_tasks_method = parameters.get('target_tasks_method', 'all_tasks') target_tasks_method = taskgraph.target_tasks.get_method(target_tasks_method) diff --git a/taskcluster/scripts/tester/test-macosx.sh b/taskcluster/scripts/tester/test-macosx.sh new file mode 100644 index 000000000000..81c2cb6e1715 --- /dev/null +++ b/taskcluster/scripts/tester/test-macosx.sh @@ -0,0 +1,52 @@ +#! /bin/bash -xe + +set -x -e + +echo "running as" $(id) + +#### +# Taskcluster friendly wrapper for performing fx Mac OSX tests via mozharness. +#### + +# Inputs, with defaults + +: MOZHARNESS_URL ${MOZHARNESS_URL} +: MOZHARNESS_SCRIPT ${MOZHARNESS_SCRIPT} +: MOZHARNESS_CONFIG ${MOZHARNESS_CONFIG} + +WORKSPACE=$HOME +cd $WORKSPACE + +rm -rf artifacts +mkdir artifacts + +# test required parameters are supplied +if [[ -z ${MOZHARNESS_URL} ]]; then fail "MOZHARNESS_URL is not set"; fi +if [[ -z ${MOZHARNESS_SCRIPT} ]]; then fail "MOZHARNESS_SCRIPT is not set"; fi +if [[ -z ${MOZHARNESS_CONFIG} ]]; then fail "MOZHARNESS_CONFIG is not set"; fi + +# Unzip the mozharness ZIP file created by the build task +if ! curl --fail -o mozharness.zip --retry 10 -L $MOZHARNESS_URL; then + fail "failed to download mozharness zip" +fi +rm -rf mozharness +unzip -q mozharness.zip +rm mozharness.zip + +# For telemetry purposes, the build process wants information about the +# source it is running; tc-vcs obscures this a little, but we can provide +# it directly. +export MOZ_SOURCE_REPO="${GECKO_HEAD_REPOSITORY}" +export MOZ_SOURCE_CHANGESET="${GECKO_HEAD_REV}" + +# support multiple, space delimited, config files +config_cmds="" +for cfg in $MOZHARNESS_CONFIG; do + config_cmds="${config_cmds} --config-file ${cfg}" +done + +rm -rf build logs properties target.dmg + +# run the given mozharness script and configs, but pass the rest of the +# arguments in from our own invocation +python2.7 $WORKSPACE/mozharness/scripts/${MOZHARNESS_SCRIPT} ${config_cmds} "${@}" diff --git a/taskcluster/taskgraph/parameters.py b/taskcluster/taskgraph/parameters.py index 8766d61cbeae..51b9e77c7edb 100644 --- a/taskcluster/taskgraph/parameters.py +++ b/taskcluster/taskgraph/parameters.py @@ -10,10 +10,46 @@ import json import yaml from mozbuild.util import ReadOnlyDict +# Please keep this list sorted and in sync with taskcluster/docs/parameters.rst +PARAMETER_NAMES = set([ + 'base_repository', + 'build_date', + 'head_ref', + 'head_repository', + 'head_rev', + 'level', + 'message', + 'moz_build_date', + 'optimize_target_tasks', + 'owner', + 'project', + 'pushdate', + 'pushlog_id', + 'target_tasks_method', + 'triggered_by', +]) + class Parameters(ReadOnlyDict): """An immutable dictionary with nicer KeyError messages on failure""" + def check(self): + names = set(self) + msg = [] + + missing = PARAMETER_NAMES - names + if missing: + msg.append("missing parameters: " + ", ".join(missing)) + + extra = names - PARAMETER_NAMES + if extra: + msg.append("extra parameters: " + ", ".join(extra)) + + if msg: + raise Exception("; ".join(msg)) + def __getitem__(self, k): + if k not in PARAMETER_NAMES: + raise KeyError("no such parameter {!r}".format(k)) try: return super(Parameters, self).__getitem__(k) except KeyError: diff --git a/taskcluster/taskgraph/target_tasks.py b/taskcluster/taskgraph/target_tasks.py index e25e098a4e90..c9feb36f104d 100644 --- a/taskcluster/taskgraph/target_tasks.py +++ b/taskcluster/taskgraph/target_tasks.py @@ -34,14 +34,6 @@ def get_method(method): return _target_task_methods[method] -@_target_task('from_parameters') -def target_tasks_from_parameters(full_task_graph, parameters): - """Get the target task set from parameters['target_tasks']. This is - useful for re-running a decision task with the same target set as in an - earlier run, by copying `target_tasks.json` into `parameters.yml`.""" - return parameters['target_tasks'] - - @_target_task('try_option_syntax') def target_tasks_try_option_syntax(full_task_graph, parameters): """Generate a list of target tasks based on try syntax in diff --git a/taskcluster/taskgraph/test/test_parameters.py b/taskcluster/taskgraph/test/test_parameters.py index 61f979174242..43d853d7b16a 100644 --- a/taskcluster/taskgraph/test/test_parameters.py +++ b/taskcluster/taskgraph/test/test_parameters.py @@ -6,26 +6,45 @@ from __future__ import absolute_import, print_function, unicode_literals import unittest -from ..parameters import Parameters, load_parameters_file +from ..parameters import Parameters, load_parameters_file, PARAMETER_NAMES from mozunit import main, MockedOpen class TestParameters(unittest.TestCase): + vals = {n: n for n in PARAMETER_NAMES} + def test_Parameters_immutable(self): - p = Parameters(x=10, y=20) + p = Parameters(**self.vals) def assign(): - p['x'] = 20 + p['head_ref'] = 20 self.assertRaises(Exception, assign) - def test_Parameters_KeyError(self): - p = Parameters(x=10, y=20) + def test_Parameters_missing_KeyError(self): + p = Parameters(**self.vals) self.assertRaises(KeyError, lambda: p['z']) + def test_Parameters_invalid_KeyError(self): + """even if the value is present, if it's not a valid property, raise KeyError""" + p = Parameters(xyz=10, **self.vals) + self.assertRaises(KeyError, lambda: p['xyz']) + def test_Parameters_get(self): - p = Parameters(x=10, y=20) - self.assertEqual(p['x'], 10) + p = Parameters(head_ref=10, level=20) + self.assertEqual(p['head_ref'], 10) + + def test_Parameters_check(self): + p = Parameters(**self.vals) + p.check() # should not raise + + def test_Parameters_check_missing(self): + p = Parameters() + self.assertRaises(Exception, lambda: p.check()) + + def test_Parameters_check_extra(self): + p = Parameters(xyz=10, **self.vals) + self.assertRaises(Exception, lambda: p.check()) def test_load_parameters_file_yaml(self): with MockedOpen({"params.yml": "some: data\n"}): diff --git a/taskcluster/taskgraph/test/test_target_tasks.py b/taskcluster/taskgraph/test/test_target_tasks.py index e997e505c479..035ccefd83f1 100644 --- a/taskcluster/taskgraph/test/test_target_tasks.py +++ b/taskcluster/taskgraph/test/test_target_tasks.py @@ -26,11 +26,6 @@ class FakeTryOptionSyntax(object): class TestTargetTasks(unittest.TestCase): - def test_from_parameters(self): - method = target_tasks.get_method('from_parameters') - self.assertEqual(method(None, {'target_tasks': ['a', 'b']}), - ['a', 'b']) - def default_matches(self, run_on_projects, project): method = target_tasks.get_method('default') graph = TaskGraph(tasks={ diff --git a/taskcluster/taskgraph/test/test_transforms_base.py b/taskcluster/taskgraph/test/test_transforms_base.py index 0dc719565bdc..0a0dfcaf29cf 100644 --- a/taskcluster/taskgraph/test/test_transforms_base.py +++ b/taskcluster/taskgraph/test/test_transforms_base.py @@ -81,6 +81,20 @@ class TestKeyedBy(unittest.TestCase): } self.assertEqual(get_keyed_by(test, 'option', 'x'), 20) + def test_by_value_regex(self): + test = { + 'test-name': 'tname', + 'option': { + 'by-test-platform': { + 'macosx64/.*': 10, + 'linux64/debug': 20, + 'default': 5, + }, + }, + 'test-platform': 'macosx64/debug', + } + self.assertEqual(get_keyed_by(test, 'option', 'x'), 10) + def test_by_value_default(self): test = { 'test-name': 'tname', diff --git a/taskcluster/taskgraph/transforms/gecko_v2_whitelist.py b/taskcluster/taskgraph/transforms/gecko_v2_whitelist.py index dfa58e9f2864..3817faa50473 100644 --- a/taskcluster/taskgraph/transforms/gecko_v2_whitelist.py +++ b/taskcluster/taskgraph/transforms/gecko_v2_whitelist.py @@ -47,6 +47,7 @@ JOB_NAME_WHITELIST = set([ 'macosx64-st-an-opt', 'nexus-5-l-eng-debug', 'nexus-5-l-eng-opt', + 'osx-10-10', 'shell-haz-debug', 'sm-arm64-sim-debug', 'sm-arm-sim-debug', diff --git a/taskcluster/taskgraph/transforms/task.py b/taskcluster/taskgraph/transforms/task.py index c5e623345540..334bef1227ab 100644 --- a/taskcluster/taskgraph/transforms/task.py +++ b/taskcluster/taskgraph/transforms/task.py @@ -250,6 +250,30 @@ task_description_schema = Schema({ 'product': basestring, Extra: basestring, # additional properties are allowed }, + }, { + 'implementation': 'macosx-engine', + + # A link for an executable to download + Optional('link'): basestring, + + # the command to run + Required('command'): [taskref_or_string], + + # environment variables + Optional('env'): {basestring: taskref_or_string}, + + # artifacts to extract from the task image after completion + Optional('artifacts'): [{ + # type of artifact -- simple file, or recursive directory + Required('type'): Any('file', 'directory'), + + # task image path from which to read artifact + Required('path'): basestring, + + # name of the produced artifact (root of the names for + # type=directory) + Required('name'): basestring, + }], }), # The "when" section contains descriptions of the circumstances @@ -430,6 +454,23 @@ def build_generic_worker_payload(config, task, task_def): raise Exception("retry-exit-status not supported in generic-worker") +@payload_builder('macosx-engine') +def build_macosx_engine_payload(config, task, task_def): + worker = task['worker'] + artifacts = map(lambda artifact: { + 'name': artifact['name'], + 'path': artifact['path'], + 'type': artifact['type'], + 'expires': task_def['expires'], + }, worker['artifacts']) + + task_def['payload'] = { + 'link': worker['link'], + 'command': worker['command'], + 'env': worker['env'], + 'artifacts': artifacts, + } + transforms = TransformSequence() diff --git a/taskcluster/taskgraph/transforms/tests/all_kinds.py b/taskcluster/taskgraph/transforms/tests/all_kinds.py index ae0261f121bd..f2aa1f84186a 100644 --- a/taskcluster/taskgraph/transforms/tests/all_kinds.py +++ b/taskcluster/taskgraph/transforms/tests/all_kinds.py @@ -26,6 +26,8 @@ def set_worker_implementation(config, tests): for test in tests: if test['test-platform'].startswith('win'): test['worker-implementation'] = 'generic-worker' + elif test['test-platform'].startswith('macosx'): + test['worker-implementation'] = 'macosx-engine' else: test['worker-implementation'] = 'docker-worker' yield test diff --git a/taskcluster/taskgraph/transforms/tests/desktop_test.py b/taskcluster/taskgraph/transforms/tests/desktop_test.py index 6053efac7c14..44a907903e20 100644 --- a/taskcluster/taskgraph/transforms/tests/desktop_test.py +++ b/taskcluster/taskgraph/transforms/tests/desktop_test.py @@ -21,7 +21,12 @@ transforms = TransformSequence() @transforms.add def set_defaults(config, tests): for test in tests: - test['mozharness']['build-artifact-name'] = 'public/build/target.tar.bz2' + build_platform = test['build-platform'] + if build_platform.startswith('macosx'): + target = 'target.dmg' + else: + target = 'target.tar.bz2' + test['mozharness']['build-artifact-name'] = 'public/build/' + target # all desktop tests want to run the bits that require node test['mozharness']['set-moz-node-path'] = True yield test @@ -35,7 +40,9 @@ def set_treeherder_machine_platform(config, tests): # platforms translation = { 'linux64-asan/opt': 'linux64/asan', - 'linux64-pgo/opt': 'linux64/pgo' + 'linux64-pgo/opt': 'linux64/pgo', + 'macosx64/debug': 'osx-10-10/debug', + 'macosx64/opt': 'osx-10-10/opt', } for test in tests: build_platform = test['build-platform'] diff --git a/taskcluster/taskgraph/transforms/tests/make_task_description.py b/taskcluster/taskgraph/transforms/tests/make_task_description.py index fd55d66a51f8..258c76f0252d 100644 --- a/taskcluster/taskgraph/transforms/tests/make_task_description.py +++ b/taskcluster/taskgraph/transforms/tests/make_task_description.py @@ -25,6 +25,7 @@ from taskgraph.transforms.job.common import ( ) import logging +import os.path ARTIFACT_URL = 'https://queue.taskcluster.net/v1/task/{}/artifacts/{}' WORKER_TYPE = { @@ -40,6 +41,13 @@ WORKER_TYPE = { 'windows10-64': 'aws-provisioner-v1/gecko-t-win10-64-gpu' } +ARTIFACTS = [ + # (artifact name prefix, in-image path) + ("public/logs/", "build/upload/logs/"), + ("public/test", "artifacts/"), + ("public/test_info/", "build/blobber_upload_dir/"), +] + logger = logging.getLogger(__name__) transforms = TransformSequence() @@ -157,7 +165,7 @@ def docker_worker_setup(config, test, taskdesc): worker['artifacts'] = [{ 'name': prefix, - 'path': path, + 'path': os.path.join('/home/worker/workspace', path), 'type': 'directory', } for (prefix, path) in artifacts] @@ -369,3 +377,69 @@ def generic_worker_setup(config, test, taskdesc): 'xcopy build\\blobber_upload_dir public\\test_info /e /i', 'copy /y logs\\*.* public\\logs\\' ] + + +@worker_setup_function("macosx-engine") +def macosx_engine_setup(config, test, taskdesc): + mozharness = test['mozharness'] + + installer_url = ARTIFACT_URL.format('', mozharness['build-artifact-name']) + test_packages_url = ARTIFACT_URL.format('', + 'public/build/target.test_packages.json') + mozharness_url = ARTIFACT_URL.format('', + 'public/build/mozharness.zip') + + # for now we have only 10.10 machines + taskdesc['worker-type'] = 'tc-worker-provisioner/gecko-t-osx-10-10' + + worker = taskdesc['worker'] = {} + worker['implementation'] = test['worker-implementation'] + + worker['artifacts'] = [{ + 'name': prefix.rstrip('/'), + 'path': path.rstrip('/'), + 'type': 'directory', + } for (prefix, path) in ARTIFACTS] + + worker['env'] = { + 'GECKO_HEAD_REPOSITORY': config.params['head_repository'], + 'GECKO_HEAD_REV': config.params['head_rev'], + 'MOZHARNESS_CONFIG': ' '.join(mozharness['config']), + 'MOZHARNESS_SCRIPT': mozharness['script'], + 'MOZHARNESS_URL': {'task-reference': mozharness_url}, + 'MOZILLA_BUILD_URL': {'task-reference': installer_url}, + } + + # assemble the command line + + worker['link'] = '{}/raw-file/{}/taskcluster/scripts/tester/test-macosx.sh'.format( + config.params['head_repository'], config.params['head_rev'] + ) + + command = worker['command'] = ["./test-macosx.sh"] + if mozharness.get('no-read-buildbot-config'): + command.append("--no-read-buildbot-config") + command.extend([ + {"task-reference": "--installer-url=" + installer_url}, + {"task-reference": "--test-packages-url=" + test_packages_url}, + ]) + if mozharness.get('include-blob-upload-branch'): + command.append('--blob-upload-branch=' + config.params['project']) + command.extend(mozharness.get('extra-options', [])) + + # TODO: remove the need for run['chunked'] + if mozharness.get('chunked') or test['chunks'] > 1: + # Implement mozharness['chunking-args'], modifying command in place + if mozharness['chunking-args'] == 'this-chunk': + command.append('--total-chunk={}'.format(test['chunks'])) + command.append('--this-chunk={}'.format(test['this-chunk'])) + elif mozharness['chunking-args'] == 'test-suite-suffix': + suffix = mozharness['chunk-suffix'].replace('', str(test['this-chunk'])) + for i, c in enumerate(command): + if isinstance(c, basestring) and c.startswith('--test-suite'): + command[i] += suffix + + if 'download-symbols' in mozharness: + download_symbols = mozharness['download-symbols'] + download_symbols = {True: 'true', False: 'false'}.get(download_symbols, download_symbols) + command.append('--download-symbols=' + download_symbols) diff --git a/taskcluster/taskgraph/transforms/tests/test_description.py b/taskcluster/taskgraph/transforms/tests/test_description.py index aa99f7534c7d..1365919fe3a4 100644 --- a/taskcluster/taskgraph/transforms/tests/test_description.py +++ b/taskcluster/taskgraph/transforms/tests/test_description.py @@ -106,6 +106,7 @@ test_description_schema = Schema({ # test platform. Optional('worker-implementation'): Any( 'docker-worker', + 'macosx-engine', 'generic-worker', # coming soon: 'docker-engine', @@ -168,6 +169,9 @@ test_description_schema = Schema({ # buildbot config file, so tell it not to do so in TaskCluster Required('no-read-buildbot-config', default=False): bool, + # Add --blob-upload-branch= mozharness parameter + Optional('include-blob-upload-branch'): bool, + # The setting for --download-symbols (if omitted, the option will not # be passed to mozharness) Optional('download-symbols'): Any(True, 'ondemand'), diff --git a/taskcluster/taskgraph/util/seta.py b/taskcluster/taskgraph/util/seta.py index 372f4b61b879..a0cd30675ab3 100644 --- a/taskcluster/taskgraph/util/seta.py +++ b/taskcluster/taskgraph/util/seta.py @@ -11,7 +11,7 @@ headers = { # It's a list of project name which SETA is useful on SETA_PROJECTS = ['mozilla-inbound', 'autoland'] -SETA_ENDPOINT = "http://seta.herokuapp.com/data/setadetails/?branch=%s" +SETA_ENDPOINT = "https://seta.herokuapp.com/data/setadetails/?branch=%s" class SETA(object): @@ -45,6 +45,10 @@ class SETA(object): if len(task_list) > 0: low_value_tasks = task_list.values()[0] + # Bug 1315145, disable SETA for tier-1 platforms until backfill is implemented. + low_value_tasks = [x for x in low_value_tasks if x.find('debug') == -1] + low_value_tasks = [x for x in low_value_tasks if x.find('asan') == -1] + # In the event of request times out, requests will raise a TimeoutError. except exceptions.Timeout: logger.warning("SETA server is timeout, we will treat all test tasks as high value.") diff --git a/testing/marionette/client/marionette_driver/decorators.py b/testing/marionette/client/marionette_driver/decorators.py index 783bec6e05e0..b04e3d0320e6 100644 --- a/testing/marionette/client/marionette_driver/decorators.py +++ b/testing/marionette/client/marionette_driver/decorators.py @@ -2,11 +2,8 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -from errors import MarionetteException from functools import wraps import socket -import sys -import traceback def _find_marionette_in_args(*args, **kwargs): @@ -18,46 +15,18 @@ def _find_marionette_in_args(*args, **kwargs): return m -def do_process_check(func, always=False): - """Decorator which checks the process after the function has run. - - There is a check for crashes which always gets executed. And in the case of - connection issues the process will be force closed. - - :param always: If False, only checks for crashes if an exception - was raised. If True, always checks for crashes. - """ +def do_process_check(func): + """Decorator which checks the process status after the function has run.""" @wraps(func) def _(*args, **kwargs): - m = _find_marionette_in_args(*args, **kwargs) - - def check_for_crash(): - try: - m.check_for_crash() - except: - # don't want to lose the original exception - traceback.print_exc() - try: return func(*args, **kwargs) - except (MarionetteException, IOError) as e: - exc, val, tb = sys.exc_info() + except (socket.error, socket.timeout): + # In case of socket failures which will also include crashes of the + # application, make sure to handle those correctly. + m = _find_marionette_in_args(*args, **kwargs) + m.handle_socket_failure() - # In case of no Marionette failures ensure to check for possible crashes. - # Do it before checking for port disconnects, to avoid reporting of unrelated - # crashes due to a forced shutdown of the application. - if not isinstance(e, MarionetteException) or type(e) is MarionetteException: - if not always: - check_for_crash() - - # In case of socket failures force a shutdown of the application - if type(e) in (socket.error, socket.timeout): - m.force_shutdown() - - raise exc, val, tb - finally: - if always: - check_for_crash(m) return _ diff --git a/testing/marionette/client/marionette_driver/geckoinstance.py b/testing/marionette/client/marionette_driver/geckoinstance.py index e601b26a974f..113ce3b7644e 100644 --- a/testing/marionette/client/marionette_driver/geckoinstance.py +++ b/testing/marionette/client/marionette_driver/geckoinstance.py @@ -153,7 +153,9 @@ class GeckoInstance(object): # environment variables needed for crashreporting # https://developer.mozilla.org/docs/Environment_variables_affecting_crash_reporting env.update({'MOZ_CRASHREPORTER': '1', - 'MOZ_CRASHREPORTER_NO_REPORT': '1'}) + 'MOZ_CRASHREPORTER_NO_REPORT': '1', + 'MOZ_CRASHREPORTER_SHUTDOWN': '1', + }) return { 'binary': self.binary, diff --git a/testing/marionette/client/marionette_driver/marionette.py b/testing/marionette/client/marionette_driver/marionette.py index 1a70725ab751..06501d69ec95 100644 --- a/testing/marionette/client/marionette_driver/marionette.py +++ b/testing/marionette/client/marionette_driver/marionette.py @@ -572,6 +572,7 @@ class Marionette(object): self._test_name = None self.timeout = timeout self.socket_timeout = socket_timeout + self.crashed = 0 startup_timeout = startup_timeout or self.DEFAULT_STARTUP_TIMEOUT if self.bin: @@ -621,7 +622,6 @@ class Marionette(object): # hit an exception/died or the connection died. We can # do no further server-side cleanup in this case. pass - self.session = None if self.instance: self.instance.close() @@ -721,11 +721,8 @@ class Marionette(object): else: msg = self.client.request(name, params) - except socket.timeout: - self.session = None - self.window = None - self.client.close() - + except IOError: + self.delete_session(send_request=False) raise res, err = msg.result, msg.error @@ -783,36 +780,51 @@ class Marionette(object): self.set_page_load_timeout(30000) def check_for_crash(self): - returncode = None - name = None - crashed = False + """Check if the process crashed. + + :returns: True, if a crash happened since the method has been called the last time. + """ + crash_count = 0 + if self.instance: - if self.instance.runner.check_for_crashes( - test_name=self.test_name or os.path.basename(__file__)): - crashed = True - if returncode is not None: - print ('PROCESS-CRASH | {0} | abnormal termination with exit code {1}' - .format(name, returncode)) - return crashed + name = self.test_name or 'marionette.py' + crash_count = self.instance.runner.check_for_crashes(test_name=name) + self.crashed = self.crashed + crash_count - def force_shutdown(self): - """Force a shutdown of the running instance. + return crash_count > 0 - If we've launched the binary we are connected to, wait for it to shut down. - In the case when it doesn't happen, force its shut down. + def handle_socket_failure(self): + """Handle socket failures for the currently running application instance. + + If the application crashed then clean-up internal states, or in case of a content + crash also kill the process. If there are other reasons for a socket failure, + wait for the process to shutdown itself, or force kill it. """ if self.instance: exc, val, tb = sys.exc_info() - # Give the application some time to shutdown + # Somehow the socket disconnected. Give the application some time to shutdown + # itself before killing the process. returncode = self.instance.runner.wait(timeout=self.DEFAULT_SHUTDOWN_TIMEOUT) + if returncode is None: - self.cleanup() - message = ('Process killed because the connection to Marionette server is lost.' - ' Check gecko.log for errors') + message = ('Process killed because the connection to Marionette server is ' + 'lost. Check gecko.log for errors') + self.quit() else: - message = 'Process has been closed (Exit code: {returncode})' + # If Firefox quit itself check if there was a crash + crash_count = self.check_for_crash() + + if crash_count > 0: + if returncode == 0: + message = 'Content process crashed' + else: + message = 'Process crashed (Exit code: {returncode})' + else: + message = 'Process has been unexpectedly closed (Exit code: {returncode})' + + self.delete_session(send_request=False, reset_session_id=True) if exc: message += ' (Reason: {reason})' @@ -1135,12 +1147,14 @@ class Marionette(object): callback() else: self._request_in_app_shutdown() - self.delete_session(in_app=True) + + # Ensure to explicitely mark the session as deleted + self.delete_session(send_request=False, reset_session_id=True) # Give the application some time to shutdown self.instance.runner.wait(timeout=self.DEFAULT_SHUTDOWN_TIMEOUT) else: - self.delete_session() + self.delete_session(reset_session_id=True) self.instance.close() @do_process_check @@ -1174,7 +1188,9 @@ class Marionette(object): callback() else: self._request_in_app_shutdown("eRestart") - self.delete_session(in_app=True) + + # Ensure to explicitely mark the session as deleted + self.delete_session(send_request=False, reset_session_id=True) try: self.raise_for_port() @@ -1221,7 +1237,11 @@ class Marionette(object): :param session_id: unique identifier for the session. If no session id is passed in then one will be generated by the marionette server. - :returns: A dict of the capabilities offered.""" + :returns: A dict of the capabilities offered. + + """ + self.crashed = 0 + if self.instance: returncode = self.instance.runner.returncode if returncode is not None: @@ -1255,19 +1275,25 @@ class Marionette(object): self._send_message("setTestName", {"value": test_name}) self._test_name = test_name - def delete_session(self, in_app=False): + def delete_session(self, send_request=True, reset_session_id=False): """Close the current session and disconnect from the server. - :param in_app: False, if the session should be closed from the client. - Otherwise a request to quit or restart the instance from - within the application itself is used. + :param send_request: Optional, if `True` a request to close the session on + the server side will be send. Use `False` in case of eg. in_app restart() + or quit(), which trigger a deletion themselves. Defaults to `True`. + :param reset_session_id: Optional, if `True` the current session id will + be reset, which will require an explicit call to `start_session()` before + the test can continue. Defaults to `False`. """ - if not in_app: - self._send_message("deleteSession") - self.session_id = None - self.session = None - self.window = None - self.client.close() + try: + if send_request: + self._send_message("deleteSession") + finally: + if reset_session_id: + self.session_id = None + self.session = None + self.window = None + self.client.close() @property def session_capabilities(self): diff --git a/testing/marionette/client/marionette_driver/transport.py b/testing/marionette/client/marionette_driver/transport.py index 1e3df4f94d92..82828fdef1ff 100644 --- a/testing/marionette/client/marionette_driver/transport.py +++ b/testing/marionette/client/marionette_driver/transport.py @@ -125,7 +125,7 @@ class TcpTransport(object): """ self.addr = addr self.port = port - self.socket_timeout = socket_timeout + self._socket_timeout = socket_timeout self.protocol = 1 self.application_type = None @@ -133,6 +133,16 @@ class TcpTransport(object): self.expected_response = None self.sock = None + @property + def socket_timeout(self): + return self._socket_timeout + + @socket_timeout.setter + def socket_timeout(self, value): + if self.sock: + self.sock.settimeout(value) + self._socket_timeout = value + def _unmarshal(self, packet): msg = None @@ -276,7 +286,13 @@ class TcpTransport(object): def close(self): """Close the socket.""" if self.sock: - self.sock.shutdown(socket.SHUT_RDWR) + try: + self.sock.shutdown(socket.SHUT_RDWR) + except IOError as exc: + # Errno 57 is "socket not connected", which we don't care about here. + if exc.errno != 57: + raise + self.sock.close() self.sock = None diff --git a/testing/marionette/client/requirements.txt b/testing/marionette/client/requirements.txt index b251903579ec..63fea713ca7f 100644 --- a/testing/marionette/client/requirements.txt +++ b/testing/marionette/client/requirements.txt @@ -1 +1 @@ -mozrunner >= 6.12 +mozrunner >= 6.13 diff --git a/testing/marionette/harness/marionette/__init__.py b/testing/marionette/harness/marionette/__init__.py index 0ed54ffa8a31..ab328af9b012 100644 --- a/testing/marionette/harness/marionette/__init__.py +++ b/testing/marionette/harness/marionette/__init__.py @@ -9,6 +9,7 @@ from .marionette_test import ( expectedFailure, MarionetteJSTestCase, MarionetteTestCase, + run_if_e10s, skip, skip_if_chrome, skip_if_desktop, diff --git a/testing/marionette/harness/marionette/marionette_test/__init__.py b/testing/marionette/harness/marionette/marionette_test/__init__.py index 19f14a90e119..91c033543e46 100644 --- a/testing/marionette/harness/marionette/marionette_test/__init__.py +++ b/testing/marionette/harness/marionette/marionette_test/__init__.py @@ -8,6 +8,7 @@ __version__ = '3.1.0' from .decorators import ( expectedFailure, parameterized, + run_if_e10s, skip, skip_if_chrome, skip_if_desktop, diff --git a/testing/marionette/harness/marionette/marionette_test/decorators.py b/testing/marionette/harness/marionette/marionette_test/decorators.py index fd83236a1296..d5e177114fd9 100644 --- a/testing/marionette/harness/marionette/marionette_test/decorators.py +++ b/testing/marionette/harness/marionette/marionette_test/decorators.py @@ -61,6 +61,23 @@ def parameterized(func_suffix, *args, **kwargs): return wrapped +def run_if_e10s(target): + """Decorator which runs a test if e10s mode is active.""" + def wrapper(self, *args, **kwargs): + with self.marionette.using_context('chrome'): + multi_process_browser = self.marionette.execute_script(""" + try { + return Services.appinfo.browserTabsRemoteAutostart; + } catch (e) { + return false; + }""") + + if not multi_process_browser: + raise SkipTest('skipping due to e10s is disabled') + return target(self, *args, **kwargs) + return wrapper + + def skip(reason): """Decorator which unconditionally skips a test.""" def decorator(test_item): diff --git a/testing/marionette/harness/marionette/marionette_test/testcases.py b/testing/marionette/harness/marionette/marionette_test/testcases.py index 599d56341703..b582d6d4eb5a 100644 --- a/testing/marionette/harness/marionette/marionette_test/testcases.py +++ b/testing/marionette/harness/marionette/marionette_test/testcases.py @@ -6,7 +6,6 @@ import imp import os import re import sys -import socket import time import types import unittest @@ -274,13 +273,9 @@ class CommonTestCase(unittest.TestCase): self.loglines = [['Error getting log: {}'.format(inst)]] try: self.marionette.delete_session() - except (socket.error, MarionetteException, IOError): + except IOError: # Gecko has crashed? - self.marionette.session = None - try: - self.marionette.client.close() - except socket.error: - pass + pass self.marionette = None def setup_SpecialPowers_observer(self): @@ -484,7 +479,7 @@ class MarionetteTestCase(CommonTestCase): if not self.marionette.session: self.marionette.start_session() - if not self.marionette.check_for_crash(): + if not self.marionette.crashed: try: self.marionette.clear_imported_scripts() self.marionette.execute_script("log('TEST-END: {0}:{1}')" diff --git a/testing/marionette/harness/marionette/runner/base.py b/testing/marionette/harness/marionette/runner/base.py index a7cad2de0248..4e154ce5bec8 100644 --- a/testing/marionette/harness/marionette/runner/base.py +++ b/testing/marionette/harness/marionette/runner/base.py @@ -23,7 +23,6 @@ import mozprofile from manifestparser import TestManifest from manifestparser.filters import tags from marionette_driver.marionette import Marionette -from mozlog import get_default_logger from moztest.adapters.unit import StructuredTestRunner, StructuredTestResult from moztest.results import TestResultCollection, TestResult, relevant_line import mozversion @@ -296,6 +295,7 @@ class BaseMarionetteArguments(ArgumentParser): "'file.ini:section' to specify a particular section.") self.add_argument('--addon', action='append', + dest='addons', help="addon to install; repeat for multiple addons.") self.add_argument('--repeat', type=int, @@ -567,9 +567,8 @@ class BaseMarionetteTestRunner(object): rv['screenshot'] = marionette.screenshot() with marionette.using_context(marionette.CONTEXT_CONTENT): rv['source'] = marionette.page_source - except Exception: - logger = get_default_logger() - logger.warning('Failed to gather test failure debug.', exc_info=True) + except Exception as exc: + self.logger.warning('Failed to gather test failure debug: {}'.format(exc)) return rv self.result_callbacks.append(gather_debug) diff --git a/testing/marionette/harness/marionette/tests/harness_unit/conftest.py b/testing/marionette/harness/marionette/tests/harness_unit/conftest.py index 69db83603861..6169b95bbcab 100644 --- a/testing/marionette/harness/marionette/tests/harness_unit/conftest.py +++ b/testing/marionette/harness/marionette/tests/harness_unit/conftest.py @@ -27,7 +27,7 @@ def mach_parsed_kwargs(logger): """ return { 'adb_path': None, - 'addon': None, + 'addons': None, 'address': None, 'app': None, 'app_args': [], diff --git a/testing/marionette/harness/marionette/tests/unit/test_crash.py b/testing/marionette/harness/marionette/tests/unit/test_crash.py new file mode 100644 index 000000000000..53e57e0deac5 --- /dev/null +++ b/testing/marionette/harness/marionette/tests/unit/test_crash.py @@ -0,0 +1,155 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +import glob +import shutil + +from marionette import MarionetteTestCase, expectedFailure, run_if_e10s +from marionette_driver.errors import MarionetteException + +# Import runner module to monkey patch mozcrash module +from mozrunner.base import runner + + +class MockMozCrash(object): + """Mock object to replace original mozcrash methods.""" + + def __init__(self, marionette): + self.marionette = marionette + + with self.marionette.using_context('chrome'): + self.crash_reporter_enabled = self.marionette.execute_script(""" + try { + Components.classes["@mozilla.org/toolkit/crash-reporter;1"]. + getService(Components.interfaces.nsICrashReporter); + return true; + } catch (exc) { + return false; + } + """) + + def check_for_crashes(self, dump_directory, *args, **kwargs): + minidump_files = glob.glob('{}/*.dmp'.format(dump_directory)) + shutil.rmtree(dump_directory, ignore_errors=True) + + if self.crash_reporter_enabled: + return len(minidump_files) + else: + return len(minidump_files) == 0 + + def log_crashes(self, logger, dump_directory, *args, **kwargs): + return self.check_for_crashes(dump_directory, *args, **kwargs) + + +class BaseCrashTestCase(MarionetteTestCase): + + # Reduce the timeout for faster processing of the tests + socket_timeout = 10 + + def setUp(self): + super(BaseCrashTestCase, self).setUp() + + self.mozcrash_mock = MockMozCrash(self.marionette) + self.crash_count = self.marionette.crashed + self.pid = self.marionette.session["processId"] + self.remote_uri = self.marionette.absolute_url("javascriptPage.html") + + def tearDown(self): + self.marionette.crashed = self.crash_count + + super(BaseCrashTestCase, self).tearDown() + + def crash(self, chrome=True): + context = 'chrome' if chrome else 'content' + sandbox = None if chrome else 'system' + + # Monkey patch mozcrash to avoid crash info output only for our triggered crashes. + mozcrash = runner.mozcrash + runner.mozcrash = self.mozcrash_mock + + socket_timeout = self.marionette.client.socket_timeout + + self.marionette.set_context(context) + try: + self.marionette.client.socket_timeout = self.socket_timeout + self.marionette.execute_script(""" + // Copied from crash me simple + Components.utils.import("resource://gre/modules/ctypes.jsm"); + + // ctypes checks for NULL pointer derefs, so just go near-NULL. + var zero = new ctypes.intptr_t(8); + var badptr = ctypes.cast(zero, ctypes.PointerType(ctypes.int32_t)); + var crash = badptr.contents; + """, sandbox=sandbox) + finally: + runner.mozcrash = mozcrash + self.marionette.client.socket_timeout = socket_timeout + + +class TestCrash(BaseCrashTestCase): + + def test_crash_chrome_process(self): + self.assertRaisesRegexp(IOError, 'Process crashed', + self.crash, chrome=True) + self.assertEqual(self.marionette.crashed, 1) + self.assertIsNone(self.marionette.session) + self.assertRaisesRegexp(MarionetteException, 'Please start a session', + self.marionette.get_url) + + self.marionette.start_session() + self.assertNotEqual(self.marionette.session['processId'], self.pid) + + # TODO: Bug 1314594 - Causes a hang for the communication between the + # chrome and frame script. + # self.marionette.get_url() + + @run_if_e10s + def test_crash_content_process(self): + # If e10s is disabled the chrome process crashes + self.marionette.navigate(self.remote_uri) + + self.assertRaisesRegexp(IOError, 'Content process crashed', + self.crash, chrome=False) + self.assertEqual(self.marionette.crashed, 1) + self.assertIsNone(self.marionette.session) + self.assertRaisesRegexp(MarionetteException, 'Please start a session', + self.marionette.get_url) + + self.marionette.start_session() + self.assertNotEqual(self.marionette.session['processId'], self.pid) + self.marionette.get_url() + + @expectedFailure + def test_unexpected_crash(self): + self.crash(chrome=True) + + +class TestCrashInSetUp(BaseCrashTestCase): + + def setUp(self): + super(TestCrashInSetUp, self).setUp() + + self.assertRaisesRegexp(IOError, 'Process crashed', + self.crash, chrome=True) + self.assertEqual(self.marionette.crashed, 1) + self.assertIsNone(self.marionette.session) + + def test_crash_in_setup(self): + self.marionette.start_session() + self.assertNotEqual(self.marionette.session['processId'], self.pid) + + +class TestCrashInTearDown(BaseCrashTestCase): + + def tearDown(self): + try: + self.assertRaisesRegexp(IOError, 'Process crashed', + self.crash, chrome=True) + finally: + self.assertEqual(self.marionette.crashed, 1) + self.assertIsNone(self.marionette.session) + super(TestCrashInTearDown, self).tearDown() + + def test_crash_in_teardown(self): + pass diff --git a/testing/marionette/harness/marionette/tests/unit/unit-tests.ini b/testing/marionette/harness/marionette/tests/unit/unit-tests.ini index a413db89dbba..da677ecd909a 100644 --- a/testing/marionette/harness/marionette/tests/unit/unit-tests.ini +++ b/testing/marionette/harness/marionette/tests/unit/unit-tests.ini @@ -140,4 +140,5 @@ skip-if = buildapp == 'b2g' || appname == 'fennec' [test_addons.py] [test_select.py] +[test_crash.py] [test_httpd.py] diff --git a/testing/marionette/harness/requirements.txt b/testing/marionette/harness/requirements.txt index 5b8f310a1ec2..ea93816c52ff 100644 --- a/testing/marionette/harness/requirements.txt +++ b/testing/marionette/harness/requirements.txt @@ -4,7 +4,7 @@ manifestparser >= 1.1 wptserve >= 1.3.0 mozinfo >= 0.8 mozprocess >= 0.9 -mozrunner >= 6.9 +mozrunner >= 6.13 mozdevice >= 0.44 mozlog >= 3.0 moznetwork >= 0.21 diff --git a/testing/mozbase/mozcrash/mozcrash/mozcrash.py b/testing/mozbase/mozcrash/mozcrash/mozcrash.py index 8dc4fa28dcd2..c39e68f3a63a 100644 --- a/testing/mozbase/mozcrash/mozcrash/mozcrash.py +++ b/testing/mozbase/mozcrash/mozcrash/mozcrash.py @@ -75,7 +75,7 @@ def check_for_crashes(dump_directory, If `quiet` is set, no PROCESS-CRASH message will be printed to stdout if a crash is detected. - Returns True if any minidumps were found, False otherwise. + Returns number of minidump files found. """ # try to get the caller's filename if no test name is given @@ -91,7 +91,9 @@ def check_for_crashes(dump_directory, if not crash_info.has_dumps: return False + crash_count = 0 for info in crash_info: + crash_count += 1 if not quiet: stackwalk_output = ["Crash dump filename: %s" % info.minidump_path] if info.stackwalk_stderr: @@ -108,7 +110,7 @@ def check_for_crashes(dump_directory, print '\n'.join(stackwalk_output) print '\n'.join(info.stackwalk_errors) - return True + return crash_count def log_crashes(logger, diff --git a/testing/mozbase/mozcrash/setup.py b/testing/mozbase/mozcrash/setup.py index 1df976db940e..da5ffa19b209 100644 --- a/testing/mozbase/mozcrash/setup.py +++ b/testing/mozbase/mozcrash/setup.py @@ -5,7 +5,7 @@ from setuptools import setup PACKAGE_NAME = 'mozcrash' -PACKAGE_VERSION = '0.17' +PACKAGE_VERSION = '1.0' # dependencies deps = ['mozfile >= 1.0', diff --git a/testing/mozbase/mozrunner/mozrunner/base/runner.py b/testing/mozbase/mozrunner/mozrunner/base/runner.py index 567ef055c450..98628f6f3355 100644 --- a/testing/mozbase/mozrunner/mozrunner/base/runner.py +++ b/testing/mozbase/mozrunner/mozrunner/base/runner.py @@ -41,6 +41,8 @@ class BaseRunner(object): self.profile = profile or self.app_ctx.profile_class(**getattr(self.app_ctx, 'profile_args', {})) + self.logger = get_default_logger() + # process environment if env is None: self.env = os.environ.copy() @@ -99,9 +101,8 @@ class BaseRunner(object): if debug_args: cmd = list(debug_args) + cmd - logger = get_default_logger() - if logger: - logger.info('Application command: %s' % ' '.join(cmd)) + if self.logger: + self.logger.info('Application command: %s' % ' '.join(cmd)) if interactive: self.process_handler = subprocess.Popen(cmd, env=self.env) # TODO: other arguments @@ -179,51 +180,51 @@ class BaseRunner(object): def check_for_crashes(self, dump_directory=None, dump_save_path=None, test_name=None, quiet=False): - """ - Check for a possible crash and output stack trace. + """Check for possible crashes and output the stack traces. :param dump_directory: Directory to search for minidump files :param dump_save_path: Directory to save the minidump files to :param test_name: Name to use in the crash output :param quiet: If `True` don't print the PROCESS-CRASH message to stdout - :returns: True if a crash was detected, otherwise False + + :returns: Number of crashes which have been detected since the last invocation """ + crash_count = 0 + if not dump_directory: dump_directory = os.path.join(self.profile.profile, 'minidumps') if not dump_save_path: dump_save_path = self.dump_save_path + if not test_name: + test_name = "runner.py" + try: - logger = get_default_logger() - if logger is not None: - if test_name is None: - test_name = "runner.py" + if self.logger: if mozcrash: - self.crashed += mozcrash.log_crashes( - logger, + crash_count = mozcrash.log_crashes( + self.logger, dump_directory, self.symbols_path, dump_save_path=dump_save_path, test=test_name) else: - logger.warning("Can not log crashes without mozcrash") + self.logger.warning("Can not log crashes without mozcrash") else: if mozcrash: - crashed = mozcrash.check_for_crashes( + crash_count = mozcrash.check_for_crashes( dump_directory, self.symbols_path, dump_save_path=dump_save_path, test_name=test_name, quiet=quiet) - if crashed: - self.crashed += 1 - else: - logger.warning("Can not log crashes without mozcrash") + + self.crashed += crash_count except: traceback.print_exc() - return self.crashed + return crash_count def cleanup(self): """ diff --git a/testing/mozbase/mozrunner/setup.py b/testing/mozbase/mozrunner/setup.py index 8945f2f45986..23ffe88de16c 100644 --- a/testing/mozbase/mozrunner/setup.py +++ b/testing/mozbase/mozrunner/setup.py @@ -6,7 +6,7 @@ import sys from setuptools import setup, find_packages PACKAGE_NAME = 'mozrunner' -PACKAGE_VERSION = '6.12' +PACKAGE_VERSION = '6.13' desc = """Reliable start/stop/configuration of Mozilla Applications (Firefox, Thunderbird, etc.)""" @@ -18,7 +18,7 @@ deps = ['mozdevice >= 0.37', 'mozprofile >= 0.18', ] -EXTRAS_REQUIRE = {'crash': ['mozcrash >= 0.14']} +EXTRAS_REQUIRE = {'crash': ['mozcrash >= 1.0']} # we only support python 2 right now assert sys.version_info[0] == 2 diff --git a/testing/mozbase/mozrunner/tests/manifest.ini b/testing/mozbase/mozrunner/tests/manifest.ini index b57a2ebcc8c3..62af8fb3081c 100644 --- a/testing/mozbase/mozrunner/tests/manifest.ini +++ b/testing/mozbase/mozrunner/tests/manifest.ini @@ -1,3 +1,4 @@ +[test_crash.py] [test_interactive.py] [test_start.py] [test_states.py] diff --git a/testing/mozbase/mozrunner/tests/test_crash.py b/testing/mozbase/mozrunner/tests/test_crash.py new file mode 100644 index 000000000000..455fc5f72d36 --- /dev/null +++ b/testing/mozbase/mozrunner/tests/test_crash.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at http://mozilla.org/MPL/2.0/. + +import mock + +import mozrunnertest + + +class MozrunnerCrashTestCase(mozrunnertest.MozrunnerTestCase): + + @mock.patch('mozcrash.log_crashes', return_value=2) + def test_crash_count_with_logger(self, log_crashes): + self.assertEqual(self.runner.crashed, 0) + self.assertEqual(self.runner.check_for_crashes(), 2) + self.assertEqual(self.runner.crashed, 2) + self.assertEqual(self.runner.check_for_crashes(), 2) + self.assertEqual(self.runner.crashed, 4) + + log_crashes.return_value = 0 + self.assertEqual(self.runner.check_for_crashes(), 0) + self.assertEqual(self.runner.crashed, 4) + + @mock.patch('mozcrash.check_for_crashes', return_value=2) + def test_crash_count_without_logger(self, check_for_crashes): + self.runner.logger = None + + self.assertEqual(self.runner.crashed, 0) + self.assertEqual(self.runner.check_for_crashes(), 2) + self.assertEqual(self.runner.crashed, 2) + self.assertEqual(self.runner.check_for_crashes(), 2) + self.assertEqual(self.runner.crashed, 4) + + check_for_crashes.return_value = 0 + self.assertEqual(self.runner.check_for_crashes(), 0) + self.assertEqual(self.runner.crashed, 4) diff --git a/testing/tps/tps/testrunner.py b/testing/tps/tps/testrunner.py index 1a318a5efdaa..8e5aee6c8337 100644 --- a/testing/tps/tps/testrunner.py +++ b/testing/tps/tps/testrunner.py @@ -238,12 +238,7 @@ class TPSTestRunner(object): except: test = json.loads(testcontent[testcontent.find('{'):testcontent.find('}') + 1]) - testcontent += 'var config = %s;\n' % json.dumps(self.config, indent=2) - testcontent += 'var seconds_since_epoch = %d;\n' % int(time.time()) - - tmpfile = TempFile(prefix='tps_test_') - tmpfile.write(testcontent) - tmpfile.close() + self.preferences['tps.seconds_since_epoch'] = int(time.time()) # generate the profiles defined in the test, and a list of test phases profiles = {} @@ -261,7 +256,7 @@ class TPSTestRunner(object): phase, profiles[profilename], testname, - tmpfile.filename, + testpath, self.logfile, self.env, self.firefoxRunner, @@ -283,7 +278,7 @@ class TPSTestRunner(object): cleanup_phase = TPSTestPhase( 'cleanup-' + profilename, profiles[profilename], testname, - tmpfile.filename, + testpath, self.logfile, self.env, self.firefoxRunner, @@ -374,6 +369,8 @@ class TPSTestRunner(object): if 'preferences' in self.config: self.preferences.update(self.config['preferences']) + self.preferences['tps.config'] = json.dumps(self.config) + def run_tests(self): # delete the logfile if it already exists if os.access(self.logfile, os.F_OK): diff --git a/testing/web-platform/meta/MANIFEST.json b/testing/web-platform/meta/MANIFEST.json index 164bd068e955..bc3267d2f496 100644 --- a/testing/web-platform/meta/MANIFEST.json +++ b/testing/web-platform/meta/MANIFEST.json @@ -38719,6 +38719,18 @@ "url": "/web-animations/animation-model/animation-types/spacing-keyframes-shapes.html" } ], + "web-animations/interfaces/KeyframeEffect/copy-contructor.html": [ + { + "path": "web-animations/interfaces/KeyframeEffect/copy-contructor.html", + "url": "/web-animations/interfaces/KeyframeEffect/copy-contructor.html" + } + ], + "web-animations/interfaces/KeyframeEffectReadOnly/copy-contructor.html": [ + { + "path": "web-animations/interfaces/KeyframeEffectReadOnly/copy-contructor.html", + "url": "/web-animations/interfaces/KeyframeEffectReadOnly/copy-contructor.html" + } + ], "webaudio/the-audio-api/the-constantsourcenode-interface/test-constantsourcenode.html": [ { "path": "webaudio/the-audio-api/the-constantsourcenode-interface/test-constantsourcenode.html", diff --git a/testing/web-platform/tests/web-animations/interfaces/KeyframeEffect/copy-contructor.html b/testing/web-platform/tests/web-animations/interfaces/KeyframeEffect/copy-contructor.html new file mode 100644 index 000000000000..bc278389c108 --- /dev/null +++ b/testing/web-platform/tests/web-animations/interfaces/KeyframeEffect/copy-contructor.html @@ -0,0 +1,27 @@ + + +KeyframeEffect copy constructor tests + + + + + +

+ + diff --git a/testing/web-platform/tests/web-animations/interfaces/KeyframeEffectReadOnly/copy-contructor.html b/testing/web-platform/tests/web-animations/interfaces/KeyframeEffectReadOnly/copy-contructor.html new file mode 100644 index 000000000000..287ffe1148bd --- /dev/null +++ b/testing/web-platform/tests/web-animations/interfaces/KeyframeEffectReadOnly/copy-contructor.html @@ -0,0 +1,94 @@ + + +KeyframeEffectReadOnly copy constructor tests + + + + + +
+ + diff --git a/toolkit/components/extensions/Extension.jsm b/toolkit/components/extensions/Extension.jsm index 3a22b2f0c3a2..64fa271109fe 100644 --- a/toolkit/components/extensions/Extension.jsm +++ b/toolkit/components/extensions/Extension.jsm @@ -83,13 +83,13 @@ if (!AppConstants.RELEASE_OR_BETA) { Cu.import("resource://gre/modules/ExtensionUtils.jsm"); var { BaseContext, - defineLazyGetter, EventEmitter, - SchemaAPIManager, LocaleData, - instanceOf, - LocalAPIImplementation, + SchemaAPIManager, + SpreadArgs, + defineLazyGetter, flushJarCache, + instanceOf, } = ExtensionUtils; XPCOMUtils.defineLazyGetter(this, "console", ExtensionUtils.getConsole); @@ -242,8 +242,7 @@ let ProxyMessenger = { if (extensionId) { // TODO(robwu): map the extensionId to the addon parent process's message // manager when they run in a separate process. - let pipmm = Services.ppmm.getChildAt(0); - return pipmm; + return Services.ppmm.getChildAt(0); } return null; @@ -290,8 +289,8 @@ class ProxyContext extends BaseContext { // message manager object may change when `xulBrowser` swaps docshells, e.g. // when a tab is moved to a different window. this.currentMessageManager = xulBrowser.messageManager; - this._docShellTracker = new BrowserDocshellFollower(xulBrowser, - this.onBrowserChange.bind(this)); + this._docShellTracker = new BrowserDocshellFollower( + xulBrowser, this.onBrowserChange.bind(this)); Object.defineProperty(this, "principal", { value: principal, enumerable: true, configurable: true, @@ -386,6 +385,7 @@ class ExtensionChildProxyContext extends ProxyContext { } function findPathInObject(obj, path, printErrors = true) { + let parent; for (let elt of path.split(".")) { if (!obj || !(elt in obj)) { if (printErrors) { @@ -394,9 +394,13 @@ function findPathInObject(obj, path, printErrors = true) { return null; } + parent = obj; obj = obj[elt]; } + if (typeof obj === "function") { + return obj.bind(parent); + } return obj; } @@ -459,13 +463,12 @@ ParentAPIManager = { createProxyContext(data, target) { let {envType, extensionId, childId, principal} = data; if (this.proxyContexts.has(childId)) { - Cu.reportError("A WebExtension context with the given ID already exists!"); - return; + throw new Error("A WebExtension context with the given ID already exists!"); } + let extension = GlobalManager.getExtension(extensionId); if (!extension) { - Cu.reportError(`No WebExtension found with ID ${extensionId}`); - return; + throw new Error(`No WebExtension found with ID ${extensionId}`); } let context; @@ -474,15 +477,13 @@ ParentAPIManager = { // frame is also the same addon. if (principal.URI.prePath != extension.baseURI.prePath || !target.contentPrincipal.subsumes(principal)) { - Cu.reportError(`Refused to create privileged WebExtension context for ${principal.URI.spec}`); - return; + throw new Error(`Refused to create privileged WebExtension context for ${principal.URI.spec}`); } context = new ExtensionChildProxyContext(envType, extension, data, target); } else if (envType == "content_parent") { context = new ProxyContext(envType, extension, data, target, principal); } else { - Cu.reportError(`Invalid WebExtension context envType: ${envType}`); - return; + throw new Error(`Invalid WebExtension context envType: ${envType}`); } this.proxyContexts.set(childId, context); }, @@ -502,31 +503,41 @@ ParentAPIManager = { Cu.reportError("WebExtension warning: Message manager unexpectedly changed"); } - function callback(...cbArgs) { - let lastError = context.lastError; - - context.currentMessageManager.sendAsyncMessage("API:CallResult", { - childId: data.childId, - callId: data.callId, - args: cbArgs, - lastError: lastError ? lastError.message : null, - }); - } - - let args = data.args; - args = Cu.cloneInto(args, context.sandbox); - if (data.callId) { - args = args.concat(callback); - } try { - findPathInObject(context.apiObj, data.path)(...args); + let args = Cu.cloneInto(data.args, context.sandbox); + let result = findPathInObject(context.apiObj, data.path)(...args); + + if (data.callId) { + result = result || Promise.resolve(); + + result.then(result => { + result = result instanceof SpreadArgs ? [...result] : [result]; + + context.currentMessageManager.sendAsyncMessage("API:CallResult", { + childId: data.childId, + callId: data.callId, + result, + }); + }, error => { + error = context.normalizeError(error); + context.currentMessageManager.sendAsyncMessage("API:CallResult", { + childId: data.childId, + callId: data.callId, + error: {message: error.message}, + }); + }); + } } catch (e) { - let msg = e.message || "API failed"; - context.currentMessageManager.sendAsyncMessage("API:CallResult", { - childId: data.childId, - callId: data.callId, - lastError: msg, - }); + if (data.callId) { + let error = context.normalizeError(e); + context.currentMessageManager.sendAsyncMessage("API:CallResult", { + childId: data.childId, + callId: data.callId, + error: {message: error.message}, + }); + } else { + Cu.reportError(e); + } } }, @@ -716,52 +727,8 @@ GlobalManager = { }, injectInObject(context, isChromeCompat, dest) { - let apis = { - extensionTypes: {}, - }; - Management.generateAPIs(context, apis); - SchemaAPIManager.generateAPIs(context, context.extension.apis, apis); - - // For testing only. - context._unwrappedAPIs = apis; - - let schemaWrapper = { - isChromeCompat, - - get url() { - return context.uri.spec; - }, - - get principal() { - return context.principal; - }, - - get cloneScope() { - return context.cloneScope; - }, - - hasPermission(permission) { - return context.extension.hasPermission(permission); - }, - - shouldInject(namespace, name, allowedContexts) { - // Do not generate content script APIs, unless explicitly allowed. - if (context.envType === "content_parent" && !allowedContexts.includes("content")) { - return false; - } - if (context.envType !== "addon_parent" && - allowedContexts.includes("addon_parent_only")) { - return false; - } - return findPathInObject(apis, namespace, false) !== null; - }, - - getImplementation(namespace, name) { - let pathObj = findPathInObject(apis, namespace); - return new LocalAPIImplementation(pathObj, name, context); - }, - }; - Schemas.inject(dest, schemaWrapper); + Management.generateAPIs(context, dest); + SchemaAPIManager.generateAPIs(context, context.extension.apis, dest); }, }; diff --git a/toolkit/components/extensions/ExtensionChild.jsm b/toolkit/components/extensions/ExtensionChild.jsm index 0a92592bfeaf..02779de09f72 100644 --- a/toolkit/components/extensions/ExtensionChild.jsm +++ b/toolkit/components/extensions/ExtensionChild.jsm @@ -76,14 +76,17 @@ var apiManager = new class extends SchemaAPIManager { // 2) APIs without a local implementation and marked as incompatible with the // out-of-process model fall back to directly invoking the parent methods. // TODO(robwu): Remove this when all APIs have migrated. -class WannabeChildAPIManager extends ChildAPIManager { - createProxyContextInConstructor(data) { +class PseudoChildAPIManager extends ChildAPIManager { + createProxyContextInConstructor(originalData) { // Create a structured clone to simulate IPC. - data = Object.assign({}, data); - let {principal} = data; // Not structurally cloneable. - delete data.principal; + let data = Object.assign({}, originalData, {principal: null}); data = Cu.cloneInto(data, {}); - data.principal = principal; + // Principals can be structured cloned by message managers, but not + // by cloneInto. + data.principal = originalData.principal; + + this.url = data.url; + let name = "API:CreateProxyContext"; // The that receives messages from `this.messageManager`. let target = this.context.contentWindow @@ -105,7 +108,7 @@ class WannabeChildAPIManager extends ChildAPIManager { }); // Synchronously unload the ProxyContext because we synchronously create it. - this.context.callOnClose({close: proxyContext.unload.bind(proxyContext)}); + this.context.callOnClose(proxyContext); } getFallbackImplementation(namespace, name) { @@ -248,7 +251,7 @@ defineLazyGetter(ExtensionContext.prototype, "childManager", function() { apiManager.global.initializeBackgroundPage(this.contentWindow); } - let childManager = new WannabeChildAPIManager(this, this.messageManager, localApis, { + let childManager = new PseudoChildAPIManager(this, this.messageManager, localApis, { envType: "addon_parent", viewType: this.viewType, url: this.uri.spec, diff --git a/toolkit/components/extensions/ExtensionUtils.jsm b/toolkit/components/extensions/ExtensionUtils.jsm index 3b20f6703b53..c12cc082bb3d 100644 --- a/toolkit/components/extensions/ExtensionUtils.jsm +++ b/toolkit/components/extensions/ExtensionUtils.jsm @@ -508,6 +508,13 @@ class BaseContext { obj.close(); } } + + /** + * A simple proxy for unload(), for use with callOnClose(). + */ + close() { + this.unload(); + } } // Manages icon details for toolbar buttons in the |pageAction| and @@ -529,12 +536,7 @@ let IconDetails = { if (details.imageData) { let imageData = details.imageData; - // The global might actually be from Schema.jsm, which - // normalizes most of our arguments. In that case it won't have - // an ImageData property. But Schema.jsm doesn't normalize - // actual ImageData objects, so they will come from a global - // with the right property. - if (instanceOf(imageData, "ImageData")) { + if (typeof imageData == "string") { imageData = {"19": imageData}; } @@ -542,7 +544,7 @@ let IconDetails = { if (!INTEGER.test(size)) { throw new Error(`Invalid icon size ${size}, must be an integer`); } - result[size] = this.convertImageDataToDataURL(imageData[size], context); + result[size] = imageData[size]; } } @@ -642,16 +644,6 @@ let IconDetails = { image.src = imageURL; }); }, - - convertImageDataToDataURL(imageData, context) { - let document = context.contentWindow.document; - let canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); - canvas.width = imageData.width; - canvas.height = imageData.height; - canvas.getContext("2d").putImageData(imageData, 0, 0); - - return canvas.toDataURL("image/png"); - }, }; const LISTENERS = Symbol("listeners"); @@ -1896,10 +1888,10 @@ class ChildAPIManager { case "API:CallResult": let deferred = this.callPromises.get(data.callId); - if (data.lastError) { - deferred.reject({message: data.lastError}); + if ("error" in data) { + deferred.reject(data.error); } else { - deferred.resolve(new SpreadArgs(data.args)); + deferred.resolve(new SpreadArgs(data.result)); } this.callPromises.delete(data.callId); break; diff --git a/toolkit/components/extensions/Schemas.jsm b/toolkit/components/extensions/Schemas.jsm index 284ab518f9c4..9f21d36d735c 100644 --- a/toolkit/components/extensions/Schemas.jsm +++ b/toolkit/components/extensions/Schemas.jsm @@ -120,6 +120,18 @@ function exportLazyGetter(object, prop, getter) { }); } +const POSTPROCESSORS = { + convertImageDataToURL(imageData, context) { + let document = context.cloneScope.document; + let canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); + canvas.width = imageData.width; + canvas.height = imageData.height; + canvas.getContext("2d").putImageData(imageData, 0, 0); + + return canvas.toDataURL("image/png"); + }, +}; + // Parses a regular expression, with support for the Python extended // syntax that allows setting flags by including the string (?im) function parsePattern(pattern) { @@ -183,6 +195,7 @@ class Context { return value; }, }; + this.postprocessors = POSTPROCESSORS; this.isChromeCompat = false; this.currentChoices = new Set(); @@ -539,6 +552,14 @@ class Entry { */ this.preprocessor = schema.preprocess || null; + /** + * @property {string} [postprocessor] + * If set to a string value, and a postprocessor of the same is + * defined in the validation context, it will be applied to this + * value after any normalization. + */ + this.postprocessor = schema.postprocess || null; + /** * @property {Array} allowedContexts A list of allowed contexts * to consider before generating the API. @@ -562,6 +583,23 @@ class Entry { return value; } + /** + * Postprocess the given result with the postprocessor declared in + * `postprocessor`. + * + * @param {object} result + * @param {Context} context + * @returns {object} + */ + postprocess(result, context) { + if (result.error || !this.postprocessor) { + return result; + } + + let value = context.postprocessors[this.postprocessor](result.value, context); + return {value}; + } + /** * Logs a deprecation warning for this entry, based on the value of * its `deprecated` property. @@ -623,7 +661,7 @@ class Type extends Entry { * schemas of this type. */ static get EXTRA_PROPERTIES() { - return ["description", "deprecated", "preprocess", "allowedContexts"]; + return ["description", "deprecated", "preprocess", "postprocess", "allowedContexts"]; } /** @@ -722,7 +760,7 @@ class Type extends Entry { class AnyType extends Type { normalize(value, context) { this.checkDeprecated(context, value); - return {value}; + return this.postprocess({value}, context); } checkBaseType(baseType) { @@ -896,7 +934,7 @@ class StringType extends Type { if (this.enumeration) { if (this.enumeration.includes(value)) { - return {value}; + return this.postprocess({value}, context); } let choices = this.enumeration.map(JSON.stringify).join(", "); @@ -1136,7 +1174,7 @@ class ObjectType extends Type { // This is kind of a hack, but we can't normalize things that // aren't JSON, so we just return them. - return {value}; + return this.postprocess({value}, context); } let properties = this.extractProperties(value, context); @@ -1175,7 +1213,7 @@ class ObjectType extends Type { `not contain the unexpected properties [${props}]`); } - return {value: result}; + return this.postprocess({value: result}, context); } catch (e) { if (e.error) { return e; @@ -1267,7 +1305,7 @@ class IntegerType extends Type { `be no greater than ${this.maximum}`); } - return r; + return this.postprocess(r, context); } checkBaseType(baseType) { @@ -1331,7 +1369,7 @@ class ArrayType extends Type { `have at most ${this.maxItems} items`); } - return {value: result}; + return this.postprocess({value: result}, context); } checkBaseType(baseType) { diff --git a/toolkit/components/extensions/schemas/manifest.json b/toolkit/components/extensions/schemas/manifest.json index 885b4f3cc56b..09e6b56fba7b 100644 --- a/toolkit/components/extensions/schemas/manifest.json +++ b/toolkit/components/extensions/schemas/manifest.json @@ -349,19 +349,19 @@ { "type": "object", "patternProperties": { - "^[1-9]\\d*$": { - "type": "object", - "isInstanceOf": "ImageData" - } + "^[1-9]\\d*$": { "$ref": "ImageData" } }, "additionalProperties": false }, - { - "type": "object", - "isInstanceOf": "ImageData" - } + { "$ref": "ImageData" } ] }, + { + "id": "ImageData", + "type": "object", + "isInstanceOf": "ImageData", + "postprocess": "convertImageDataToURL" + }, { "id": "UnrecognizedProperty", "type": "any", diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_api_permissions.js b/toolkit/components/extensions/test/xpcshell/test_ext_api_permissions.js index 85ac798e2848..d653d0e7aa83 100644 --- a/toolkit/components/extensions/test/xpcshell/test_ext_api_permissions.js +++ b/toolkit/components/extensions/test/xpcshell/test_ext_api_permissions.js @@ -32,7 +32,7 @@ add_task(function* test_storage_api_without_permissions() { // Force API initialization. void context.apiObj; - ok(!("storage" in context._unwrappedAPIs), + ok(!("storage" in context.apiObj), "The storage API should not be initialized"); yield extension.unload(); @@ -57,7 +57,7 @@ add_task(function* test_storage_api_with_permissions() { // Force API initialization. void context.apiObj; - equal(typeof context._unwrappedAPIs.storage, "object", + equal(typeof context.apiObj.storage, "object", "The storage API should be initialized"); yield extension.unload(); diff --git a/toolkit/components/reader/ReaderMode.jsm b/toolkit/components/reader/ReaderMode.jsm index 50fd538f583e..033a024892cc 100644 --- a/toolkit/components/reader/ReaderMode.jsm +++ b/toolkit/components/reader/ReaderMode.jsm @@ -205,13 +205,14 @@ this.ReaderMode = { * @resolves JS object representing the article, or null if no article is found. */ parseDocument: Task.async(function* (doc) { - let uri = Services.io.newURI(doc.documentURI, null, null); - if (!this._shouldCheckUri(uri)) { + let documentURI = Services.io.newURI(doc.documentURI, null, null); + let baseURI = Services.io.newURI(doc.baseURI, null, null); + if (!this._shouldCheckUri(documentURI) || !this._shouldCheckUri(baseURI, true)) { this.log("Reader mode disabled for URI"); return null; } - return yield this._readerParse(uri, doc); + return yield this._readerParse(baseURI, doc); }), /** @@ -222,8 +223,13 @@ this.ReaderMode = { * @resolves JS object representing the article, or null if no article is found. */ downloadAndParseDocument: Task.async(function* (url) { - let uri = Services.io.newURI(url, null, null); let doc = yield this._downloadDocument(url); + let uri = Services.io.newURI(doc.baseURI, null, null); + if (!this._shouldCheckUri(uri, true)) { + this.log("Reader mode disabled for URI"); + return null; + } + return yield this._readerParse(uri, doc); }), @@ -376,7 +382,7 @@ this.ReaderMode = { "youtube.com", ], - _shouldCheckUri: function (uri) { + _shouldCheckUri: function (uri, isBaseUri = false) { if (!(uri.schemeIs("http") || uri.schemeIs("https"))) { this.log("Not parsing URI scheme: " + uri.scheme); return false; @@ -390,11 +396,11 @@ this.ReaderMode = { } // Sadly, some high-profile pages have false positives, so bail early for those: let asciiHost = uri.asciiHost; - if (this._blockedHosts.some(blockedHost => asciiHost.endsWith(blockedHost))) { + if (!isBaseUri && this._blockedHosts.some(blockedHost => asciiHost.endsWith(blockedHost))) { return false; } - if (!uri.filePath || uri.filePath == "/") { + if (!isBaseUri && (!uri.filePath || uri.filePath == "/")) { this.log("Not parsing home page: " + uri.spec); return false; } @@ -406,7 +412,7 @@ this.ReaderMode = { * Attempts to parse a document into an article. Heavy lifting happens * in readerWorker.js. * - * @param uri The article URI. + * @param uri The base URI of the article. * @param doc The document to parse. * @return {Promise} * @resolves JS object representing the article, or null if no article is found. diff --git a/toolkit/modules/SelectParentHelper.jsm b/toolkit/modules/SelectParentHelper.jsm index 2d37cdd5ee43..47df0ba8fea0 100644 --- a/toolkit/modules/SelectParentHelper.jsm +++ b/toolkit/modules/SelectParentHelper.jsm @@ -8,6 +8,9 @@ this.EXPORTED_SYMBOLS = [ "SelectParentHelper" ]; +const {utils: Cu} = Components; +const { AppConstants } = Cu.import("resource://gre/modules/AppConstants.jsm"); + // Maximum number of rows to display in the select dropdown. const MAX_ROWS = 20; @@ -57,7 +60,7 @@ this.SelectParentHelper = { constraintRect.top + win.mozInnerScreenY, constraintRect.width, constraintRect.height); menupopup.setConstraintRect(constraintRect); - menupopup.openPopupAtScreenRect("after_start", rect.left, rect.top, rect.width, rect.height, false, false); + menupopup.openPopupAtScreenRect(AppConstants.platform == "macosx" ? "selection" : "after_start", rect.left, rect.top, rect.width, rect.height, false, false); }, hide: function(menulist, browser) { diff --git a/widget/CompositorWidget.h b/widget/CompositorWidget.h index d409faa1f342..93269eac684d 100644 --- a/widget/CompositorWidget.h +++ b/widget/CompositorWidget.h @@ -53,6 +53,18 @@ class CompositorWidgetChild; # define MOZ_WIDGET_SUPPORTS_OOP_COMPOSITING #endif +class WidgetRenderingContext +{ +public: +#if defined(XP_MACOSX) + WidgetRenderingContext() : mLayerManager(nullptr) {} + layers::LayerManagerComposite* mLayerManager; +#elif defined(MOZ_WIDGET_ANDROID) + WidgetRenderingContext() : mCompositor(nullptr) {} + layers::Compositor* mCompositor; +#endif +}; + /** * Access to a widget from the compositor is restricted to these methods. */ @@ -74,7 +86,7 @@ public: * Always called from the compositing thread, which may be the main-thread if * OMTC is not enabled. */ - virtual bool PreRender(layers::LayerManagerComposite* aManager) { + virtual bool PreRender(WidgetRenderingContext* aContext) { return true; } @@ -85,7 +97,7 @@ public: * Always called from the compositing thread, which may be the main-thread if * OMTC is not enabled. */ - virtual void PostRender(layers::LayerManagerComposite* aManager) + virtual void PostRender(WidgetRenderingContext* aContext) {} /** @@ -93,7 +105,7 @@ public: * * Always called from the compositing thread. */ - virtual void DrawWindowUnderlay(layers::LayerManagerComposite* aManager, + virtual void DrawWindowUnderlay(WidgetRenderingContext* aContext, LayoutDeviceIntRect aRect) {} @@ -102,7 +114,7 @@ public: * * Always called from the compositing thread. */ - virtual void DrawWindowOverlay(layers::LayerManagerComposite* aManager, + virtual void DrawWindowOverlay(WidgetRenderingContext* aContext, LayoutDeviceIntRect aRect) {} diff --git a/widget/InProcessCompositorWidget.cpp b/widget/InProcessCompositorWidget.cpp index e67518570fe6..9b301fc48203 100644 --- a/widget/InProcessCompositorWidget.cpp +++ b/widget/InProcessCompositorWidget.cpp @@ -33,29 +33,29 @@ InProcessCompositorWidget::InProcessCompositorWidget(nsBaseWidget* aWidget) } bool -InProcessCompositorWidget::PreRender(layers::LayerManagerComposite* aManager) +InProcessCompositorWidget::PreRender(WidgetRenderingContext* aContext) { - return mWidget->PreRender(aManager); + return mWidget->PreRender(aContext); } void -InProcessCompositorWidget::PostRender(layers::LayerManagerComposite* aManager) +InProcessCompositorWidget::PostRender(WidgetRenderingContext* aContext) { - mWidget->PostRender(aManager); + mWidget->PostRender(aContext); } void -InProcessCompositorWidget::DrawWindowUnderlay(layers::LayerManagerComposite* aManager, - LayoutDeviceIntRect aRect) +InProcessCompositorWidget::DrawWindowUnderlay(WidgetRenderingContext* aContext, + LayoutDeviceIntRect aRect) { - mWidget->DrawWindowUnderlay(aManager, aRect); + mWidget->DrawWindowUnderlay(aContext, aRect); } void -InProcessCompositorWidget::DrawWindowOverlay(layers::LayerManagerComposite* aManager, - LayoutDeviceIntRect aRect) +InProcessCompositorWidget::DrawWindowOverlay(WidgetRenderingContext* aContext, + LayoutDeviceIntRect aRect) { - mWidget->DrawWindowOverlay(aManager, aRect); + mWidget->DrawWindowOverlay(aContext, aRect); } already_AddRefed diff --git a/widget/InProcessCompositorWidget.h b/widget/InProcessCompositorWidget.h index 841045840aa2..ae9e51b3b106 100644 --- a/widget/InProcessCompositorWidget.h +++ b/widget/InProcessCompositorWidget.h @@ -17,11 +17,11 @@ class InProcessCompositorWidget : public CompositorWidget public: explicit InProcessCompositorWidget(nsBaseWidget* aWidget); - virtual bool PreRender(layers::LayerManagerComposite* aManager) override; - virtual void PostRender(layers::LayerManagerComposite* aManager) override; - virtual void DrawWindowUnderlay(layers::LayerManagerComposite* aManager, + virtual bool PreRender(WidgetRenderingContext* aManager) override; + virtual void PostRender(WidgetRenderingContext* aManager) override; + virtual void DrawWindowUnderlay(WidgetRenderingContext* aContext, LayoutDeviceIntRect aRect) override; - virtual void DrawWindowOverlay(layers::LayerManagerComposite* aManager, + virtual void DrawWindowOverlay(WidgetRenderingContext* aContext, LayoutDeviceIntRect aRect) override; virtual already_AddRefed StartRemoteDrawing() override; virtual already_AddRefed diff --git a/widget/PuppetWidget.cpp b/widget/PuppetWidget.cpp index f524d08e3402..4ddbccbe0d03 100644 --- a/widget/PuppetWidget.cpp +++ b/widget/PuppetWidget.cpp @@ -1081,7 +1081,7 @@ PuppetWidget::Paint() if (mTabChild) { mTabChild->NotifyPainted(); } - } else { + } else if (mozilla::layers::LayersBackend::LAYERS_BASIC == mLayerManager->GetBackendType()) { RefPtr ctx = gfxContext::CreateOrNull(mDrawTarget); if (!ctx) { gfxDevCrash(LogReason::InvalidContext) << "PuppetWidget context problem " << gfx::hexa(mDrawTarget); diff --git a/widget/android/fennec/FennecJNIWrappers.cpp b/widget/android/fennec/FennecJNIWrappers.cpp index 6fe115c3e89f..f8be6833bf6f 100644 --- a/widget/android/fennec/FennecJNIWrappers.cpp +++ b/widget/android/fennec/FennecJNIWrappers.cpp @@ -278,9 +278,9 @@ auto MediaDrmProxy::CloseSession(int32_t a0, mozilla::jni::String::Param a1) con constexpr char MediaDrmProxy::Create_t::name[]; constexpr char MediaDrmProxy::Create_t::signature[]; -auto MediaDrmProxy::Create(mozilla::jni::String::Param a0, mozilla::jni::Object::Param a1) -> MediaDrmProxy::LocalRef +auto MediaDrmProxy::Create(mozilla::jni::String::Param a0, mozilla::jni::Object::Param a1, bool a2) -> MediaDrmProxy::LocalRef { - return mozilla::jni::Method::Call(MediaDrmProxy::Context(), nullptr, a0, a1); + return mozilla::jni::Method::Call(MediaDrmProxy::Context(), nullptr, a0, a1, a2); } constexpr char MediaDrmProxy::CreateSession_t::name[]; diff --git a/widget/android/fennec/FennecJNIWrappers.h b/widget/android/fennec/FennecJNIWrappers.h index eeddf429c48b..bb94cd142e6e 100644 --- a/widget/android/fennec/FennecJNIWrappers.h +++ b/widget/android/fennec/FennecJNIWrappers.h @@ -999,10 +999,11 @@ public: typedef MediaDrmProxy::Param SetterType; typedef mozilla::jni::Args< mozilla::jni::String::Param, - mozilla::jni::Object::Param> Args; + mozilla::jni::Object::Param, + bool> Args; static constexpr char name[] = "create"; static constexpr char signature[] = - "(Ljava/lang/String;Lorg/mozilla/gecko/media/MediaDrmProxy$Callbacks;)Lorg/mozilla/gecko/media/MediaDrmProxy;"; + "(Ljava/lang/String;Lorg/mozilla/gecko/media/MediaDrmProxy$Callbacks;Z)Lorg/mozilla/gecko/media/MediaDrmProxy;"; static const bool isStatic = true; static const mozilla::jni::ExceptionMode exceptionMode = mozilla::jni::ExceptionMode::ABORT; @@ -1012,7 +1013,7 @@ public: mozilla::jni::DispatchTarget::CURRENT; }; - static auto Create(mozilla::jni::String::Param, mozilla::jni::Object::Param) -> MediaDrmProxy::LocalRef; + static auto Create(mozilla::jni::String::Param, mozilla::jni::Object::Param, bool) -> MediaDrmProxy::LocalRef; struct CreateSession_t { typedef MediaDrmProxy Owner; diff --git a/widget/android/nsWindow.cpp b/widget/android/nsWindow.cpp index 09f75220ef13..6680d11d8fc7 100644 --- a/widget/android/nsWindow.cpp +++ b/widget/android/nsWindow.cpp @@ -3462,13 +3462,13 @@ nsWindow::SynthesizeNativeMouseMove(LayoutDeviceIntPoint aPoint, } bool -nsWindow::PreRender(LayerManagerComposite* aManager) +nsWindow::PreRender(WidgetRenderingContext* aContext) { if (Destroyed()) { return true; } - layers::Compositor* compositor = aManager->GetCompositor(); + layers::Compositor* compositor = aContext->mCompositor; GeckoLayerClient::LocalRef client; @@ -3484,7 +3484,7 @@ nsWindow::PreRender(LayerManagerComposite* aManager) return true; } void -nsWindow::DrawWindowUnderlay(LayerManagerComposite* aManager, +nsWindow::DrawWindowUnderlay(WidgetRenderingContext* aContext, LayoutDeviceIntRect aRect) { if (Destroyed()) { @@ -3515,7 +3515,7 @@ nsWindow::DrawWindowUnderlay(LayerManagerComposite* aManager, } void -nsWindow::DrawWindowOverlay(LayerManagerComposite* aManager, +nsWindow::DrawWindowOverlay(WidgetRenderingContext* aContext, LayoutDeviceIntRect aRect) { PROFILER_LABEL("nsWindow", "DrawWindowOverlay", diff --git a/widget/android/nsWindow.h b/widget/android/nsWindow.h index fee41026bd2a..f3d7566f76a7 100644 --- a/widget/android/nsWindow.h +++ b/widget/android/nsWindow.h @@ -204,9 +204,11 @@ public: LayerManagerPersistence aPersistence = LAYER_MANAGER_CURRENT) override; virtual bool NeedsPaint() override; - virtual bool PreRender(LayerManagerComposite* aManager) override; - virtual void DrawWindowUnderlay(LayerManagerComposite* aManager, LayoutDeviceIntRect aRect) override; - virtual void DrawWindowOverlay(LayerManagerComposite* aManager, LayoutDeviceIntRect aRect) override; + virtual bool PreRender(mozilla::widget::WidgetRenderingContext* aContext) override; + virtual void DrawWindowUnderlay(mozilla::widget::WidgetRenderingContext* aContext, + LayoutDeviceIntRect aRect) override; + virtual void DrawWindowOverlay(mozilla::widget::WidgetRenderingContext* aContext, + LayoutDeviceIntRect aRect) override; virtual bool WidgetPaintsBackground() override; diff --git a/widget/cocoa/TextInputHandler.mm b/widget/cocoa/TextInputHandler.mm index 302e315474a6..b7917fe45ff6 100644 --- a/widget/cocoa/TextInputHandler.mm +++ b/widget/cocoa/TextInputHandler.mm @@ -1518,6 +1518,8 @@ TextInputHandler::HandleKeyDownEvent(NSEvent* aNativeEvent) return false; } + // Insert empty line to the log for easier to read. + MOZ_LOG(gLog, LogLevel::Info, ("")); MOZ_LOG(gLog, LogLevel::Info, ("%p TextInputHandler::HandleKeyDownEvent, aNativeEvent=%p, " "type=%s, keyCode=%lld (0x%X), modifierFlags=0x%X, characters=\"%s\", " @@ -1686,6 +1688,8 @@ TextInputHandler::HandleKeyDownEvent(NSEvent* aNativeEvent) this, TrueOrFalse(currentKeyEvent->mKeyDownHandled), TrueOrFalse(currentKeyEvent->mKeyPressHandled), TrueOrFalse(currentKeyEvent->mCausedOtherKeyEvents))); + // Insert empty line to the log for easier to read. + MOZ_LOG(gLog, LogLevel::Info, ("")); return currentKeyEvent->IsDefaultPrevented(); NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(false); @@ -2188,10 +2192,20 @@ TextInputHandler::InsertText(NSAttributedString* aAttrString, return; } - // If this is not caused by pressing a key or there is a composition, let's + bool isReplacingSpecifiedRange = + isEditable && aReplacementRange && + aReplacementRange->location != NSNotFound && + !NSEqualRanges(selectedRange, *aReplacementRange); + + // If this is not caused by pressing a key, there is a composition or + // replacing a range which is different from current selection, let's // insert the text as committing a composition. - if (!currentKeyEvent || IsIMEComposing()) { + if (!currentKeyEvent || IsIMEComposing() || isReplacingSpecifiedRange) { InsertTextAsCommittingComposition(aAttrString, aReplacementRange); + if (currentKeyEvent) { + currentKeyEvent->mKeyPressHandled = true; + currentKeyEvent->mKeyPressDispatched = true; + } return; } @@ -2201,16 +2215,8 @@ TextInputHandler::InsertText(NSAttributedString* aAttrString, return; } + // XXX Shouldn't we hold mDispatcher instead of mWidget? RefPtr widget(mWidget); - - // If the replacement range is specified, select the range. Then, the - // selection will be replaced by the later keypress event. - if (isEditable && - aReplacementRange && aReplacementRange->location != NSNotFound && - !NSEqualRanges(selectedRange, *aReplacementRange)) { - NS_ENSURE_TRUE_VOID(SetSelection(*aReplacementRange)); - } - nsresult rv = mDispatcher->BeginNativeInputTransaction(); if (NS_WARN_IF(NS_FAILED(rv))) { MOZ_LOG(gLog, LogLevel::Error, @@ -3143,19 +3149,37 @@ IMEInputHandler::SetMarkedText(NSAttributedString* aAttrString, { NS_OBJC_BEGIN_TRY_ABORT_BLOCK; + KeyEventState* currentKeyEvent = GetCurrentKeyEvent(); + MOZ_LOG(gLog, LogLevel::Info, ("%p IMEInputHandler::SetMarkedText, " "aAttrString=\"%s\", aSelectedRange={ location=%llu, length=%llu }, " "aReplacementRange=%p { location=%llu, length=%llu }, " "Destroyed()=%s, IgnoreIMEComposition()=%s, IsIMEComposing()=%s, " - "mMarkedRange={ location=%llu, length=%llu }", + "mMarkedRange={ location=%llu, length=%llu }, keyevent=%p, " + "keydownHandled=%s, keypressDispatched=%s, causedOtherKeyEvents=%s", this, GetCharacters([aAttrString string]), aSelectedRange.location, aSelectedRange.length, aReplacementRange, aReplacementRange ? aReplacementRange->location : 0, aReplacementRange ? aReplacementRange->length : 0, TrueOrFalse(Destroyed()), TrueOrFalse(IgnoreIMEComposition()), TrueOrFalse(IsIMEComposing()), - mMarkedRange.location, mMarkedRange.length)); + mMarkedRange.location, mMarkedRange.length, + currentKeyEvent ? currentKeyEvent->mKeyEvent : nullptr, + currentKeyEvent ? + TrueOrFalse(currentKeyEvent->mKeyDownHandled) : "N/A", + currentKeyEvent ? + TrueOrFalse(currentKeyEvent->mKeyPressDispatched) : "N/A", + currentKeyEvent ? + TrueOrFalse(currentKeyEvent->mCausedOtherKeyEvents) : "N/A")); + + // If SetMarkedText() is called during composition, that means that + // the key event caused this composition. So, keypress event shouldn't + // be dispatched later, let's consume it here. + if (currentKeyEvent) { + currentKeyEvent->mKeyPressHandled = true; + currentKeyEvent->mKeyPressDispatched = true; + } if (Destroyed() || IgnoreIMEComposition()) { return; @@ -3248,6 +3272,10 @@ IMEInputHandler::GetAttributedSubstringFromRange(NSRange& aRange, // In such case, we should use mIMECompositionString since if the composition // string is handled by a remote process, the content cache may be out of // date. + // XXX Should we set composition string attributes? Although, Blink claims + // that some attributes of marked text are supported, but they return + // just marked string without any style. So, let's keep current behavior + // at least for now. NSUInteger compositionLength = mIMECompositionString ? [mIMECompositionString length] : 0; if (mIMECompositionStart != UINT32_MAX && @@ -3569,6 +3597,10 @@ IMEInputHandler::CharacterIndexForPoint(NSPoint& aPoint) NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(NSNotFound); } +extern "C" { +extern NSString *NSTextInputReplacementRangeAttributeName; +} + NSArray* IMEInputHandler::GetValidAttributesForMarkedText() { @@ -3577,14 +3609,16 @@ IMEInputHandler::GetValidAttributesForMarkedText() MOZ_LOG(gLog, LogLevel::Info, ("%p IMEInputHandler::GetValidAttributesForMarkedText", this)); - //RefPtr kungFuDeathGrip(this); - - //return [NSArray arrayWithObjects:NSUnderlineStyleAttributeName, - // NSMarkedClauseSegmentAttributeName, - // NSTextInputReplacementRangeAttributeName, - // nil]; - // empty array; we don't support any attributes right now - return [NSArray array]; + // Return same attributes as Chromium (see render_widget_host_view_mac.mm) + // because most IMEs must be tested with Safari (OS default) and Chrome + // (having most market share). Therefore, we need to follow their behavior. + // XXX It might be better to reuse an array instance for this result because + // this may be called a lot. Note that Chromium does so. + return [NSArray arrayWithObjects:NSUnderlineStyleAttributeName, + NSUnderlineColorAttributeName, + NSMarkedClauseSegmentAttributeName, + NSTextInputReplacementRangeAttributeName, + nil]; NS_OBJC_END_TRY_ABORT_BLOCK_NIL; } diff --git a/widget/cocoa/nsChildView.h b/widget/cocoa/nsChildView.h index 94bbc27c7ef3..f0655b129dce 100644 --- a/widget/cocoa/nsChildView.h +++ b/widget/cocoa/nsChildView.h @@ -52,6 +52,7 @@ class IAPZCTreeManager; } // namespace layers namespace widget { class RectTextureImage; +class WidgetRenderingContext; } // namespace widget } // namespace mozilla @@ -441,9 +442,9 @@ public: virtual void CreateCompositor() override; virtual void PrepareWindowEffects() override; virtual void CleanupWindowEffects() override; - virtual bool PreRender(LayerManagerComposite* aManager) override; - virtual void PostRender(LayerManagerComposite* aManager) override; - virtual void DrawWindowOverlay(LayerManagerComposite* aManager, + virtual bool PreRender(mozilla::widget::WidgetRenderingContext* aContext) override; + virtual void PostRender(mozilla::widget::WidgetRenderingContext* aContext) override; + virtual void DrawWindowOverlay(mozilla::widget::WidgetRenderingContext* aManager, LayoutDeviceIntRect aRect) override; virtual void UpdateThemeGeometries(const nsTArray& aThemeGeometries) override; diff --git a/widget/cocoa/nsChildView.mm b/widget/cocoa/nsChildView.mm index 2b811174f012..cf5ec0f17110 100644 --- a/widget/cocoa/nsChildView.mm +++ b/widget/cocoa/nsChildView.mm @@ -67,6 +67,7 @@ #include "mozilla/layers/CompositorBridgeParent.h" #include "mozilla/layers/BasicCompositor.h" #include "mozilla/layers/InputAPZContext.h" +#include "mozilla/widget/CompositorWidget.h" #include "gfxUtils.h" #include "gfxPrefs.h" #include "mozilla/gfx/2D.h" @@ -2019,9 +2020,9 @@ nsChildView::CleanupWindowEffects() } bool -nsChildView::PreRender(LayerManagerComposite* aManager) +nsChildView::PreRender(WidgetRenderingContext* aContext) { - UniquePtr manager(GLManager::CreateGLManager(aManager)); + UniquePtr manager(GLManager::CreateGLManager(aContext->mLayerManager)); if (!manager) { return true; } @@ -2041,9 +2042,9 @@ nsChildView::PreRender(LayerManagerComposite* aManager) } void -nsChildView::PostRender(LayerManagerComposite* aManager) +nsChildView::PostRender(WidgetRenderingContext* aContext) { - UniquePtr manager(GLManager::CreateGLManager(aManager)); + UniquePtr manager(GLManager::CreateGLManager(aContext->mLayerManager)); if (!manager) { return; } @@ -2053,10 +2054,10 @@ nsChildView::PostRender(LayerManagerComposite* aManager) } void -nsChildView::DrawWindowOverlay(LayerManagerComposite* aManager, +nsChildView::DrawWindowOverlay(WidgetRenderingContext* aContext, LayoutDeviceIntRect aRect) { - mozilla::UniquePtr manager(GLManager::CreateGLManager(aManager)); + mozilla::UniquePtr manager(GLManager::CreateGLManager(aContext->mLayerManager)); if (manager) { DrawWindowOverlay(manager.get(), aRect); } @@ -4000,9 +4001,8 @@ NSEvent* gLastDragMouseDownEvent = nil; } if ([self isUsingOpenGL]) { - if (mGeckoChild->GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT) { - ClientLayerManager *manager = static_cast(mGeckoChild->GetLayerManager()); - manager->AsShadowForwarder()->WindowOverlayChanged(); + if (ShadowLayerForwarder* slf = mGeckoChild->GetLayerManager()->AsShadowForwarder()) { + slf->WindowOverlayChanged(); } } diff --git a/widget/gonk/nsWindow.cpp b/widget/gonk/nsWindow.cpp index c4acd2bcaf0f..e11b7f233993 100644 --- a/widget/gonk/nsWindow.cpp +++ b/widget/gonk/nsWindow.cpp @@ -623,9 +623,7 @@ nsWindow::GetLayerManager(PLayerTransactionChild* aShadowManager, if (mLayerManager) { // This layer manager might be used for painting outside of DoDraw(), so we need // to set the correct rotation on it. - if (mLayerManager->GetBackendType() == LayersBackend::LAYERS_CLIENT) { - ClientLayerManager* manager = - static_cast(mLayerManager.get()); + if (ClientLayerManager* manager = mLayerManager->AsClientLayerManager()) { uint32_t rotation = mScreen->EffectiveScreenRotation(); manager->SetDefaultTargetConfiguration(mozilla::layers::BufferMode::BUFFER_NONE, ScreenRotation(rotation)); diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp index bc59473c7104..02cfea65bc9a 100644 --- a/widget/gtk/nsWindow.cpp +++ b/widget/gtk/nsWindow.cpp @@ -2146,10 +2146,7 @@ nsWindow::OnExposeEvent(cairo_t *cr) LayoutDeviceIntRegion region = exposeRegion; region.ScaleRoundOut(scale, scale); - ClientLayerManager *clientLayers = - (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT) - ? static_cast(GetLayerManager()) - : nullptr; + ClientLayerManager *clientLayers = GetLayerManager()->AsClientLayerManager(); if (clientLayers && mCompositorSession) { // We need to paint to the screen even if nothing changed, since if we diff --git a/widget/nsBaseWidget.cpp b/widget/nsBaseWidget.cpp index 8c937afe85b5..bd5c8216fb29 100644 --- a/widget/nsBaseWidget.cpp +++ b/widget/nsBaseWidget.cpp @@ -375,9 +375,10 @@ nsBaseWidget::~nsBaseWidget() { IMEStateManager::WidgetDestroyed(this); - if (mLayerManager && - mLayerManager->GetBackendType() == LayersBackend::LAYERS_BASIC) { - static_cast(mLayerManager.get())->ClearRetainerWidget(); + if (mLayerManager) { + if (BasicLayerManager* mgr = mLayerManager->AsBasicLayerManager()) { + mgr->ClearRetainerWidget(); + } } FreeShutdownObserver(); @@ -906,20 +907,21 @@ nsBaseWidget::AutoLayerManagerSetup::AutoLayerManagerSetup( BufferMode aDoubleBuffering, ScreenRotation aRotation) : mWidget(aWidget) { - mLayerManager = static_cast(mWidget->GetLayerManager()); - if (mLayerManager) { - NS_ASSERTION(mLayerManager->GetBackendType() == LayersBackend::LAYERS_BASIC, - "AutoLayerManagerSetup instantiated for non-basic layer backend!"); - mLayerManager->SetDefaultTarget(aTarget); - mLayerManager->SetDefaultTargetConfiguration(aDoubleBuffering, aRotation); + LayerManager* lm = mWidget->GetLayerManager(); + NS_ASSERTION(!lm || lm->GetBackendType() == LayersBackend::LAYERS_BASIC, + "AutoLayerManagerSetup instantiated for non-basic layer backend!"); + if (lm) { + mLayerManager = lm->AsBasicLayerManager(); + if (mLayerManager) { + mLayerManager->SetDefaultTarget(aTarget); + mLayerManager->SetDefaultTargetConfiguration(aDoubleBuffering, aRotation); + } } } nsBaseWidget::AutoLayerManagerSetup::~AutoLayerManagerSetup() { if (mLayerManager) { - NS_ASSERTION(mLayerManager->GetBackendType() == LayersBackend::LAYERS_BASIC, - "AutoLayerManagerSetup instantiated for non-basic layer backend!"); mLayerManager->SetDefaultTarget(nullptr); mLayerManager->SetDefaultTargetConfiguration(mozilla::layers::BufferMode::BUFFER_NONE, ROTATION_0); } diff --git a/widget/nsBaseWidget.h b/widget/nsBaseWidget.h index b5bcfe3a774d..15964e4d2310 100644 --- a/widget/nsBaseWidget.h +++ b/widget/nsBaseWidget.h @@ -63,6 +63,7 @@ struct ScrollableLayerGuid; namespace widget { class CompositorWidgetDelegate; class InProcessCompositorWidget; +class WidgetRenderingContext; } // namespace widget class CompositorVsyncDispatcher; @@ -391,15 +392,15 @@ protected: // These are methods for CompositorWidgetWrapper, and should only be // accessed from that class. Derived widgets can choose which methods to // implement, or none if supporting out-of-process compositing. - virtual bool PreRender(mozilla::layers::LayerManagerComposite* aManager) { + virtual bool PreRender(mozilla::widget::WidgetRenderingContext* aContext) { return true; } - virtual void PostRender(mozilla::layers::LayerManagerComposite* aManager) + virtual void PostRender(mozilla::widget::WidgetRenderingContext* aContext) {} - virtual void DrawWindowUnderlay(mozilla::layers::LayerManagerComposite* aManager, + virtual void DrawWindowUnderlay(mozilla::widget::WidgetRenderingContext* aContext, LayoutDeviceIntRect aRect) {} - virtual void DrawWindowOverlay(mozilla::layers::LayerManagerComposite* aManager, + virtual void DrawWindowOverlay(mozilla::widget::WidgetRenderingContext* aContext, LayoutDeviceIntRect aRect) {} virtual already_AddRefed StartRemoteDrawing(); diff --git a/widget/windows/WinCompositorWidget.cpp b/widget/windows/WinCompositorWidget.cpp index aa2f155e87e9..6ac9676fc342 100644 --- a/widget/windows/WinCompositorWidget.cpp +++ b/widget/windows/WinCompositorWidget.cpp @@ -44,7 +44,7 @@ WinCompositorWidget::OnDestroyWindow() } bool -WinCompositorWidget::PreRender(layers::LayerManagerComposite* aManager) +WinCompositorWidget::PreRender(WidgetRenderingContext* aContext) { // This can block waiting for WM_SETTEXT to finish // Using PreRender is unnecessarily pessimistic because @@ -55,7 +55,7 @@ WinCompositorWidget::PreRender(layers::LayerManagerComposite* aManager) } void -WinCompositorWidget::PostRender(layers::LayerManagerComposite* aManager) +WinCompositorWidget::PostRender(WidgetRenderingContext* aContext) { mPresentLock.Leave(); } diff --git a/widget/windows/WinCompositorWidget.h b/widget/windows/WinCompositorWidget.h index f7dd1ae40c1e..9661cab4584d 100644 --- a/widget/windows/WinCompositorWidget.h +++ b/widget/windows/WinCompositorWidget.h @@ -45,8 +45,8 @@ class WinCompositorWidget public: WinCompositorWidget(const CompositorWidgetInitData& aInitData); - bool PreRender(layers::LayerManagerComposite*) override; - void PostRender(layers::LayerManagerComposite*) override; + bool PreRender(WidgetRenderingContext*) override; + void PostRender(WidgetRenderingContext*) override; already_AddRefed StartRemoteDrawing() override; void EndRemoteDrawing() override; bool NeedsToDeferEndRemoteDrawing() override;